trackdb: Use TagStore for Artists

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2021-06-23 16:48:10 -04:00
parent 71ae845a99
commit d342cb398a
6 changed files with 55 additions and 5 deletions

View File

@ -82,12 +82,14 @@ class TestTrackDB(unittest.TestCase):
self.assertEqual(trackdb.save_bus.passengers, [ ])
self.assertTrue(db_file.exists())
trackdb.tags.reset()
trackdb.library_paths.clear()
trackdb.library.NextID = 0
trackdb.load()
self.assertEqual(len(trackdb.library.Tracks), 12)
self.assertEqual(len(trackdb.library_paths), 1)
self.assertEqual(len(trackdb.library_paths[0].tracks), 12)
self.assertEqual(len(trackdb.tags.Artist), 3)
def test_trackdb_stress(self):
lib = trackdb.add_path("./trier/Test Library/")

View File

@ -3,6 +3,7 @@ from lib import bus
from lib import data
from lib import publisher
from . import library
from . import tags
from . import track
import pathlib
import threading
@ -39,7 +40,7 @@ def remove_path(path):
def _do_save():
with data.DataFile(db_file, data.WRITE) as f:
f.pickle([ library.Tracks, library_paths ])
f.pickle([ tags.Artist, library.Tracks, library_paths ])
def save(*args):
save_bus.board(_do_save)
@ -48,7 +49,7 @@ def load():
global library_paths
with data.DataFile(db_file, data.READ) as f:
if f.exists():
(library.Tracks, library_paths) = f.unpickle()
(tags.Artist, library.Tracks, library_paths) = f.unpickle()
def __register_callbacks():
LibraryAdded.register(save)
@ -62,6 +63,7 @@ def reset():
library_paths.clear()
LibraryAdded.reset()
LibraryRemoved.reset()
tags.reset()
library.reset()
track.reset()
save_bus.clear()

7
trackdb/tags.py Normal file
View File

@ -0,0 +1,7 @@
# Copyright 2021 (c) Anna Schumaker.
from lib import tagstore
Artist = tagstore.TagStore()
def reset():
Artist.reset()

14
trackdb/test_tags.py Normal file
View File

@ -0,0 +1,14 @@
# Copyright 2021 (c) Anna Schumaker.
from lib import tagstore
from . import tags
import unittest
class TestTags(unittest.TestCase):
def test_tags_init(self):
self.assertIsInstance(tags.Artist, tagstore.TagStore)
def test_tags_reset(self):
tags.Artist.store = {"a" : 1 }
tags.reset()
self.assertEqual(tags.Artist.store, { })

View File

@ -1,6 +1,7 @@
# Copyright 2020 (c) Anna Schumaker.
from lib import publisher
from . import library
from . import tags
from . import track
import datetime
import pathlib
@ -33,10 +34,10 @@ class TestTrack(unittest.TestCase):
def test_track_artist(self):
trak = track.Track(1, test_tracks / "01 - Test Track.ogg", self.lib)
self.assertEqual(trak.artist, "Test Artist")
self.assertEqual(trak.artist, tags.Artist["Test Artist"])
self.assertEqual(trak["artist"], "Test Artist")
trak2 = track.Track(2, test_tracks / "02 - Test {Disc 2}.ogg", self.lib)
self.assertEqual(trak2.artist, "Test Album Artist")
self.assertEqual(trak2.artist, tags.Artist["Test Album Artist"])
def test_track_decade(self):
trak = track.Track(1, test_tracks / "01 - Test Track.ogg", self.lib)
@ -105,6 +106,20 @@ class TestTrack(unittest.TestCase):
self.assertEqual(trak2.year, 2019)
self.assertEqual(trak2["year"], "2019")
def test_track_state(self):
trak = track.Track(1, test_tracks / "01 - Test Track.ogg", self.lib)
state = trak.__getstate__()
self.assertEqual(state["artist"], "Test Artist")
tags.Artist["Test Artist"].tracks = [ 1 ]
trak.artist = None
trak.__setstate__(state)
self.assertEqual(trak.artist, tags.Artist["Test Artist"])
self.assertEqual(tags.Artist["Test Artist"].tracks, [ trak ])
def test_track_reset(self):
track.TrackUpdated.register(1)
track.reset()

View File

@ -1,6 +1,7 @@
# Copyright 2020 (c) Anna Schumaker.
from lib import metadata
from lib import publisher
from . import tags
import datetime
TrackUpdated = publisher.Publisher()
@ -20,7 +21,7 @@ class Track:
self.tracknumber = meta.tracknumber()
self.album = meta.album()
self.artist = meta.artist()
self.artist = tags.Artist.add(meta.artist(), self)
self.genre = meta.genres()
self.year = meta.year()
@ -37,6 +38,15 @@ class Track:
return ", ".join(self.genre)
return None if tag == None else str(tag)
def __getstate__(self):
state = self.__dict__.copy()
state["artist"] = str(self.artist)
return state
def __setstate__(self, state):
self.__dict__.update(state)
self.artist = tags.Artist.init_track(self.artist, self)
def decade(self):
return (self.year // 10) * 10