X-Git-Url: http://git.kaliko.me/?a=blobdiff_plain;f=sima%2Flib%2Fplugin.py;h=1afafe5455297e5643fb0f977297bf5c3c0cf29c;hb=c23e4560ba184403e94d41cbf0816ed9847406fc;hp=c38683af971e6aad172fe87cbfbe20750be7499b;hpb=76faf2eccfe59a86fa6636973fdcb21d81f47387;p=mpd-sima.git diff --git a/sima/lib/plugin.py b/sima/lib/plugin.py index c38683a..1afafe5 100644 --- a/sima/lib/plugin.py +++ b/sima/lib/plugin.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2013-2015, 2020 kaliko +# Copyright (c) 2013-2015, 2020-2021 kaliko # # This file is part of sima # @@ -24,7 +24,7 @@ Plugin object to derive from import random from .track import Track -from .meta import Album, Artist +from .meta import Album, Artist, MetaContainer class Plugin: @@ -82,50 +82,42 @@ class Plugin: Called when the daemon().run() is called and right after the player has connected successfully. """ - pass def callback_player(self): """ Called on player changes, stopped, paused, skipped """ - pass def callback_player_database(self): """ Called on player music library changes """ - pass def callback_playlist(self): """ Called on playlist changes Not returning data """ - pass def callback_next_song(self): """ Could be use to scrobble, maintain an history… Not returning data, """ - pass def callback_need_track(self): """ Returns a list of Track objects to add """ - pass def callback_need_track_fb(self): """ Called when callback_need_track failled to find tracks to queue Returns a list of Track objects to add """ - pass def shutdown(self): """Called on application shutdown""" - pass class AdvancedPlugin(Plugin): @@ -134,49 +126,35 @@ class AdvancedPlugin(Plugin): """ # Query History - def get_history(self, artist=False): - """Constructs Track list of already played artists. - - :param Artist artist: Artist object to look history for - """ + def get_history(self): + """Returns a Track list of already played artists.""" duration = self.main_conf.getint('sima', 'history_duration') - name = None - if artist: - name = artist.name - from_db = self.sdb.get_history(duration=duration, artist=name) - hist = [Track(artist=tr[0], album=tr[1], title=tr[2], - file=tr[3]) for tr in from_db] - return hist + return self.sdb.fetch_history(duration=duration) def get_album_history(self, artist): """Retrieve album history""" - hist = [] - tracks_from_db = self.get_history(artist=artist) - for trk in tracks_from_db: - if trk.album and trk.album in hist: - continue - hist.append(Album(name=trk.album, artist=Artist(trk.artist))) - return hist + duration = self.main_conf.getint('sima', 'history_duration') + return self.sdb.fetch_albums_history(needle=artist, duration=duration) def get_reorg_artists_list(self, alist): """ Move around items in alist in order to have first not recently played (or about to be played) artists. - :param list(str) alist: artist name list (Not an Artist object) + :param {Artist} alist: Artist objects list/container """ - queued_artist = {_.artist for _ in self.player.queue} - not_queued_artist = set(alist) - queued_artist + queued_artist = MetaContainer([Artist(_.artist) for _ in + self.player.queue if _.artist]) + not_queued_artist = alist - queued_artist duration = self.main_conf.getint('sima', 'history_duration') hist = [] - for art in self.sdb.get_artists_history(alist, - duration=duration): + for art in self.sdb.fetch_artists_history(alist, duration=duration): if art not in hist: if art not in queued_artist: hist.insert(0, art) else: hist.append(art) - # Find not recently played (not in history) + # Find not recently played (not in history) & not in queue reorg = [art for art in not_queued_artist if art not in hist] reorg.extend(hist) return reorg @@ -218,11 +196,12 @@ class AdvancedPlugin(Plugin): album) continue album_to_queue = album + break if not album_to_queue: self.log.info('No album found for "%s"', artist) return None - self.log.info('%s album candidate: %s - %s', self.__class__.__name__, - artist, album_to_queue) + self.log.info('%s plugin chose album: %s - %s', + self.__class__.__name__, artist, album_to_queue) return album_to_queue def filter_track(self, tracks, unplayed=False): @@ -237,7 +216,7 @@ class AdvancedPlugin(Plugin): deny_list = self.player.playlist else: deny_list = self.player.queue - not_in_hist = list(set(tracks) - set(self.get_history(artist=artist))) + not_in_hist = list(set(tracks) - set(self.sdb.fetch_history(artist=artist))) if not not_in_hist: self.log.debug('All tracks already played for "%s"', artist) if unplayed: