Ejemplo n.º 1
0
Archivo: library.py Proyecto: pscn/ads
  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()
Ejemplo n.º 2
0
Archivo: library.py Proyecto: pscn/ads
 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()
Ejemplo n.º 3
0
Archivo: library.py Proyecto: pscn/ads
 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()