X-Git-Url: https://git.kaliko.me/?a=blobdiff_plain;f=sima%2Fplugins%2Flastfm.py;h=679aaa6a78f52156972b8f4f6396ce625dd41a28;hb=9710a7d7676359c1895dfc52297018d4e46f270f;hp=ec612eed10edf10cc90804aca45565fa9afb1253;hpb=08ce3d59f8f416d3fc036047aa01a86a93b421e9;p=mpd-sima.git diff --git a/sima/plugins/lastfm.py b/sima/plugins/lastfm.py index ec612ee..679aaa6 100644 --- a/sima/plugins/lastfm.py +++ b/sima/plugins/lastfm.py @@ -35,23 +35,33 @@ def cache(func): return results return wrapper + def blacklist(artist=False, album=False, track=False): - field = (bl for bl in (artist, album, track)) + #pylint: disable=C0111,W0212 + field = (artist, album, track) def decorated(func): def wrapper(*args, **kwargs): cls = args[0] + boolgen = (bl for bl in field) bl_fun = (cls._Plugin__daemon.sdb.get_bl_artist, cls._Plugin__daemon.sdb.get_bl_album, cls._Plugin__daemon.sdb.get_bl_track,) - #bl_getter = next(fn for fn, bl in zip(bl_fun, field) if bl is True) - bl_getter = next(dropwhile(lambda _: not next(field), bl_fun)) - results = func(*args, **kwargs) + #bl_getter = next(fn for fn, bl in zip(bl_fun, boolgen) if bl is True) + bl_getter = next(dropwhile(lambda _: not next(boolgen), bl_fun)) cls.log.debug('using {0} as bl filter'.format(bl_getter.__name__)) - for elem in results: - if bl_getter(elem, add_not=True): - cls.log.info('Blacklisted: {0}'.format(elem)) - results.remove(elem) - return results + if artist: + results = func(*args, **kwargs) + for elem in results: + if bl_getter(elem, add_not=True): + cls.log.info('Blacklisted: {0}'.format(elem)) + results.remove(elem) + return results + if track: + for elem in args[1]: + if bl_getter(elem, add_not=True): + cls.log.info('Blacklisted: {0}'.format(elem)) + args[1].remove(elem) + return func(*args, **kwargs) return wrapper return decorated @@ -109,11 +119,13 @@ class Lastfm(Plugin): file=tr[3]) for tr in tracks_from_db] return played_tracks + #@blacklist(track=True) def filter_track(self, tracks): """ Extract one unplayed track from a Track object list. * not in history * not already in the queue + * not blacklisted """ artist = tracks[0].artist black_list = self.player.queue + self.to_add @@ -121,12 +133,27 @@ class Lastfm(Plugin): if not not_in_hist: self.log.debug('All tracks already played for "{}"'.format(artist)) random.shuffle(not_in_hist) - candidate = [ trk for trk in not_in_hist if trk not in black_list ] + #candidate = [ trk for trk in not_in_hist if trk not in black_list + #if not self.sdb.get_bl_track(trk, add_not=True)] + candidate = [] + for trk in [_ for _ in not_in_hist if _ not in black_list]: + if self.sdb.get_bl_track(trk, add_not=True): + self.log.info('Blacklisted: {0}: '.format(trk)) + continue + if self.sdb.get_bl_album(trk, add_not=True): + self.log.info('Blacklisted album: {0}: '.format(trk)) + continue + candidate.append(trk) if not candidate: self.log.debug('Unable to find title to add' + - ' for "%s".' % artist) + ' for "%s".' % artist) return None + #@blacklist(track=True) + #def deco(self, args): + #return args + #candidate = deco(self, candidate) self.to_add.append(random.choice(candidate)) + return self.to_add def _get_artists_list_reorg(self, alist): """