X-Git-Url: https://git.kaliko.me/?a=blobdiff_plain;f=sima%2Fplugins%2Finternal%2Frandomfallback.py;h=e6bd78be91821d36d36362751ae4233b0f9b5e2e;hb=92860d5ab0d6008fad149eea960de91acd15719a;hp=b8902ec6233e9978ff30987fd6fd5998b12e58c3;hpb=7854938788e0af521edd7199e40db796d3256351;p=mpd-sima.git diff --git a/sima/plugins/internal/randomfallback.py b/sima/plugins/internal/randomfallback.py index b8902ec..e6bd78b 100644 --- a/sima/plugins/internal/randomfallback.py +++ b/sima/plugins/internal/randomfallback.py @@ -1,43 +1,81 @@ # -*- coding: utf-8 -*- +# Copyright (c) 2013, 2014 Jack Kaliko +# +# This file is part of sima +# +# sima is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# sima is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with sima. If not, see . +# +# """ Fetching similar artists from last.fm web services """ -# standart library import +# standard library import import random -# third parties componants +# third parties components # local import from ...lib.plugin import Plugin -from ...lib.track import Track class RandomFallBack(Plugin): + """Add random track as fallback""" def __init__(self, daemon): - Plugin.__init__(self, daemon) + super().__init__(daemon) self.daemon = daemon - ## - self.to_add = list() + if not self.plugin_conf: + return + self.mode = self.plugin_conf.get('flavour', None) + if self.mode not in ['pure', 'sensible']: + self.log.warning('Bad value for flavour, ' + '"{}" not in ["pure", "sensible"]'.format(self.mode)) + self.mode = 'pure' - def get_history(self): - """Constructs list of Track for already played titles. + 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')) + trks = list() + target = self.plugin_conf.getint('track_to_add') + while len(trks) < target: + trks.append(self.get_trk()) + return trks + + def get_trk(self): + """Get a single track acording to random flavour + """ + artists = list(self.player.artists) + if self.mode == 'sensitive': + played_art = self.get_played_artist() + while 42: + art = random.choice(artists) + if art not in played_art: + break + elif self.mode == 'pure': + art = random.choice(artists) self.log.debug('Random art: {}'.format(art)) - trk = random.choice(self.player.find_track(art)) - self.log.info('random fallback ({}): {}'.format(mode, trk)) - return [trk] + trk = random.choice(self.player.find_track(art)) + self.log.info('random fallback ({}): {}'.format(self.mode, trk)) + return trk