From 430de3cb9e2d16915e3c45e6c7b4be17f5b8b82f Mon Sep 17 00:00:00 2001 From: kaliko Date: Sun, 1 Dec 2013 20:38:00 +0100 Subject: [PATCH] Add sensitive randomfallback mode --- sima/core.py | 1 - sima/plugins/internal/randomfallback.py | 33 ++++++++++++++++--------- 2 files changed, 21 insertions(+), 13 deletions(-) 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] -- 2.39.2