From 94db967672f2aa22aa7557e609e7ccdcd4990897 Mon Sep 17 00:00:00 2001 From: Thomas Adamcik Date: Fri, 29 Oct 2010 23:26:05 +0200 Subject: [PATCH] Tag cache seems to support directories now --- mopidy/frontends/mpd/translator.py | 15 +++++++++++---- tests/frontends/mpd/serializer_test.py | 18 ++++++++++++++++++ 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/mopidy/frontends/mpd/translator.py b/mopidy/frontends/mpd/translator.py index 36a6e7ea..6c93e04e 100644 --- a/mopidy/frontends/mpd/translator.py +++ b/mopidy/frontends/mpd/translator.py @@ -116,18 +116,25 @@ def tracks_to_tag_cache_format(tracks): ('fs_charset', protocol.ENCODING), ('info_end',) ] + _add_to_tag_cache(result, *tracks_to_directory_tree(tracks)) + return result + +def _add_to_tag_cache(result, folders, files): + for name, entry in folders.items(): + result.append(('begin', name)) + _add_to_tag_cache(result, *entry) + result.append(('end', name)) result.append(('songList begin',)) - for track in tracks: + for track in files: result.extend(track_to_mpd_format(track, key=True)) result.append(('songList end',)) - return result - def tracks_to_directory_tree(tracks): directories = ({}, []) for track in tracks: - folder = os.path.dirname(uri_to_path(track.uri)) + uri = uri_to_mpd_relative_path(track.uri) + folder = os.path.dirname(uri_to_path(uri)) current = directories for part in split_path(folder): if part not in current[0]: diff --git a/tests/frontends/mpd/serializer_test.py b/tests/frontends/mpd/serializer_test.py index 5fc610b0..a4abc5a9 100644 --- a/tests/frontends/mpd/serializer_test.py +++ b/tests/frontends/mpd/serializer_test.py @@ -137,6 +137,14 @@ class TracksToTagCacheFormatTest(unittest.TestCase): return result[1:i], result[i+1:] self.fail("Couldn't find songList end in result") + def consume_directory(self, result): + self.assertEqual('begin', result[0][0]) + directory = result[0][1] + for i, row in enumerate(result): + if row == ('end', directory): + return result[1:i], result[i+1:] + self.fail("Couldn't find end %s in result" % directory) + def test_empty_tag_cache_has_header(self): result = translator.tracks_to_tag_cache_format([]) result = self.consume_headers(result) @@ -174,6 +182,16 @@ class TracksToTagCacheFormatTest(unittest.TestCase): self.assertEqual(song_list, formated) self.assertEqual(len(result), 0) + 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) + result = translator.tracks_to_tag_cache_format([track]) + + result = self.consume_headers(result) + directory, result = self.consume_directory(result) + song_list, result = self.consume_song_list(directory) + + self.assertEqual(song_list, formated) class TracksToDirectoryTreeTest(unittest.TestCase): def setUp(self):