Introduce concept of mpd ordered track info for simpler diffing of tag caches
This commit is contained in:
parent
9309b5bd7d
commit
357591e97e
@ -47,6 +47,14 @@ def track_to_mpd_format(track, position=None, cpid=None, key=False, mtime=False)
|
||||
result.append(('mtime', get_mtime(uri_to_path(track.uri))))
|
||||
return result
|
||||
|
||||
MPD_KEY_ORDER = '''
|
||||
key file Time Artist AlbumArtist Title Album Track Date MUSICBRAINZ_ALBUMID
|
||||
MUSICBRAINZ_ALBUMARTISTID MUSICBRAINZ_ARTISTID MUSICBRAINZ_TRACKID mtime
|
||||
'''.split()
|
||||
|
||||
def order_mpd_track_info(result):
|
||||
return sorted(result, key=lambda i: MPD_KEY_ORDER.index(i[0]))
|
||||
|
||||
def artists_to_mpd_format(artists):
|
||||
"""
|
||||
Format track artists for output to MPD client.
|
||||
@ -105,6 +113,7 @@ def tracks_to_tag_cache_format(tracks):
|
||||
('fs_charset', protocol.ENCODING),
|
||||
('info_end',)
|
||||
]
|
||||
tracks.sort(key=lambda t: t.uri)
|
||||
_add_to_tag_cache(result, *tracks_to_directory_tree(tracks))
|
||||
return result
|
||||
|
||||
@ -121,7 +130,9 @@ def _add_to_tag_cache(result, folders, files):
|
||||
|
||||
result.append(('songList begin',))
|
||||
for track in files:
|
||||
result.extend(track_to_mpd_format(track, key=True, mtime=True))
|
||||
track_result = track_to_mpd_format(track, key=True, mtime=True)
|
||||
track_result = order_mpd_track_info(track_result)
|
||||
result.extend(track_result)
|
||||
result.append(('songList end',))
|
||||
|
||||
def tracks_to_directory_tree(tracks):
|
||||
|
||||
@ -111,6 +111,10 @@ class TracksToTagCacheFormatTest(unittest.TestCase):
|
||||
settings.runtime.clear()
|
||||
mtime.undo_fake()
|
||||
|
||||
def translate(self, track):
|
||||
result = translator.track_to_mpd_format(track, key=True, mtime=True)
|
||||
return translator.order_mpd_track_info(result)
|
||||
|
||||
def consume_headers(self, result):
|
||||
self.assertEqual(('info_begin',), result[0])
|
||||
self.assertEqual(('mpd_version', protocol.VERSION), result[1])
|
||||
@ -163,7 +167,7 @@ class TracksToTagCacheFormatTest(unittest.TestCase):
|
||||
|
||||
def test_tag_cache_has_formated_track(self):
|
||||
track = Track(uri='file:///dir/subdir/song.mp3')
|
||||
formated = translator.track_to_mpd_format(track, key=True, mtime=True)
|
||||
formated = self.translate(track)
|
||||
result = translator.tracks_to_tag_cache_format([track])
|
||||
|
||||
result = self.consume_headers(result)
|
||||
@ -174,7 +178,7 @@ class TracksToTagCacheFormatTest(unittest.TestCase):
|
||||
|
||||
def test_tag_cache_has_formated_track_with_key_and_mtime(self):
|
||||
track = Track(uri='file:///dir/subdir/song.mp3')
|
||||
formated = translator.track_to_mpd_format(track, key=True, mtime=True)
|
||||
formated = self.translate(track)
|
||||
result = translator.tracks_to_tag_cache_format([track])
|
||||
|
||||
result = self.consume_headers(result)
|
||||
@ -185,7 +189,7 @@ class TracksToTagCacheFormatTest(unittest.TestCase):
|
||||
|
||||
def test_tag_cache_suports_directories(self):
|
||||
track = Track(uri='file:///dir/subdir/folder/song.mp3')
|
||||
formated = translator.track_to_mpd_format(track, key=True, mtime=True)
|
||||
formated = self.translate(track)
|
||||
result = translator.tracks_to_tag_cache_format([track])
|
||||
|
||||
result = self.consume_headers(result)
|
||||
@ -200,7 +204,7 @@ class TracksToTagCacheFormatTest(unittest.TestCase):
|
||||
|
||||
def test_tag_cache_diretory_header_is_right(self):
|
||||
track = Track(uri='file:///dir/subdir/folder/sub/song.mp3')
|
||||
formated = translator.track_to_mpd_format(track, key=True, mtime=True)
|
||||
formated = self.translate(track)
|
||||
result = translator.tracks_to_tag_cache_format([track])
|
||||
|
||||
result = self.consume_headers(result)
|
||||
@ -212,7 +216,7 @@ class TracksToTagCacheFormatTest(unittest.TestCase):
|
||||
|
||||
def test_tag_cache_suports_sub_directories(self):
|
||||
track = Track(uri='file:///dir/subdir/folder/sub/song.mp3')
|
||||
formated = translator.track_to_mpd_format(track, key=True, mtime=True)
|
||||
formated = self.translate(track)
|
||||
result = translator.tracks_to_tag_cache_format([track])
|
||||
|
||||
result = self.consume_headers(result)
|
||||
@ -238,8 +242,8 @@ class TracksToTagCacheFormatTest(unittest.TestCase):
|
||||
]
|
||||
|
||||
formated = []
|
||||
formated.extend(translator.track_to_mpd_format(tracks[0], key=True, mtime=True))
|
||||
formated.extend(translator.track_to_mpd_format(tracks[1], key=True, mtime=True))
|
||||
formated.extend(self.translate(tracks[0]))
|
||||
formated.extend(self.translate(tracks[1]))
|
||||
|
||||
result = translator.tracks_to_tag_cache_format(tracks)
|
||||
|
||||
@ -256,8 +260,8 @@ class TracksToTagCacheFormatTest(unittest.TestCase):
|
||||
]
|
||||
|
||||
formated = []
|
||||
formated.append(translator.track_to_mpd_format(tracks[0], key=True, mtime=True))
|
||||
formated.append(translator.track_to_mpd_format(tracks[1], key=True, mtime=True))
|
||||
formated.append(self.translate(tracks[0]))
|
||||
formated.append(self.translate(tracks[1]))
|
||||
|
||||
result = translator.tracks_to_tag_cache_format(tracks)
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user