71 lines
1.7 KiB
Python
71 lines
1.7 KiB
Python
# Copyright 2021 (c) Anna Schumaker.
|
|
from lib import tag
|
|
from lib import tagstore
|
|
|
|
class CollectionTag(tag.Tag):
|
|
def __init__(self):
|
|
tag.Tag.__init__(self, "Collection")
|
|
self.loop = True
|
|
|
|
def can_loop(self): return False
|
|
|
|
|
|
class NewTracksTag(tag.Tag):
|
|
def __init__(self):
|
|
tag.Tag.__init__(self, "New Tracks")
|
|
|
|
def __getstate__(self):
|
|
state = super().__getstate__()
|
|
state["tracks"].clear()
|
|
return state
|
|
|
|
|
|
class PreviousTag(tag.Tag):
|
|
def __init__(self):
|
|
tag.Tag.__init__(self, "Previous")
|
|
|
|
def __getstate__(self):
|
|
state = super().__getstate__()
|
|
state["tracks"].clear()
|
|
return state
|
|
|
|
def can_random(self): return False
|
|
def can_loop(self): return False
|
|
|
|
def add_track(self, track):
|
|
with self.lock:
|
|
self.tracks.insert(0, track)
|
|
self.current = 0
|
|
self.TrackAdded.publish(self, track, 0)
|
|
|
|
|
|
class UpNextTag(tag.Tag):
|
|
def __init__(self):
|
|
tag.Tag.__init__(self, "Up Next")
|
|
|
|
def can_loop(self): return False
|
|
|
|
def next(self):
|
|
track = super().next()
|
|
if track is not None:
|
|
track.remove_from_playlist("Up Next")
|
|
with self.lock:
|
|
self.current -= 1
|
|
if len(self.tracks) == 0:
|
|
self.random = False
|
|
return track
|
|
|
|
|
|
class UserTagStore(tagstore.TagStore):
|
|
def __init__(self):
|
|
tagstore.TagStore.__init__(self)
|
|
self.reset()
|
|
|
|
def reset(self):
|
|
super().reset()
|
|
self.store["Collection"] = CollectionTag()
|
|
self.store["Favorites"] = tag.Tag("Favorites")
|
|
self.store["New Tracks"] = NewTracksTag()
|
|
self.store["Previous"] = PreviousTag()
|
|
self.store["Up Next"] = UpNextTag()
|