Add tracks_to_directory_tree helper

This commit is contained in:
Thomas Adamcik 2010-10-29 23:06:58 +02:00
parent a48e881040
commit 1a6831ab68
2 changed files with 69 additions and 1 deletions

View File

@ -3,7 +3,7 @@ import re
from mopidy import settings
from mopidy.frontends.mpd import protocol
from mopidy.utils.path import path_to_uri, uri_to_path
from mopidy.utils.path import path_to_uri, uri_to_path, split_path
def track_to_mpd_format(track, position=None, cpid=None, key=False, mtime=False):
"""
@ -123,3 +123,15 @@ def tracks_to_tag_cache_format(tracks):
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))
current = directories
for part in split_path(folder):
if part not in current[0]:
current[0][part] = ({}, [])
current = current[0][part]
current[1].append(track)
return directories

View File

@ -173,3 +173,59 @@ class TracksToTagCacheFormatTest(unittest.TestCase):
self.assertEqual(song_list, formated)
self.assertEqual(len(result), 0)
class TracksToDirectoryTreeTest(unittest.TestCase):
def setUp(self):
settings.LOCAL_MUSIC_FOLDER = '/'
def tearDown(self):
settings.runtime.clear()
def test_no_tracks_gives_emtpy_tree(self):
tree = translator.tracks_to_directory_tree([])
self.assertEqual(tree, ({}, []))
def test_top_level_files(self):
tracks = [
Track(uri='file:///file1.mp3'),
Track(uri='file:///file2.mp3'),
Track(uri='file:///file3.mp3'),
]
tree = translator.tracks_to_directory_tree(tracks)
self.assertEqual(tree, ({}, tracks))
def test_single_file_in_subdir(self):
tracks = [Track(uri='file:///dir/file1.mp3')]
tree = translator.tracks_to_directory_tree(tracks)
expected = ({'dir': ({}, tracks)}, [])
self.assertEqual(tree, expected)
def test_single_file_in_sub_subdir(self):
tracks = [Track(uri='file:///dir1/dir2/file1.mp3')]
tree = translator.tracks_to_directory_tree(tracks)
expected = ({'dir1': ({'dir2': ({}, tracks)}, [])}, [])
self.assertEqual(tree, expected)
def test_complex_file_structure(self):
tracks = [
Track(uri='file:///file1.mp3'),
Track(uri='file:///dir1/file2.mp3'),
Track(uri='file:///dir1/file3.mp3'),
Track(uri='file:///dir2/file4.mp3'),
Track(uri='file:///dir2/sub/file5.mp3'),
]
tree = translator.tracks_to_directory_tree(tracks)
expected = (
{
'dir1': ({}, [tracks[1], tracks[2]]),
'dir2': (
{
'sub': ({}, [tracks[4]])
},
[tracks[3]]
),
},
[tracks[0]]
)
self.assertEqual(tree, expected)