Exemple #1
0
    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
Exemple #2
0
    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