]> kaliko git repositories - mpd-sima.git/commitdiff
Add sensitive randomfallback mode
authorkaliko <efrim@azylum.org>
Sun, 1 Dec 2013 19:38:00 +0000 (20:38 +0100)
committerkaliko <efrim@azylum.org>
Sun, 1 Dec 2013 19:38:00 +0000 (20:38 +0100)
sima/core.py
sima/plugins/internal/randomfallback.py

index 7decbb242d84dab536037ae7ade66229345434cc..08135c0da6e26ae0ecf85895db8b24914548f497 100644 (file)
@@ -6,7 +6,6 @@ __version__ = '0.12.0.b'
 __author__ = 'kaliko jack'
 __url__ = 'git://git.kaliko.me/sima.git'
 
-import random
 import sys
 import time
 
index b8902ec6233e9978ff30987fd6fd5998b12e58c3..f2eaac4dc9eb412819c64b16a8c5068793697f2a 100644 (file)
@@ -16,27 +16,36 @@ from ...lib.track import Track
 class RandomFallBack(Plugin):
 
     def __init__(self, daemon):
-        Plugin.__init__(self, daemon)
+        super().__init__(daemon)
         self.daemon = daemon
-        ##
-        self.to_add = list()
-
-    def get_history(self):
-        """Constructs list of Track for already played titles.
+        if not self.plugin_conf:
+            return
+        self.mode = self.plugin_conf.get('flavour', None)
+        if self.mode not in ['pure', 'sensible', 'genre']:
+            self.log.warning('Bad value for flavour, '
+                    '{} not in ["pure", "sensible", "genre"]'.format(self.mode))
+            self.mode = 'pure'
+
+    def get_played_artist(self,):
+        """Constructs list of already played artists.
         """
         duration = self.daemon.config.getint('sima', 'history_duration')
-        tracks_from_db = self.daemon.sdb.get_history(duration=duration,)
+        tracks_from_db = self.daemon.sdb.get_history(duration=duration)
         # Construct Track() objects list from database history
-        played_tracks = [Track(artist=tr[-1], album=tr[1], title=tr[2],
-                               file=tr[3]) for tr in tracks_from_db]
-        return played_tracks
+        artists = [ tr[-1] for tr in tracks_from_db ]
+        return set(artists)
 
     def callback_need_track_fb(self):
-        mode = self.plugin_conf.get('flavour')
         art = random.choice(self.player.list('artist'))
         self.log.debug('Random art: {}'.format(art))
+        if self.mode == 'sensitive':
+            played_art = self.get_played_artist()
+            while 42:
+                art = random.choice(self.player.list('artist'))
+                if art not in played_art:
+                    break
         trk  = random.choice(self.player.find_track(art))
-        self.log.info('random fallback ({}): {}'.format(mode, trk))
+        self.log.info('random fallback ({}): {}'.format(self.mode, trk))
         return [trk]