51 lines
1.0 KiB
Python
51 lines
1.0 KiB
Python
# Bryan Schumaker (5 / 14 / 2011)
|
|
|
|
import random
|
|
import playlist
|
|
import libsaria
|
|
|
|
recent = []
|
|
|
|
def track_recent(artist, title):
|
|
recent.append((artist, title))
|
|
if len(recent) > 50:
|
|
recent.pop(0)
|
|
|
|
def incr_index(cur_index, max_index):
|
|
cur_index += 1
|
|
if cur_index == max_index:
|
|
cur_index = 0
|
|
return cur_index
|
|
|
|
def seq_next(cur_id):
|
|
is_visible = libsaria.sources.is_visible
|
|
|
|
max = playlist.size()
|
|
if max == 0: # List is empty
|
|
return
|
|
|
|
index = playlist.index(cur_id)
|
|
index = incr_index(index, max)
|
|
while not is_visible(playlist.get(index)):
|
|
index = incr_index(index, max)
|
|
return index
|
|
|
|
def check_candidate(id):
|
|
(artist, title, like) = libsaria.sources.get_attrs_id(id, "artist", "title", "like")
|
|
if (artist, title) in recent:
|
|
return False
|
|
if like == False:
|
|
return False
|
|
return True
|
|
|
|
def rand_next(list):
|
|
max = len(list) - 1
|
|
if max == -1: # List is empty
|
|
return
|
|
for i in xrange(15):
|
|
index = random.randint(0, max)
|
|
id = list[index]
|
|
if check_candidate(id) == True:
|
|
break
|
|
return playlist.index(id)
|