def on_playlist_changed(self, changed_val): changed_dict = changed_val.get_dict() type = changed_dict["type"] if type not in (xmmsclient.PLAYLIST_CHANGED_INSERT, xmmsclient.PLAYLIST_CHANGED_MOVE, xmmsclient.PLAYLIST_CHANGED_REMOVE, xmmsclient.PLAYLIST_CHANGED_REPLACE): return True if type == xmmsclient.PLAYLIST_CHANGED_REPLACE: logging.debug("playlist replaced, resetting") self.reset_playlist_cache() return True pos = changed_dict["position"] if type == xmmsclient.PLAYLIST_CHANGED_REMOVE: logging.debug("removal dict: %s", changed_dict) if pos > 0: recommend.negative(self.playlist_entries_cache[pos-1], self.playlist_entries_cache[pos], recommend.FEEDBACK_WEIGHT_HIGH) del self.playlist_entries_cache[pos] elif type == xmmsclient.PLAYLIST_CHANGED_INSERT: logging.debug("insert dict: %s", changed_dict) mid = changed_dict["id"] if self.check_own_insertion(pos, mid): weight = recommend.FEEDBACK_WEIGHT_LOW else: weight = recommend.FEEDBACK_WEIGHT_HIGH if pos > 0: recommend.positive(self.playlist_entries_cache[pos-1], mid, weight) self.playlist_entries_cache.insert(pos, mid) elif type == xmmsclient.PLAYLIST_CHANGED_MOVE: logging.debug("move dict: %s", changed_dict) mid = changed_dict["id"] newpos = changed_dict["newposition"] del self.playlist_entries_cache[pos] self.playlist_entries_cache.insert(newpos, mid) if newpos > 0: recommend.positive(self.playlist_entries_cache[newpos-1], self.playlist_entries_cache[newpos], recommend.FEEDBACK_WEIGHT_HIGH) self.fill_playlist() return True
def on_current_id(self, id_val): if len(self.last_mids) == 2: previous, skipped = self.last_mids infos = self.query_infos_for_mid(skipped, ("duration", "laststarted")) playtime = time.time() - infos["laststarted"] duration = infos["duration"] / 1000.0 # ms -> s if playtime < duration*self.FAST_SONG_CHANGE_FACTOR: logging.debug("fast song change, giving negative feedback") recommend.negative(previous, skipped, recommend.FEEDBACK_WEIGHT_LOW) self.last_mids.append(id_val.get_int()) self.fill_playlist(id_val.get_int()) return True