Tag cache seems to support directories now

This commit is contained in:
Thomas Adamcik 2010-10-29 23:26:05 +02:00
parent 1a6831ab68
commit 94db967672
2 changed files with 29 additions and 4 deletions

View File

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

View File

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