emmental/tagdb/user.py

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()