From 357591e97e8a4113629e9d070267b79d5cf4130b Mon Sep 17 00:00:00 2001 From: Thomas Adamcik Date: Sat, 30 Oct 2010 21:53:59 +0200 Subject: [PATCH] Introduce concept of mpd ordered track info for simpler diffing of tag caches --- mopidy/frontends/mpd/translator.py | 13 ++++++++++++- tests/frontends/mpd/serializer_test.py | 22 +++++++++++++--------- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/mopidy/frontends/mpd/translator.py b/mopidy/frontends/mpd/translator.py index cf39ec1a..b139967c 100644 --- a/mopidy/frontends/mpd/translator.py +++ b/mopidy/frontends/mpd/translator.py @@ -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): diff --git a/tests/frontends/mpd/serializer_test.py b/tests/frontends/mpd/serializer_test.py index 4123e87f..8e8a5d21 100644 --- a/tests/frontends/mpd/serializer_test.py +++ b/tests/frontends/mpd/serializer_test.py @@ -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)