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:
Anna Schumaker 2021-06-29 13:53:37 -04:00
parent ba64910ef9
commit d1456b14bd
5 changed files with 21 additions and 1 deletions

View File

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

View File

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

View File

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

View File

@ -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"] ])

View File

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