Introduce concept of mpd ordered track info for simpler diffing of tag caches

This commit is contained in:
Thomas Adamcik 2010-10-30 21:53:59 +02:00
parent 9309b5bd7d
commit 357591e97e
2 changed files with 25 additions and 10 deletions

View File

@ -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):

View File

@ -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)