X-Git-Url: https://diplodocus.org/git/flac-archive/blobdiff_plain/73112f3f050b8f78a6d03449c00a60c6a30f715e..43f4f00bc3b007afe6bcf702d21956ca252b8f4c:/rewrite-tags diff --git a/rewrite-tags b/rewrite-tags index a3b5eb6..eec265e 100755 --- a/rewrite-tags +++ b/rewrite-tags @@ -60,7 +60,7 @@ def do_read(filenames): # this check belongs in Tags if len(track_tags) != 1: sys.stderr.write('bogus TRACKNUMBER %s: %s\n' % (track_tags, fn)) - return 3 + return 4 track = int(track_tags[0]) for tag, values in tags._global.iteritems(): # Makes no sense to save TRACKNUMBER in coll_tags. @@ -74,11 +74,18 @@ def do_read(filenames): coll_tags.set(tag, value, track) for tag, values in all_tags.iteritems(): if len(values) == 1: - # Only one value for this tag, so add it to global tags. - coll_tags.set(tag, list(values)[0]) - # And now remove it from each track tags. + # Only one value for this tag, but does that one value appear on + # all tracks? for track, tags in coll_tags._tracks.iteritems(): - del tags[tag] + if not tag in tags: + # Nope. + break + else: + # Yep, so add it to global tags. + coll_tags.set(tag, list(values)[0]) + # And now remove it from each track tags. + for track, tags in coll_tags._tracks.iteritems(): + del tags[tag] print '\n'.join(coll_tags.all()) return 0 @@ -88,9 +95,13 @@ def do_write(args): if len(args) != len(tags): sys.stderr.write('expected %d flac files, got %d\n' % (len(tags), len(args))) - return 4 - artist = tags.get_path_safe('ARTIST') + return 2 + artist = tags.get_path_safe('ALBUMARTIST') + if not artist: + artist = tags.get_path_safe('ARTIST') album = tags.get_path_safe('ALBUM') + if not album: + album = tags.get_path_safe('ALBUM', track=1) try: os.mkdir(artist) except OSError, e: @@ -120,10 +131,14 @@ def do_write(args): def main(args): if len(args) < 3: return usage() - if args[1] == 'read': - return do_read(args[2:]) - if args[1] == 'write': - return do_write(args[2:]) + try: + if args[1] == 'read': + return do_read(args[2:]) + if args[1] == 'write': + return do_write(args[2:]) + except SubprocessError, e: + sys.stderr.write('%s\n%s\n' % (e.stderr, e)) + return 3 return usage() def usage():