]> kaliko git repositories - mpd-sima.git/blobdiff - sima/plugins/internal/lastfm.py
Fixed a minor cache issue
[mpd-sima.git] / sima / plugins / internal / lastfm.py
index b28d34e679482da4e2bccd37cd688b61310fdbba..3c576a60320d8de0e00e943fb41974737d5cdce2 100644 (file)
@@ -30,6 +30,7 @@ def cache(func):
             results = cls._cache.get('asearch').get(hashedlst)
         else:
             results = func(*args, **kwargs)
+            cls.log.debug('caching request')
             cls._cache.get('asearch').update({hashedlst:list(results)})
         random.shuffle(results)
         return results
@@ -142,6 +143,13 @@ class Lastfm(Plugin):
             if self.sdb.get_bl_album(trk, add_not=True):
                 self.log.info('Blacklisted album: {0}: '.format(trk))
                 continue
+            # Should use albumartist heuristic as well
+            if self.plugin_conf.getboolean('single_album'):
+                if (trk.album == self.player.current.album or
+                    trk.album in [trk.alb for trk in self.to_add]):
+                    self.log.debug('Found unplayed track ' +
+                               'but from an album already queued: %s' % (trk))
+                    continue
             candidate.append(trk)
         if not candidate:
             self.log.debug('Unable to find title to add' +
@@ -237,6 +245,8 @@ class Lastfm(Plugin):
         for artist in extra_arts:
             self.log.debug('Looking for artist similar to "{0.artist}" as well'.format(artist))
             similar = self.lfm_similar_artists(artist=artist)
+            if not similar:
+                return ret_extra
             similar = sorted(similar, key=lambda sim: sim[1], reverse=True)
             ret_extra.extend(self.get_artists_from_player(similar))
             if current.artist in ret_extra:
@@ -387,6 +397,8 @@ class Lastfm(Plugin):
         self.queue_mode()
         candidates = self.to_add
         self.to_add = list()
+        if self.plugin_conf.get('queue_mode') != 'album':
+            random.shuffle(candidates)
         return candidates
 
     def callback_player_database(self):