]> kaliko git repositories - mpd-sima.git/blobdiff - sima/lib/webserv.py
Use albumartist to fetch similar artists
[mpd-sima.git] / sima / lib / webserv.py
index 5e787856414e69bd8e50111f03cbb4d8428ef805..f1afd55a41b7e2f279fed0d3ec0d02bd28ec6594 100644 (file)
@@ -227,8 +227,7 @@ class WebService(Plugin):
         if not self.player.playlist:
             return []
         tolookfor = self.player.playlist[-1].get_artist()
-        self.log.info('Looking for artist similar '
-                      'to "{0.artist}"'.format(self.player.playlist[-1]))
+        self.log.info('Looking for artist similar to "{}"'.format(tolookfor))
         similar = self.ws_similar_artists(tolookfor)
         if not similar:
             self.log.info('Got nothing from {0}!'.format(self.ws.name))
@@ -236,18 +235,22 @@ class WebService(Plugin):
         self.log.info('First five similar artist(s): {}...'.format(
                       ' / '.join([a for a in list(similar)[0:5]])))
         self.log.info('Looking availability in music library')
-        ret = self.get_artists_from_player(similar)
+        ret = set(self.get_artists_from_player(similar))
         ret_extra = None
         if len(self.history) >= 2:
             if self.plugin_conf.getint('depth') > 1:
                 ret_extra = self.get_recursive_similar_artist()
         if ret_extra:
-            ret = list(set(ret) | set(ret_extra))
+            ret = set(ret) | set(ret_extra)
         if not ret:
             self.log.warning('Got nothing from music library.')
             self.log.warning('Try running in debug mode to guess why...')
             return []
         self.log.info('Got {} artists in library'.format(len(ret)))
+        queued_artists = { trk.artist for trk in self.player.queue }
+        if ret & queued_artists:
+            self.log.debug('Removing already queued artist: {0}'.format(ret & queued_artists))
+            ret = list(ret - queued_artists)
         # Move around similars items to get in unplayed|not recently played
         # artist first.
         return self._get_artists_list_reorg(ret)
@@ -326,6 +329,7 @@ class WebService(Plugin):
                 self.log.info('{0.name} ratelimit: {0.ratelimit}'.format(self.ws))
             for trk in titles:
                 found = self.player.fuzzy_find_track(artist.name, trk.title)
+                random.shuffle(found)
                 if found:
                     self.log.debug('{0}'.format(found[0]))
                     if self.filter_track(found):
@@ -340,6 +344,7 @@ class WebService(Plugin):
             self.log.debug('Trying to find titles to add for "{}"'.format(
                            artist))
             found = self.player.find_track(artist)
+            random.shuffle(found)
             if not found:
                 self.log.debug('Found nothing to queue for {0}'.format(artist))
                 continue