diff --git a/libsaria/collection/lens.py b/libsaria/collection/lens.py index 03d5fe7e..27a89c40 100644 --- a/libsaria/collection/lens.py +++ b/libsaria/collection/lens.py @@ -73,6 +73,7 @@ class Library(collection.Collection): class Playlist(collection.Collection): def __init__(self): collection.Collection.__init__(self, "playlist.dl_tree") + self.last_tracks = [] def next_id(self, last_id): return_next = False @@ -94,13 +95,26 @@ class Playlist(collection.Collection): if self.size == 0: return getattr = libsaria.collection.lib_get_attr - for i in xrange(5): + last = self.last_tracks + for i in xrange(15): id = self.get_rand_candidate() - if getattr(id, "score") >= 0: - return id - play_anyway = rand.randint(0, 1) - if play_anyway == 1: - return id + artist = getattr(id, "artist") + album = getattr(id, "album") + title = getattr(id, "title") + if (artist, title) in last: + print "Skipping %s by %s because it has played recently." % (title, artist) + continue + score = getattr(id, "score") + if score < 0: + play_anyway = rand.randint(0, 100) + if play_anyway < ((20 * score) + 100): + print "Skipping %s by %s because I don't think you want to hear it." % (title, artist) + continue + last.append((artist, title)) + if len(last) > 15: + last.pop(0) + print "Picking a song took %s iterations" % i + return id return id def get_rand_candidate(self):