- # hanging here untill a monitored event is raised in the player
- changed = self.player.monitor()
- if 'playlist' in changed:
- self.foreach_plugin('callback_playlist')
- if 'player' in changed:
- self.log.info(self.player.current)
+ try:
+ self.loop()
+ except PlayerUnHandledError as err:
+ #TODO: unhandled Player exceptions
+ self.log.warning('Unhandled player exception: {}'.format(err))
+ del(self.player)
+ self.player = PlayerClient()
+ time.sleep(10)
+ except PlayerError as err:
+ self.log.warning('Player error: %s' % err)
+ self.reconnect_player()
+
+ def loop(self):
+ """Dispatching callbacks to plugins
+ """
+ # hanging here untill a monitored event is raised in the player
+ if getattr(self, 'changed', False): # first loop detection
+ self.changed = self.player.monitor()
+ else:
+ self.changed = ['playlist', 'player', 'skipped']
+ self.log.debug('changed: {}'.format(', '.join(self.changed)))
+ if 'playlist' in self.changed:
+ self.foreach_plugin('callback_playlist')
+ if 'player' in self.changed:
+ self.foreach_plugin('callback_player')
+ if 'skipped' in self.changed:
+ if self.player.state == 'play':
+ self.log.info('Playing: {}'.format(self.player.current))
+ self.foreach_plugin('callback_next_song')
+ self.current_track = self.player.current