From: kaliko Date: Sun, 1 Dec 2013 19:38:00 +0000 (+0100) Subject: Add sensitive randomfallback mode X-Git-Tag: mpd-sima/0.12.0pr2~20 X-Git-Url: https://git.kaliko.me/?a=commitdiff_plain;h=430de3cb9e2d16915e3c45e6c7b4be17f5b8b82f;p=mpd-sima.git Add sensitive randomfallback mode --- diff --git a/sima/core.py b/sima/core.py index 7decbb2..08135c0 100644 --- a/sima/core.py +++ b/sima/core.py @@ -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 diff --git a/sima/plugins/internal/randomfallback.py b/sima/plugins/internal/randomfallback.py index b8902ec..f2eaac4 100644 --- a/sima/plugins/internal/randomfallback.py +++ b/sima/plugins/internal/randomfallback.py @@ -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]