Initial commit. Basic featues are implemented
This commit is contained in:
+99
@@ -0,0 +1,99 @@
|
||||
"""Metadata selection and building."""
|
||||
|
||||
|
||||
def select_album_value(track, input_metadata, args):
|
||||
"""
|
||||
Determine the album value according to precedence.
|
||||
|
||||
Precedence: --album > %al > original album > original title > None.
|
||||
|
||||
Args:
|
||||
track: Dict of parsed track data.
|
||||
input_metadata: Dict from get_metadata().
|
||||
args: Parsed command‑line arguments.
|
||||
|
||||
Returns:
|
||||
Album string or None.
|
||||
"""
|
||||
original_album = input_metadata.get('album')
|
||||
original_title = input_metadata.get('title')
|
||||
|
||||
if args.album:
|
||||
return args.album
|
||||
elif track.get('al'):
|
||||
return track.get('al')
|
||||
elif original_album:
|
||||
return original_album
|
||||
elif original_title:
|
||||
return original_title
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
def select_comment_value(input_metadata, args):
|
||||
"""
|
||||
Determine the comment value according to precedence.
|
||||
|
||||
Precedence: --no-comment > --comment > --merge-comments >
|
||||
--comment-stream > first comment from file.
|
||||
|
||||
Args:
|
||||
input_metadata: Dict from get_metadata().
|
||||
args: Parsed command‑line arguments.
|
||||
|
||||
Returns:
|
||||
Comment string or None.
|
||||
"""
|
||||
original_comments = input_metadata.get('comments', [])
|
||||
|
||||
if args.no_comment:
|
||||
return None
|
||||
elif args.comment:
|
||||
return args.comment
|
||||
elif args.merge_comments and original_comments:
|
||||
separator = args.comment_separator if args.comment_separator else '; '
|
||||
comments_text = separator.join(comment for _, comment in original_comments)
|
||||
return comments_text if comments_text else None
|
||||
elif args.comment_stream is not None:
|
||||
if 0 <= args.comment_stream < len(original_comments):
|
||||
return original_comments[args.comment_stream][1]
|
||||
else:
|
||||
print(f"Warning: Stream {args.comment_stream} not found in comments list. "
|
||||
f"Using first comment (if any).")
|
||||
if original_comments:
|
||||
return original_comments[0][1]
|
||||
return None
|
||||
elif original_comments:
|
||||
# Default: use the first comment.
|
||||
return original_comments[0][1]
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
def build_metadata_dict(track, idx, input_metadata, args):
|
||||
"""
|
||||
Assemble the final metadata dictionary for FFmpeg.
|
||||
|
||||
Args:
|
||||
track: Dict of parsed track data.
|
||||
idx: Track index (1‑based).
|
||||
input_metadata: Dict from get_metadata().
|
||||
args: Parsed command‑line arguments.
|
||||
|
||||
Returns:
|
||||
Dict with metadata fields (empty values removed).
|
||||
"""
|
||||
album_value = select_album_value(track, input_metadata, args)
|
||||
comment_value = select_comment_value(input_metadata, args)
|
||||
|
||||
metadata = {
|
||||
'title': track.get('tn', ''),
|
||||
'artist': track.get('an', ''),
|
||||
'album': album_value,
|
||||
'date': track.get('date', ''),
|
||||
'track': f"{idx:02d}",
|
||||
'comment': comment_value
|
||||
}
|
||||
|
||||
# Remove empty fields.
|
||||
return {k: v for k, v in metadata.items() if v}
|
||||
Reference in New Issue
Block a user