1 # -*- coding: utf-8 -*-
2 # Copyright (c) 2013-2015, 2020 kaliko <kaliko@azylum.org>
4 # This file is part of sima
6 # sima is free software: you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation, either version 3 of the License, or
9 # (at your option) any later version.
11 # sima is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with sima. If not, see <http://www.gnu.org/licenses/>.
21 Plugin object to derive from
27 First non-empty line of the docstring is used as description
28 Rest of the docstring at your convenience.
30 The lowercased plugin Name MUST be the same as the module (file name),
31 for instance Plugin → plugin.py
32 It eases plugins discovery and simplifies the code to handle them,
33 IMHO, it's a fair trade-off.
38 """self documenting class method
40 doc = 'Undocumented plugin! Fill "{}" docstring'.format(cls.__name__)
42 doc = cls.__doc__.strip(' \n').splitlines()[0]
43 return {'name': cls.__name__,
46 def __init__(self, daemon):
48 self.__daemon = daemon
49 self.player = daemon.player
50 self.plugin_conf = None
54 return self.__class__.__name__
56 def __get_config(self):
57 """Get plugin's specific configuration from global applications's config
59 conf = self.__daemon.config
60 for sec in conf.sections(): # Discovering plugin conf
61 if sec == self.__class__.__name__.lower():
62 self.plugin_conf = conf[sec]
63 if 'priority' not in self.plugin_conf:
64 self.plugin_conf['priority'] = '80'
65 if not self.plugin_conf:
66 self.plugin_conf = {'priority': '80'}
68 # self.log.debug('Got config for %s: ùs', self, self.plugin_conf)
72 return self.plugin_conf.get('priority')
76 Called when the daemon().run() is called and
77 right after the player has connected successfully.
81 def callback_player(self):
83 Called on player changes, stopped, paused, skipped
87 def callback_player_database(self):
89 Called on player music library changes
93 def callback_playlist(self):
95 Called on playlist changes
100 def callback_next_song(self):
102 Could be use to scrobble, maintain an history…
107 def callback_need_track(self):
109 Returns a list of Track objects to add
113 def callback_need_track_fb(self):
115 Called when callback_need_track failled to find tracks to queue
116 Returns a list of Track objects to add
121 """Called on application shutdown"""
126 # vim: ai ts=4 sw=4 sts=4 expandtab