+ def loop(self):
+ """Dispatching callbacks to plugins
+ """
+ # hanging here untill 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
+ 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
+ or 'options' in self.changed):
+ self.foreach_plugin('callback_player')
+ if 'database' in self.changed:
+ self.foreach_plugin('callback_player_database')
+ if 'skipped' in self.changed:
+ if self.player.state == 'play':
+ self.log.info('Playing: {}'.format(self.player.current))
+ self.add_history()
+ self.foreach_plugin('callback_next_song')
+ if self.need_tracks():
+ self.queue()