Introduce concept of mpd ordered track info for simpler diffing of tag caches
This commit is contained in:
parent
9309b5bd7d
commit
357591e97e
@ -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))))
|
result.append(('mtime', get_mtime(uri_to_path(track.uri))))
|
||||||
return result
|
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):
|
def artists_to_mpd_format(artists):
|
||||||
"""
|
"""
|
||||||
Format track artists for output to MPD client.
|
Format track artists for output to MPD client.
|
||||||
@ -105,6 +113,7 @@ def tracks_to_tag_cache_format(tracks):
|
|||||||
('fs_charset', protocol.ENCODING),
|
('fs_charset', protocol.ENCODING),
|
||||||
('info_end',)
|
('info_end',)
|
||||||
]
|
]
|
||||||
|
tracks.sort(key=lambda t: t.uri)
|
||||||
_add_to_tag_cache(result, *tracks_to_directory_tree(tracks))
|
_add_to_tag_cache(result, *tracks_to_directory_tree(tracks))
|
||||||
return result
|
return result
|
||||||
|
|
||||||
@ -121,7 +130,9 @@ def _add_to_tag_cache(result, folders, files):
|
|||||||
|
|
||||||
result.append(('songList begin',))
|
result.append(('songList begin',))
|
||||||
for track in files:
|
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',))
|
result.append(('songList end',))
|
||||||
|
|
||||||
def tracks_to_directory_tree(tracks):
|
def tracks_to_directory_tree(tracks):
|
||||||
|
|||||||
@ -111,6 +111,10 @@ class TracksToTagCacheFormatTest(unittest.TestCase):
|
|||||||
settings.runtime.clear()
|
settings.runtime.clear()
|
||||||
mtime.undo_fake()
|
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):
|
def consume_headers(self, result):
|
||||||
self.assertEqual(('info_begin',), result[0])
|
self.assertEqual(('info_begin',), result[0])
|
||||||
self.assertEqual(('mpd_version', protocol.VERSION), result[1])
|
self.assertEqual(('mpd_version', protocol.VERSION), result[1])
|
||||||
@ -163,7 +167,7 @@ class TracksToTagCacheFormatTest(unittest.TestCase):
|
|||||||
|
|
||||||
def test_tag_cache_has_formated_track(self):
|
def test_tag_cache_has_formated_track(self):
|
||||||
track = Track(uri='file:///dir/subdir/song.mp3')
|
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 = translator.tracks_to_tag_cache_format([track])
|
||||||
|
|
||||||
result = self.consume_headers(result)
|
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):
|
def test_tag_cache_has_formated_track_with_key_and_mtime(self):
|
||||||
track = Track(uri='file:///dir/subdir/song.mp3')
|
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 = translator.tracks_to_tag_cache_format([track])
|
||||||
|
|
||||||
result = self.consume_headers(result)
|
result = self.consume_headers(result)
|
||||||
@ -185,7 +189,7 @@ class TracksToTagCacheFormatTest(unittest.TestCase):
|
|||||||
|
|
||||||
def test_tag_cache_suports_directories(self):
|
def test_tag_cache_suports_directories(self):
|
||||||
track = Track(uri='file:///dir/subdir/folder/song.mp3')
|
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 = translator.tracks_to_tag_cache_format([track])
|
||||||
|
|
||||||
result = self.consume_headers(result)
|
result = self.consume_headers(result)
|
||||||
@ -200,7 +204,7 @@ class TracksToTagCacheFormatTest(unittest.TestCase):
|
|||||||
|
|
||||||
def test_tag_cache_diretory_header_is_right(self):
|
def test_tag_cache_diretory_header_is_right(self):
|
||||||
track = Track(uri='file:///dir/subdir/folder/sub/song.mp3')
|
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 = translator.tracks_to_tag_cache_format([track])
|
||||||
|
|
||||||
result = self.consume_headers(result)
|
result = self.consume_headers(result)
|
||||||
@ -212,7 +216,7 @@ class TracksToTagCacheFormatTest(unittest.TestCase):
|
|||||||
|
|
||||||
def test_tag_cache_suports_sub_directories(self):
|
def test_tag_cache_suports_sub_directories(self):
|
||||||
track = Track(uri='file:///dir/subdir/folder/sub/song.mp3')
|
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 = translator.tracks_to_tag_cache_format([track])
|
||||||
|
|
||||||
result = self.consume_headers(result)
|
result = self.consume_headers(result)
|
||||||
@ -238,8 +242,8 @@ class TracksToTagCacheFormatTest(unittest.TestCase):
|
|||||||
]
|
]
|
||||||
|
|
||||||
formated = []
|
formated = []
|
||||||
formated.extend(translator.track_to_mpd_format(tracks[0], key=True, mtime=True))
|
formated.extend(self.translate(tracks[0]))
|
||||||
formated.extend(translator.track_to_mpd_format(tracks[1], key=True, mtime=True))
|
formated.extend(self.translate(tracks[1]))
|
||||||
|
|
||||||
result = translator.tracks_to_tag_cache_format(tracks)
|
result = translator.tracks_to_tag_cache_format(tracks)
|
||||||
|
|
||||||
@ -256,8 +260,8 @@ class TracksToTagCacheFormatTest(unittest.TestCase):
|
|||||||
]
|
]
|
||||||
|
|
||||||
formated = []
|
formated = []
|
||||||
formated.append(translator.track_to_mpd_format(tracks[0], key=True, mtime=True))
|
formated.append(self.translate(tracks[0]))
|
||||||
formated.append(translator.track_to_mpd_format(tracks[1], key=True, mtime=True))
|
formated.append(self.translate(tracks[1]))
|
||||||
|
|
||||||
result = translator.tracks_to_tag_cache_format(tracks)
|
result = translator.tracks_to_tag_cache_format(tracks)
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user