From b7861ffcf9c0c946853c2abbc2ed8bd178f2b6de Mon Sep 17 00:00:00 2001 From: Keith Edmunds Date: Thu, 27 May 2021 16:15:14 +0100 Subject: [PATCH] Preserve tags on normalise; output time to stdout logs --- app/log.py | 3 ++- app/songdb.py | 36 ++++++++++++++++++++++++++++-------- 2 files changed, 30 insertions(+), 9 deletions(-) diff --git a/app/log.py b/app/log.py index 976fa31..510cf55 100644 --- a/app/log.py +++ b/app/log.py @@ -37,7 +37,8 @@ syslog.addFilter(filter) stderr.addFilter(filter) # create formatter and add it to the handlers -stderr_fmt = logging.Formatter('%(leveltag)s: %(message)s') +stderr_fmt = logging.Formatter('[%(asctime)s] %(leveltag)s: %(message)s', + datefmt='%H:%M:%S') syslog_fmt = logging.Formatter('[%(name)s] %(leveltag)s: %(message)s') stderr.setFormatter(stderr_fmt) syslog.setFormatter(syslog_fmt) diff --git a/app/songdb.py b/app/songdb.py index feed1b3..7ef8201 100755 --- a/app/songdb.py +++ b/app/songdb.py @@ -1,4 +1,4 @@ -#!/usr/bin/python3 +#!/usr/bin/env python import argparse import os @@ -6,8 +6,9 @@ import shutil import tempfile from config import Config -from log import INFO +from log import DEBUG, INFO from model import Tracks, session +from mutagen.flac import FLAC from pydub import AudioSegment, effects from tinytag import TinyTag @@ -54,14 +55,33 @@ def add_path_to_db(path): if Config.NORMALISE_ON_IMPORT: # Get current file gid, uid and permissions stats = os.stat(path) - normalised = effects.normalize(audio) try: + # Copy original file fd, temp_path = tempfile.mkstemp() - normalised.export(temp_path, format=os.path.splitext(path)[1][1:]) - shutil.copyfile(temp_path, path) - os.chown(path, stats.st_uid, stats.st_gid) - os.chmod(path, stats.st_mode) - finally: + shutil.copyfile(path, temp_path) + except Exception as err: + DEBUG(f"songdb.add_path_to_db({path}): err1: {str(err)}") + return + + # Overwrite original file with normalised output + normalised = effects.normalize(audio) + try: + normalised.export(path, format=os.path.splitext(path)[1][1:]) + # Fix up permssions and ownership + os.chown(path, stats.st_uid, stats.st_gid) + os.chmod(path, stats.st_mode) + # Copy tags + src = FLAC(temp_path) + dst = FLAC(path) + for tag in src: + dst[tag] = src[tag] + dst.save() + except Exception as err: + DEBUG(f"songdb.add_path_to_db({path}): err2: {str(err)}") + # Restore original file + shutil.copyfile(path, temp_path) + finally: + if os.path.exists(temp_path): os.remove(temp_path) return track