Refactored some code

This commit is contained in:
Jamie Hardt
2025-05-25 09:32:59 -07:00
parent 4989832247
commit 532f67e3a8

View File

@@ -10,6 +10,7 @@ from argparse import ArgumentParser
import shlex import shlex
from typing import Callable, List from typing import Callable, List
import inspect import inspect
from io import StringIO
from tqdm import tqdm from tqdm import tqdm
@@ -29,47 +30,38 @@ def execute_batch_list(batch_list_path: str, dry_run: bool, interactive: bool):
parser.eval(line, line_no, interactive) parser.eval(line, line_no, interactive)
def create_batch_list(flac_files: List[str], command_file: str, def sort_flac_files(file_list, mode):
sort_mode='path'): if mode == 'path':
""" return sorted(file_list)
Read all FLAC files in the cwd and create a batchfile that re-creates all elif mode == 'mtime':
of their metadata. return sorted(file_list, key=os.path.getmtime)
elif mode == 'ctime':
return sorted(file_list, key=os.path.getctime)
elif mode == 'name':
return sorted(file_list, key=os.path.basename)
else:
return file_list
:param flac_files: Paths of files to create batchfile from
:param command_file: What to name the new batchfile
:param sort_mode: Order of paths in the batch list. Either 'path',
'mtime', 'ctime', 'name'
:param input_files: FLAC files to scan
"""
with open(command_file, mode='w', encoding='utf-8') as f:
f.write("# mfbatch\n\n")
metadatums = {}
if sort_mode == 'path': def write_batchfile_entries_for_file(path, metadatums):
flac_files = sorted(flac_files) buffer = StringIO()
elif sort_mode == 'mtime':
flac_files = sorted(flac_files, key=os.path.getmtime)
elif sort_mode == 'ctime':
flac_files = sorted(flac_files, key=os.path.getctime)
elif sort_mode == 'name':
flac_files = sorted(flac_files, key=os.path.basename)
for path in tqdm(flac_files, unit='File', desc='Scanning FLAC files'):
try: try:
this_file_metadata = metadata_funcs.read_metadata(path) this_file_metadata = metadata_funcs.read_metadata(path)
except CalledProcessError as e: except CalledProcessError as e:
f.write(f"# !!! METAFLAC ERROR ({e.returncode}) while reading " buffer.write(f"# !!! METAFLAC ERROR ({e.returncode}) while reading "
f"metadata from the file {path}\n\n") f"metadata from the file {path}\n\n")
continue return metadatums, buffer
for this_key, this_value in this_file_metadata.items(): for this_key, this_value in this_file_metadata.items():
if this_key not in metadatums: if this_key not in metadatums:
f.write(f":set {this_key} " buffer.write(f":set {this_key} "
f"{shlex.quote(this_value)}\n") f"{shlex.quote(this_value)}\n")
metadatums[this_key] = this_value metadatums[this_key] = this_value
else: else:
if this_value != metadatums[this_key]: if this_value != metadatums[this_key]:
f.write(f":set {this_key} " buffer.write(f":set {this_key} "
f"{shlex.quote(this_value)}" f"{shlex.quote(this_value)}"
"\n") "\n")
metadatums[this_key] = this_value metadatums[this_key] = this_value
@@ -77,11 +69,42 @@ def create_batch_list(flac_files: List[str], command_file: str,
keys = list(metadatums.keys()) keys = list(metadatums.keys())
for key in keys: for key in keys:
if key not in this_file_metadata: if key not in this_file_metadata:
f.write(f":unset {key}\n") buffer.write(f":unset {key}\n")
del metadatums[key] del metadatums[key]
f.write(path + "\n\n") buffer.write(path + "\n\n")
return metadatums, buffer
def create_batch_list(flac_files: List[str], command_file: str,
sort_mode='path'):
"""
Read all FLAC files in the cwd and create a batchfile that re-creates all
of their metadata.
:param flac_files: Paths of files to create batchfile from
:param command_file: Name of new batchfile
:param sort_mode: Order of paths in the batch list. Either 'path',
'mtime', 'ctime', 'name'
:param input_files: FLAC files to scan
"""
flac_files = sort_flac_files(flac_files, sort_mode)
with open(command_file, mode='w', encoding='utf-8') as f:
metadatums = {}
f.write("# mfbatch\n\n")
for path in tqdm(flac_files, unit='File',
desc='Scanning with metaflac...'):
metadatums, buffer = write_batchfile_entries_for_file(path,
metadatums)
f.write(buffer.read())
f.write("# mfbatch create batchlist operation complete\n")
def main(): def main():
""" """
@@ -94,8 +117,8 @@ def main():
action='store_true', action='store_true',
help='create a new list') help='create a new list')
op.add_argument('-F', '--from-file', metavar='FILE_LIST', action='store', op.add_argument('-F', '--from-file', metavar='FILE_LIST', action='store',
default=None, help="Instead of scanning directory for " default=None, help="get file paths from FILE_LIST when "
"FLAC files, get file paths from FILE_LIST when creating " "creating, instead of scanning directory"
"a new list") "a new list")
op.add_argument('-e', '--edit', action='store_true', op.add_argument('-e', '--edit', action='store_true',
help="open batch file in the default editor", help="open batch file in the default editor",