ocarina/libsaria/collection/__init__.py

123 lines
2.5 KiB
Python

# Bryan Schumaker (8/8/2010)
__all__ = ["collection"]
import libsaria
import tagpy
call = libsaria.event.call
exists = libsaria.path.exists
expand = libsaria.path.expand
FileRef = tagpy.FileRef
LIBRARY = 0
PLAYLIST = 1
QUEUE = 2
import lens
import library
playlist = lens.Playlist()
file_to_id = library.file_to_id
play_id = library.play_id
get_attr = library.get_attr
reset = library.reset
inc_score = library.inc_score
inc_count = library.inc_count
def init():
libsaria.init_pref("random", False)
libsaria.event.invite("POSTINIT", init)
def toggle_rand():
libsaria.prefs["random"] = not libsaria.prefs["random"]
cur_lib_id = -1
def new_source(path, bg=True):
global library
path = expand(path)
if not exists(path):
return 0
return call("NEWSOURCE", library.scan, path)
def lib_get_cur_id():
global cur_lib_id
return cur_lib_id
#def lib_filter(text):
# global library
# library.filter(text)
def lib_is_visible(text):
global library
return library.is_visible(text)
def walk_plist():
global playlist
global library
get_attr = library.get_attr
for id in playlist.walk_ids():
yield [get_attr(id, "artist"), get_attr(id, "album"),
get_attr(id, "title"), id, get_attr(id, "year"),
get_attr(id, "lenstr")]
def plist_save():
global playlist
playlist.save()
def plist_add_libid(lib_id):
global playlist
# Hey, Future Bryan. I really want to use a lib_get_attrs() function
# to return a list of attributes. Can you do that for me, please?
# Thank you, Past Bryan
artist = library.get_attr(lib_id, "artist")
album = library.get_attr(lib_id, "album")
title = library.get_attr(lib_id, "title")
playlist.insert_tags(artist, album, title, lib_id)
def plist_is_visible(id):
global playlist
return playlist.is_visible(id)
def plist_filter(text):
global playlist
return playlist.filter(text)
def plist_reset():
global playlist
playlist.reset()
playlist.save()
def plist_refresh():
return call("PLISTREFRESH")
def choose_next():
global playlist
global cur_lib_id
if libsaria.prefs["random"] == True:
next = playlist.random()
else:
next = playlist.next_id(cur_lib_id)
if next != None:
return call("NEXT", play_id, next)
def change_score():
prcnt = libsaria.music.get_progress()
if prcnt > 0.75:
inc_count(cur_lib_id)
inc_score(cur_lib_id)
if prcnt < 0.33:
inc_score(cur_lib_id, -1)
def plist_next():
change_score()
choose_next()
def catch_eos(*args):
inc_count(cur_lib_id)
inc_score(cur_lib_id)
choose_next()
libsaria.event.invite("POSTEOS", catch_eos)