trackdb: Add user playlist support to Tracks
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
0e0ab0c3be
commit
13be9e3ee2
|
@ -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 ])
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue