"""Core Object dealing with plugins and player client
"""
-__version__ = '0.12.0.b'
+__version__ = '0.12.0pr1'
__author__ = 'kaliko jack'
__url__ = 'git://git.kaliko.me/sima.git'
from .client import PlayerClient
from .client import PlayerError, PlayerUnHandledError
from .lib.simadb import SimaDB
+from .lib.daemon import Daemon
-class Sima(object):
+class Sima(Daemon):
"""Main class, plugin and player management
"""
- def __init__(self, conf, dbfile):
+ def __init__(self, conf):
+ ## Set daemon
+ Daemon.__init__(self, conf.get('daemon', 'pidfile'))
self.enabled = True
self.config = conf
- self.sdb = SimaDB(db_path=dbfile)
+ self.sdb = SimaDB(db_path=conf.get('sima', 'db_file'))
+ PlayerClient.database = self.sdb
self.log = getLogger('sima')
self.plugins = list()
- self.player = PlayerClient() # Player client
+ self.player = self.__get_player() # Player client
try:
self.player.connect()
except (PlayerError, PlayerUnHandledError) as err:
self.log.error('Fails to connect player: {}'.format(err))
self.shutdown()
- self.short_history = deque(maxlen=40)
+ self.short_history = deque(maxlen=60)
+
+ def __get_player(self):
+ """Instanciate the player"""
+ host = self.config.get('MPD', 'host')
+ port = self.config.get('MPD', 'port')
+ pswd = self.config.get('MPD', 'password', fallback=None)
+ return PlayerClient(host, port, pswd)
def add_history(self):
self.short_history.appendleft(self.player.current)
pl_callback = getattr(plugin, 'callback_need_track')()
if pl_callback:
to_add.extend(pl_callback)
+ if not to_add:
+ self.log.warning('Queue plugins returned nothing!')
+ for plugin in self.plugins:
+ pl_callback = getattr(plugin, 'callback_need_track_fb')()
+ if pl_callback:
+ to_add.extend(pl_callback)
for track in to_add:
self.player.add(track)
self.log.info('The way is shut, it was made by those who are dead. '
'And the dead keep it…')
self.log.info('bye...')
- sys.exit(0)
def run(self):
"""
except PlayerError as err:
self.log.warning('Player error: %s' % err)
self.reconnect_player()
+ del(self.changed)
def loop(self):
"""Dispatching callbacks to plugins