X-Git-Url: https://git.kaliko.me/?a=blobdiff_plain;f=sima%2Fcore.py;h=badc7b20240701412d86ddeb92d1eb1eeebac6b3;hb=dce739024b6979a680454212d98651aa4be62a66;hp=4b7307ea72796cc57fee1ba0d9208ccb37cf6830;hpb=37dd60538984a3917354b794a5c96b0a025f8e95;p=mpd-sima.git diff --git a/sima/core.py b/sima/core.py index 4b7307e..badc7b2 100644 --- a/sima/core.py +++ b/sima/core.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2009-2015, 2020 kaliko +# Copyright (c) 2009-2015, 2020, 2021 kaliko # # This file is part of sima # @@ -44,10 +44,11 @@ class Sima(Daemon): self.sdb = SimaDB(db_path=conf.get('sima', 'db_file')) PlayerClient.database = self.sdb self.log = getLogger('sima') - self._plugins = list() - self._core_plugins = list() + self._plugins = [] + self._core_plugins = [] self.player = PlayerClient(conf) # MPD client self.short_history = deque(maxlen=60) + self.changed = None def add_history(self): """Handle local, in memory, short history""" @@ -91,7 +92,8 @@ class Sima(Daemon): queue_trigger = self.config.getint('sima', 'queue_length') 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) + 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) @@ -100,7 +102,7 @@ class Sima(Daemon): return False def queue(self): - to_add = list() + to_add = [] for plugin in self.plugins: self.log.debug('callback_need_track: %s', plugin) pl_candidates = getattr(plugin, 'callback_need_track')() @@ -116,6 +118,8 @@ class Sima(Daemon): cycle : 5s 10s 1m 5m 20m 1h """ sleepfor = [5, 10, 60, 300, 1200, 3600] + # reset change + self.changed = None while True: tmp = sleepfor.pop(0) sleepfor.append(tmp) @@ -126,9 +130,6 @@ class Sima(Daemon): except PlayerError as err: self.log.debug(err) continue - except PlayerError as err: - # TODO: unhandled Player exceptions - self.log.warning('Unhandled player exception: %s', err) self.log.info('Got reconnected') break self.foreach_plugin('start') @@ -157,8 +158,6 @@ class Sima(Daemon): self.log.info('bye...') def run(self): - """ - """ try: self.log.info('Connecting MPD: %(host)s:%(port)s', self.config['MPD']) self.player.connect() @@ -172,17 +171,16 @@ class Sima(Daemon): except PlayerError as err: self.log.warning('Player error: %s', err) self.reconnect_player() - del self.changed def loop(self): """Dispatching callbacks to plugins """ # 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 + if self.changed is None: # first iteration goes through else self.changed = ['playlist', 'player', 'skipped'] - self.log.debug('changed: %s', ', '.join(self.changed)) + else: # Wait for a change + self.changed = self.player.monitor() + self.log.debug('changed: %s', ', '.join(self.changed)) if 'playlist' in self.changed: self.foreach_plugin('callback_playlist') if 'player' in self.changed or 'options' in self.changed: