trackdb: Use a TagStore for Decades

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2021-06-24 10:35:04 -04:00
parent 0e23e25edf
commit d2a5d940bf
6 changed files with 18 additions and 8 deletions

View File

@ -92,6 +92,7 @@ class TestTrackDB(unittest.TestCase):
self.assertEqual(len(trackdb.tags.Artist), 3)
self.assertEqual(len(trackdb.tags.Album), 12)
self.assertEqual(len(trackdb.tags.Genre), 4)
self.assertEqual(len(trackdb.tags.Decade), 2)
def test_trackdb_stress(self):
lib = trackdb.add_path("./trier/Test Library/")

View File

@ -40,7 +40,7 @@ def remove_path(path):
def _do_save():
with data.DataFile(db_file, data.WRITE) as f:
f.pickle([ tags.Artist, tags.Album, tags.Genre, library.Tracks, library_paths ])
f.pickle([ tags.Artist, tags.Album, tags.Genre, tags.Decade, library.Tracks, library_paths ])
def save(*args):
save_bus.board(_do_save)
@ -49,7 +49,7 @@ def load():
global library_paths
with data.DataFile(db_file, data.READ) as f:
if f.exists():
(tags.Artist, tags.Album, tags.Genre, library.Tracks, library_paths) = f.unpickle()
(tags.Artist, tags.Album, tags.Genre, tags.Decade, library.Tracks, library_paths) = f.unpickle()
def __register_callbacks():
LibraryAdded.register(save)

View File

@ -4,8 +4,10 @@ from lib import tagstore
Artist = tagstore.TagStore()
Album = tagstore.TagSuperStore()
Genre = tagstore.TagStore()
Decade = tagstore.TagStore()
def reset():
Artist.reset()
Album.reset()
Genre.reset()
Decade.reset()

View File

@ -8,13 +8,16 @@ class TestTags(unittest.TestCase):
self.assertIsInstance(tags.Artist, tagstore.TagStore)
self.assertIsInstance(tags.Album, tagstore.TagSuperStore)
self.assertIsInstance(tags.Genre, tagstore.TagStore)
self.assertIsInstance(tags.Decade, tagstore.TagStore)
def test_tags_reset(self):
tags.Artist.store = {"a" : 1 }
tags.Album.store = {("a", "b") : 2 }
tags.Genre.store = {"c" : 3 }
tags.Decade.store = {"d" : 4 }
tags.reset()
self.assertEqual(tags.Artist.store, { })
self.assertEqual(tags.Album.store, { })
self.assertEqual(tags.Genre.store, { })
self.assertEqual(tags.Decade.store, { })

View File

@ -42,9 +42,8 @@ class TestTrack(unittest.TestCase):
def test_track_decade(self):
trak = track.Track(1, test_tracks / "01 - Test Track.ogg", self.lib)
self.assertEqual(trak.decade(), 2010)
trak.year = 1974
self.assertEqual(trak.decade(), 1970)
self.assertEqual(trak.decade, tags.Decade["2010s"])
self.assertEqual(trak["decade"], "2010s")
def test_track_discnumber(self):
trak = track.Track(1, test_tracks / "01 - Test Track.ogg", self.lib)
@ -114,23 +113,28 @@ class TestTrack(unittest.TestCase):
self.assertEqual(state["artist"], "Test Artist")
self.assertEqual(state["album"], "Test Album")
self.assertEqual(state["genres"], [ "Test" ])
self.assertEqual(state["decade"], "2010s")
tags.Artist["Test Artist"].tracks = [ 1 ]
tags.Album[trak.artist, "Test Album"].tracks = [ 1 ]
tags.Genre["Test"].tracks = [ 1 ]
tags.Decade["2010s"].tracks = [ 1 ]
trak.artist = None
trak.album = None
trak.genres = None
trak.decade = None
trak.__setstate__(state)
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"] ])
self.assertEqual(trak.decade, tags.Decade["2010s"])
self.assertEqual(tags.Artist["Test Artist"].tracks, [ trak ])
self.assertEqual(tags.Album[trak.artist, "Test Album"].tracks, [ trak ])
self.assertEqual(tags.Genre["Test"].tracks, [ trak ])
self.assertEqual(tags.Decade["2010s"].tracks, [ trak ])
def test_track_reset(self):
track.TrackUpdated.register(1)

View File

@ -24,6 +24,7 @@ class Track:
self.album = tags.Album.add(self.artist, meta.album(), self)
self.genres = [ tags.Genre.add(g, self) for g in meta.genres() ]
self.year = meta.year()
self.decade = tags.Decade.add(f"{meta.decade()}s", self)
def __getitem__(self, item):
tag = self.__dict__.get(item, None)
@ -43,6 +44,7 @@ class Track:
state["artist"] = str(self.artist)
state["album"] = str(self.album)
state["genres"] = [ str(g) for g in self.genres ]
state["decade"] = str(self.decade)
return state
def __setstate__(self, state):
@ -50,9 +52,7 @@ class Track:
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 ]
def decade(self):
return (self.year // 10) * 10
self.decade = tags.Decade.init_track(self.decade, self)
def filepath(self):
return self.library.path / self.path