def track_played(self, track, skipped= False, locked=False): if not locked: self.acquire() if len(self._history) == 0 or self._history[0]['track'] != track: self._logger.error(u"played: no record of starting this track") if not locked: self.release() return if not skipped: self._lastplayed_track = track timestamp= now() self._history[0]['skipped']= skipped if len(self._history) > 1: for i in range(min(self.maxhistory, len(self._history) - 1)): if skipped and self._history[1+i]['skipped']: continue factor= self.__factor_relation(i, self.maxhistory) hist_track= self._history[1+i]['track'] hist_skipped = self._history[1+i]['skipped'] track_relation = TrackRelationFactory.get(track, hist_track) track_relation.update(not hist_skipped, factor) self._logger.info(u"relation updated: %s" % track_relation) self._relation_resetted = False self.update_ranking() if not locked: self.release()
def _similar_tracks(self, artist_nameA, track_titleA, artist_nameB, track_titleB, match, source, locked=False): if not locked: self.acquire() #self._logger.debug(u"%s: [%s-%s]-[%s-%s] %2.2f" % (source, artist_nameA, # track_titleA, artist_nameB, track_titleB, match)) trackA = TrackFactory.by_key(TrackFactory.get_key(artist_nameA, track_titleA)) trackB = TrackFactory.by_key(TrackFactory.get_key(artist_nameB, track_titleB)) #if not trackA: self._logger.debug(u"similar_tracks[%s-%s]: not found" % # (artist_nameA, track_titleA)) #if not trackB: self._logger.debug(u"similar_tracks[%s-%s]: not found" % # (artist_nameB, track_titleB)) if trackA and trackB: relation = TrackRelationFactory.get(trackA, trackB) old_rating = relation.rating relation.rate(0.75 + 0.25 * match) self._logger.debug(u"%s [%s]-[%s] m(%2.2f) r(%2.2f|%2.2f)" % (source, trackA, trackB, match, relation.rating, old_rating)) if self._queue_lookup_results: if self._lastfm: self._lastfm.similar_tracks_low(self.similar_tracks, artist_nameB, track_titleB, self._thres_lastfm_lookup) if self._echonest: self._echonest.similar_tracks_low(self.similar_tracks, artist_nameB, track_titleB, self._thres_lastfm_lookup) if not locked: self.release()
def _track_queue_updated(self, track, skipped, locked=False): if self._playing_track: reference_track = self._playing_track elif self._lastplayed_track: reference_track = self._lastplayed_track else: return if not locked: self.acquire() relation = TrackRelationFactory.get(track, reference_track) relation.update(not skipped, self._queue_update_factor) self._logger.debug(relation) self.update_ranking() if not locked: self.release()