diff --git a/libsaria/collection/__init__.py b/libsaria/collection/__init__.py index 29a3d9c8..011dea5b 100644 --- a/libsaria/collection/__init__.py +++ b/libsaria/collection/__init__.py @@ -48,6 +48,13 @@ def lib_inc_count(id): global library if id >= 0: library.inc_count(id) + library.save() + +def lib_inc_score(id, amount=1): + global library + if id >= 0: + library.inc_score(id, amount) + library.save() def lib_play_id(id): global cur_lib_id @@ -116,13 +123,21 @@ def choose_next(): if next != None: return call("NEXT", lib_play_id, next) -def plist_next(): +def change_score(): prcnt = libsaria.music.get_progress() - if prcnt > 75: + if prcnt > 0.75: lib_inc_count(cur_lib_id) + lib_inc_score(cur_lib_id) + if prcnt < 0.33: + lib_inc_score(cur_lib_id, -1) + +def plist_next(): + change_score() + choose_next() def catch_eos(arg=None): lib_inc_count(cur_lib_id) + lib_inc_score(cur_lib_id) choose_next() libsaria.event.invite("POSTEOS", catch_eos) diff --git a/libsaria/collection/collection.py b/libsaria/collection/collection.py index de1e1970..34bf4ae7 100644 --- a/libsaria/collection/collection.py +++ b/libsaria/collection/collection.py @@ -20,7 +20,7 @@ class TrackRecord: self.lenstr = lenstr self.count = 0 self.year = year - #self.like = None + self.score = 0 self.fs = None self.tags = None @@ -112,6 +112,8 @@ class Collection: return rec.year if attr == "lenstr": return rec.lenstr + if attr == "score": + return rec.score tags = rec.tags.walk_backwards() if attr == "artist": diff --git a/libsaria/collection/lens.py b/libsaria/collection/lens.py index 2cf7dec1..03d5fe7e 100644 --- a/libsaria/collection/lens.py +++ b/libsaria/collection/lens.py @@ -42,6 +42,11 @@ class Library(collection.Collection): if rec: rec.count += 1 + def inc_score(self, id, amount): + rec = self.records.get(id, None) + if rec: + rec.score += amount + def update(self, path): global badfiles FileRef = libsaria.collection.FileRef @@ -86,6 +91,19 @@ class Playlist(collection.Collection): return None def random(self): + if self.size == 0: + return + getattr = libsaria.collection.lib_get_attr + for i in xrange(5): + id = self.get_rand_candidate() + if getattr(id, "score") >= 0: + return id + play_anyway = rand.randint(0, 1) + if play_anyway == 1: + return id + return id + + def get_rand_candidate(self): num = self.num_visible() next_idx = rand.randint(0, num-1) func = self.visible diff --git a/ocarina/collection.py b/ocarina/collection.py index d9850ece..bd792096 100644 --- a/ocarina/collection.py +++ b/ocarina/collection.py @@ -54,15 +54,14 @@ class Collection(gtk.ScrolledWindow): row = row[0] list_iter = list.get_iter(row) list_row = list[list_iter] - string = self.mouse_motion(list_row) - list.set_value(list_iter, len(list_row)-1, "Played: %s"%string) + items = self.mouse_motion(list_row) + list.set_value(list_iter, len(list_row)-1, + "Played: %s Score: %s" % items) def add_selected_to_playlist(self): - print "adding selected to playlist" self.list.for_each_selected(collection.plist_add_libid) collection.plist_save() collection.plist_refresh() - print "done!" class Library(Collection): @@ -91,10 +90,13 @@ class Library(Collection): self.populate() def mouse_motion(self, row): - return collection.lib_get_attr(row[0], "playcount") + return (collection.lib_get_attr(row[0], "playcount"), + collection.lib_get_attr(row[0], "score")) def select_row(self, row): + collection.change_score() collection.lib_play_id(row[0]) + collection.lib_inc_score(row[0], 1) def filter(self, text): collection.lib_filter(text) @@ -128,10 +130,13 @@ class Playlist(Collection): #print "Populating took: %s" % (after - before) def mouse_motion(self, row): - return collection.lib_get_attr(row[0], "playcount") + return (collection.lib_get_attr(row[0], "playcount"), + collection.lib_get_attr(row[0], "score")) def select_row(self, row): + collection.change_score() collection.lib_play_id(row[0]) + collection.lib_inc_score(row[0], 1) def filter(self, text): collection.plist_filter(text)