trackdb: Add user playlist support to Tracks

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2021-07-07 10:39:09 -04:00
parent 0e0ab0c3be
commit 13be9e3ee2
2 changed files with 41 additions and 6 deletions

View File

@ -103,6 +103,18 @@ class TestTrack(unittest.TestCase):
self.assertEqual(trak2.year, tags.Year[trak2.decade, "2019"])
self.assertEqual(trak2["year"], "2019")
def test_track_playlists(self):
trak = track.Track(1, test_tracks / "01 - Test Track.ogg", self.lib)
default = [ tags.User["Collection"], tags.User["New Tracks"] ]
self.assertEqual(trak.playlists, default)
trak.add_to_playlist("Test")
self.assertEqual(trak.playlists, default + [ tags.User["Test"] ])
trak.remove_from_playlist("Test")
self.assertEqual(trak.playlists, default)
self.assertEqual(len(tags.User["Test"]), 0)
def test_track_about_to_remove(self):
trak = track.Track(1, test_tracks / "01 - Test Track.ogg", self.lib)
trak.about_to_remove()
@ -112,28 +124,31 @@ class TestTrack(unittest.TestCase):
self.assertEqual(len(tags.Genre), 0)
self.assertEqual(len(tags.Decade), 0)
self.assertEqual(len(tags.Year), 0)
self.assertEqual(len(tags.User["Collection"]), 0)
self.assertEqual(len(tags.User["New Tracks"]), 0)
def test_track_state(self):
trak = track.Track(1, test_tracks / "01 - Test Track.ogg", self.lib)
trak.add_to_playlist("Starred")
trak.add_to_playlist("Previous")
state = trak.__getstate__()
self.assertEqual(state["artist"], "Test Artist")
self.assertEqual(state["album"], "Test Album")
self.assertEqual(state["genres"], [ "Test" ])
self.assertEqual(state["decade"], "2010s")
self.assertEqual(state["year"], "2019")
self.assertEqual(state["playlists"], [ "Collection", "Starred" ])
tags.Artist["Test Artist"].tracks = [ 1 ]
tags.Album[trak.artist, "Test Album"].tracks = [ 1 ]
tags.Genre["Test"].tracks = [ 1 ]
tags.Decade["2010s"].tracks = [ 1 ]
tags.Year[trak.decade, "2019"].tracks = [ 1 ]
tags.User["Collection"].tracks = [ 1 ]
tags.User["Starred"].tracks = [ 1 ]
trak.artist = None
trak.album = None
trak.genres = None
trak.decade = None
trak.year = None
trak.__dict__.clear()
trak.__setstate__(state)
trak.__set_tags__()
self.assertEqual(trak.artist, tags.Artist["Test Artist"])
@ -141,9 +156,13 @@ class TestTrack(unittest.TestCase):
self.assertEqual(trak.genres, [ tags.Genre["Test"] ])
self.assertEqual(trak.decade, tags.Decade["2010s"])
self.assertEqual(trak.year, tags.Year[trak.decade, "2019"])
self.assertEqual(trak.playlists, [ tags.User["Collection"],
tags.User["Starred"] ])
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 ])
self.assertEqual(tags.Year[trak.decade, "2019"].tracks, [ trak ])
self.assertEqual(tags.User["Collection"].tracks, [ trak ])
self.assertEqual(tags.User["Starred"].tracks, [ trak ])

View File

@ -24,6 +24,9 @@ class Track:
self.decade = tags.Decade.add(f"{meta.decade()}s", self)
self.year = tags.Year.add(self.decade, str(meta.year()), self)
self.playlists = [ tags.User.add("Collection", self),
tags.User.add("New Tracks", self) ]
def __getitem__(self, item):
tag = self.__dict__.get(item, None)
if item == "length":
@ -44,6 +47,8 @@ class Track:
state["genres"] = [ str(g) for g in self.genres ]
state["decade"] = str(self.decade)
state["year"] = str(self.year)
state["playlists" ] = [ str(p) for p in self.playlists \
if str(p) not in ("New Tracks", "Previous") ]
return state
def __setstate__(self, state):
@ -55,6 +60,7 @@ class Track:
self.genres = [ tags.Genre.init_track(g, self) for g in self.genres ]
self.decade = tags.Decade.init_track(self.decade, self)
self.year = tags.Year.init_track(self.decade, self.year, self)
self.playlists = [ tags.User.init_track(p, self) for p in self.playlists ]
def about_to_remove(self):
tags.Artist.remove(self.artist, self)
@ -63,6 +69,11 @@ class Track:
tags.Genre.remove(genre, self)
tags.Decade.remove(self.decade, self)
tags.Year.remove(self.year, self)
for tag in self.playlists:
tag.remove_track(self)
def add_to_playlist(self, name):
self.playlists.append(tags.User.add(name, self))
def filepath(self):
return self.library.name / self.path
@ -70,3 +81,8 @@ class Track:
def played(self):
self.playcount += 1
self.lastplayed = datetime.date.today()
def remove_from_playlist(self, name):
tag = tags.User[name]
tag.remove_track(self)
self.playlists.remove(tag)