X-Git-Url: https://git.kaliko.me/?a=blobdiff_plain;f=sima%2Fcore.py;h=695a18ca3ca621293164cefef6c1fe088a5af7d7;hb=67d87e47012b5d3ceba56bdff06a0fa406f4840b;hp=2ffb04c6e44c20ae7aedc564b212838b34a8361a;hpb=4354c875088ac413824ad881505676de417e19bf;p=mpd-sima.git diff --git a/sima/core.py b/sima/core.py index 2ffb04c..695a18c 100644 --- a/sima/core.py +++ b/sima/core.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2009, 2010, 2011, 2013, 2014, 2015 Jack Kaliko +# Copyright (c) 2009-2015, 2020 kaliko # # This file is part of sima # @@ -25,12 +25,13 @@ import time from collections import deque from logging import getLogger -from .client import PlayerClient -from .client import PlayerError, PlayerUnHandledError +from .mpdclient import MPD as PlayerClient +from .mpdclient import PlayerError, MPDError from .lib.simadb import SimaDB from .lib.daemon import Daemon from .utils.utils import SigHup + class Sima(Daemon): """Main class, plugin and player management """ @@ -45,16 +46,9 @@ class Sima(Daemon): self.log = getLogger('sima') self._plugins = list() self._core_plugins = list() - self.player = self.__get_player() # Player client + self.player = PlayerClient(conf) # MPD client 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): """Handle local, in memory, short history""" self.short_history.appendleft(self.player.current) @@ -73,7 +67,7 @@ class Sima(Daemon): def foreach_plugin(self, method, *args, **kwds): """Plugin's callbacks dispatcher""" - self.log.trace('dispatching %s to plugins', method) + self.log.trace('dispatching %s to plugins', method) # pylint: disable=no-member for plugin in self.core_plugins: getattr(plugin, method)(*args, **kwds) for plugin in self.plugins: @@ -93,9 +87,13 @@ class Sima(Daemon): if not self.enabled: self.log.debug('Queueing disabled!') return False - queue = self.player.queue queue_trigger = self.config.getint('sima', 'queue_length') - self.log.debug('Currently %s track(s) ahead. (target %s)', len(queue), queue_trigger) + if self.player.playmode.get('random'): + queue = self.player.playlist + self.log.debug('Currently %s track(s) in the playlist. (target %s)', len(queue), queue_trigger) + else: + queue = self.player.queue + self.log.debug('Currently %s track(s) ahead. (target %s)', len(queue), queue_trigger) if len(queue) < queue_trigger: return True return False @@ -103,7 +101,7 @@ class Sima(Daemon): def queue(self): to_add = list() for plugin in self.plugins: - self.log.info('running %s', plugin) + self.log.debug('callback_need_track: %s', plugin) pl_candidates = getattr(plugin, 'callback_need_track')() if pl_candidates: to_add.extend(pl_candidates) @@ -120,14 +118,14 @@ class Sima(Daemon): while True: tmp = sleepfor.pop(0) sleepfor.append(tmp) - self.log.info('Trying to reconnect in {:>4d} seconds'.format(tmp)) + self.log.info('Trying to reconnect in %4d seconds', tmp) time.sleep(tmp) try: self.player.connect() except PlayerError as err: self.log.debug(err) continue - except PlayerUnHandledError as err: + except MPDError as err: #TODO: unhandled Player exceptions self.log.warning('Unhandled player exception: %s', err) self.log.info('Got reconnected') @@ -159,22 +157,16 @@ class Sima(Daemon): """ """ try: - self.log.info('Connecting MPD: {0}:{1}'.format(*self.player._mpd)) + self.log.info('Connecting MPD: %(host)s:%(port)s', self.config['MPD']) self.player.connect() self.foreach_plugin('start') - except (PlayerError, PlayerUnHandledError) as err: + except (PlayerError, MPDError) as err: self.log.warning('Player: %s', err) self.reconnect_player() while 42: try: self.loop() - except PlayerUnHandledError as err: - #TODO: unhandled Player exceptions - self.log.warning('Unhandled player exception: %s', err) - del self.player - self.player = PlayerClient() - time.sleep(10) - except PlayerError as err: + except (PlayerError, MPDError) as err: self.log.warning('Player error: %s', err) self.reconnect_player() del self.changed @@ -182,7 +174,7 @@ class Sima(Daemon): def loop(self): """Dispatching callbacks to plugins """ - # hanging here untill a monitored event is raised in the player + # hanging here until a monitored event is raised in the player if getattr(self, 'changed', False): # first iteration exception self.changed = self.player.monitor() else: # first iteration goes through else