diff --git a/audio_splitter/filename.py b/audio_splitter/filename.py index 741be7b..dba71d6 100644 --- a/audio_splitter/filename.py +++ b/audio_splitter/filename.py @@ -41,7 +41,18 @@ def build_filename(track, idx, extension, args): clean_filename = apply_replacement(raw_filename, args.bad_chars, args.replacement_char) - clean_filename = cleanup_good_chars(clean_filename, args.replacement_char) + # Split off the file extension before cleanup so trailing + # replacement chars don't leak into the name portion. + name_part, _, ext_part = clean_filename.rpartition('.') + clean_filename = cleanup_good_chars(name_part, args.replacement_char) + # Strip leading/trailing separator characters (replacement char, + # hyphen, etc.) that may result from empty fields or bad-char + # sequences adjacent to template separators. + clean_filename = clean_filename.strip(f'{args.replacement_char}-') + # Fallback: if cleanup leaves an empty name, use the track number. + if not clean_filename: + clean_filename = f"{idx:02d}" + clean_filename = f"{clean_filename}.{ext_part}" else: clean_filename = raw_filename # Warn about unsafe characters.