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