ocarina/libsaria/sources/queue.py
Bryan Schumaker a8421b8226 libsaria: Fix removing songs from queue
If I'm going to attempt to remove the song id from the queue whenever a
song song is loaded, I need to check if the song is in the queue before
trying to remove it.
2011-05-01 12:11:24 -04:00

109 lines
1.7 KiB
Python

# Bryan Schumaker (12/12/2010)
import libsaria
library = None
source = None
queue = []
song_set = set()
filtered = False
visible = None
def add_id(id):
if id not in song_set:
queue.append(id)
song_set.add(id)
def add_ids(ids):
for id in ids:
add_id(id)
def rm_id(id):
if id in queue:
queue.remove(id)
song_set.remove(id)
def rm_ids(ids):
for id in ids:
rm_id(id)
def reset():
global queue
global song_set
queue = []
song_set = set()
def init():
global library
global source
import library
source = libsaria.sources.Source()
source.get_attrs = library.get_attrs
source.set_attr = library.set_attr
source.get_cur_id = get_cur_id
source.save = save
def save():
pass
def init_bg():
init()
def walk():
for id in queue:
yield id
def walk_queue(*attrs):
res = []
for id in walk():
res.append(library.get_attrs(id, *attrs))
return res
def filter(text):
global visible, filtered
if len(text) > 0:
visible = song_set.intersection(library.test_filter(text))
filtered = True
else:
visible = song_set
filtered = False
def get_cur_id():
return cur_id
def is_visible(id):
if filtered == True:
return id in visible
return True
def num_visible():
if filtered == True:
return len(visible)
return len(queue)
def load_id(id):
global cur_id
cur_id = id
path = library.get_attrs(id, "filepath")
rm_id(id)
return source.load_file(path)
def play_id(id):
if load_id(id) == True:
libsaria.controls.play()
return True
return False
def next():
global cur_id
if len(queue) == 0:
return None
cur_id = queue.pop(0)
song_set.remove(cur_id)
source.set_current()
return library.get_attrs(cur_id, "filepath")