ocarina/libsaria/sources/__init__.py

108 lines
2.2 KiB
Python

# Bryan Schumaker (8/8/2010)
import libsaria
from libsaria import callbacks
exists = libsaria.path.exists
expand = libsaria.path.expand
import library
import playlist
import queue
import attrs
attrs.load_dattrs()
cur_id = None
def inc_count():
attrs.inc_count(get_attrs("id")[0])
def find_attrs(file, *attr_list):
if file == None:
return
track = library.track.Track(file)
if track == None:
return
id = library.update.song_id(file)
get = track.__dict__.get
res = []
for attr in attr_list:
if attr == "id":
res.append(id)
elif attr == "like":
res.append(attrs.get_dattr(id, "like"))
elif attr == "count":
res.append(attrs.get_count(id))
else:
res.append(get(attr))
return res
# Function pointer to avoid unnecessary lookups for a common function
get_attrs_id = library.get_attrs
def get_attrs(*attrs):
# I should probably get a lock here...
res = None
if cur_id:
res = get_attrs_id(cur_id, *attrs)
if res == None:
file = libsaria.audio.get_cur_file()
res = find_attrs(file, *attrs)
if res == None:
res = [None] * len(attrs)
return res
def filter(text):
visible = library.filter(text)
playlist.set_visible(visible)
queue.set_visible(visible)
callbacks.refilter()
def is_visible(id):
return library.is_visible(id)
def set_attr(attr, value):
id = get_attrs("id")[0]
if id:
attrs.set_dattr(id, attr, value)
def make_library(path):
path = expand(path)
if not exists(path):
return
library.add_path(path)
library.update_lib()
libsaria.callbacks.library_updated()
def play_id(id):
global cur_id
cur_id = id
file = get_attrs("filepath")[0]
queue.rm_ids([id])
libsaria.controls.load(file)
libsaria.controls.play()
def next():
global cur_id
id = queue.next()
if id == None:
id = playlist.get_next(cur_id)
if id != None:
cur_id = id
return get_attrs("filepath")[0]
def list_source(list_func, *attrs):
ret = []
append = ret.append
for id in list_func():
append(get_attrs_id(id, *attrs))
return ret
def list_library(*attrs):
return list_source(library.list_ids, *attrs)
def list_playlist(*attrs):
return list_source(playlist.list_ids, *attrs)
def list_queue(*attrs):
return list_source(queue.list_ids, *attrs)