emmental/trackdb/stack.py

41 lines
1010 B
Python
Raw Normal View History

# Copyright 2021 (c) Anna Schumaker.
from . import tags
class TagStack:
def __init__(self):
self.tags = [ ]
def __do_next__(self, tag):
if track := tag.next():
track.add_to_playlist("Previous")
return track
def next(self):
if len(self.tags) == 0:
return self.__do_next__(tags.User["Collection"])
if track := self.__do_next__(self.tags[0]):
return track
self.pop()
return self.next()
def pop(self):
self.tags.pop(0)
def previous(self):
return tags.User["Previous"].next()
def push(self, tag):
if tag == tags.User["Previous"]:
return
if tag == tags.User["Collection"]:
self.tags.clear()
return
if tag in self.tags:
self.tags.remove(tag)
self.tags.insert(0, tag)
tag.stacked()
def queue(self, track):
track.add_to_playlist("Up Next")
self.push(tags.User["Up Next"])