trackdb: Fix setting tags when loading tracks
We have to do this as a separate step once the tagstores have been set in tagdb/tags.py Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
ba64910ef9
commit
d1456b14bd
|
@ -28,6 +28,7 @@ class TestLibraryTag(unittest.TestCase):
|
|||
|
||||
lib.__dict__.clear()
|
||||
lib.__setstate__(state)
|
||||
lib.fix_tracks()
|
||||
self.assertEqual(lib.name, test_tracks)
|
||||
self.assertEqual(lib.tracks, [ trackdb.Tracks[i] for i in range(12) ])
|
||||
self.assertEqual(lib.clear.func, lib.__do_clear__)
|
||||
|
|
|
@ -18,7 +18,6 @@ class LibraryTag(lib.tag.Tag):
|
|||
|
||||
def __setstate__(self, state):
|
||||
super().__setstate__(state)
|
||||
self.tracks = [ Tracks[i] for i in state["tracks"] ]
|
||||
self.clear = lib.thread.Thread(self.__do_clear__)
|
||||
self.scan = lib.thread.Thread(self.__do_scan__)
|
||||
|
||||
|
@ -37,6 +36,13 @@ class LibraryTag(lib.tag.Tag):
|
|||
Tracks.remove(trak)
|
||||
self.tracks.clear()
|
||||
|
||||
def fix_tracks(self):
|
||||
for (index, trak) in enumerate(self.tracks):
|
||||
t = Tracks[trak]
|
||||
if t is not None:
|
||||
self.tracks[index] = t
|
||||
|
||||
|
||||
|
||||
class LibraryStore(lib.tagstore.TagStore):
|
||||
def __alloc_tag__(self, name, sort):
|
||||
|
@ -49,6 +55,10 @@ class LibraryStore(lib.tagstore.TagStore):
|
|||
lib.clear()
|
||||
super().remove(lib)
|
||||
|
||||
def fix_tracks(self):
|
||||
for (id, tag) in self.store.items():
|
||||
tag.fix_tracks()
|
||||
|
||||
Library = LibraryStore()
|
||||
|
||||
|
||||
|
@ -66,6 +76,8 @@ def load():
|
|||
if f.exists():
|
||||
(tagstate, Tracks, Library) = f.unpickle()
|
||||
tags.set_state(*tagstate)
|
||||
Tracks.load_tags()
|
||||
Library.fix_tracks()
|
||||
|
||||
def __register_callbacks():
|
||||
Library.Added.register(save)
|
||||
|
|
|
@ -62,6 +62,10 @@ class TrackAllocator:
|
|||
if track.library ==lib:
|
||||
yield track
|
||||
|
||||
def load_tags(self):
|
||||
for (id, track) in self.tracks.items():
|
||||
track.__set_tags__()
|
||||
|
||||
def played(self, track):
|
||||
with self.lock:
|
||||
track.played()
|
||||
|
|
|
@ -135,6 +135,7 @@ class TestTrack(unittest.TestCase):
|
|||
trak.year = None
|
||||
|
||||
trak.__setstate__(state)
|
||||
trak.__set_tags__()
|
||||
self.assertEqual(trak.artist, tags.Artist["Test Artist"])
|
||||
self.assertEqual(trak.album, tags.Album[trak.artist, "Test Album"])
|
||||
self.assertEqual(trak.genres, [ tags.Genre["Test"] ])
|
||||
|
|
|
@ -48,6 +48,8 @@ class Track:
|
|||
|
||||
def __setstate__(self, state):
|
||||
self.__dict__.update(state)
|
||||
|
||||
def __set_tags__(self):
|
||||
self.artist = tags.Artist.init_track(self.artist, self)
|
||||
self.album = tags.Album.init_track(self.artist, self.album, self)
|
||||
self.genres = [ tags.Genre.init_track(g, self) for g in self.genres ]
|
||||
|
|
Loading…
Reference in New Issue