MainController.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. from core.ConfigurationManager import SettingLoader
  2. from core.OrderAnalyser import OrderAnalyser
  3. from core.OrderListener import OrderListener
  4. from core.TriggerLauncher import TriggerLauncher
  5. from neurons import Say
  6. class MainController:
  7. def __init__(self, brain_file=None):
  8. self.brain_file = brain_file
  9. # get global configuration
  10. self.settings = SettingLoader.get_settings()
  11. # create an order listener object
  12. self.order_listener = OrderListener(self.analyse_order)
  13. # Wait that the jarvis trigger is pronounced by the user
  14. self.trigger_instance = self._get_default_trigger()
  15. self.trigger_instance.start()
  16. def callback(self):
  17. """
  18. # we have detected the hotword, we can now pause the Jarvis Trigger for a while
  19. # The user can speak out loud his order during this time.
  20. :return:
  21. """
  22. # pause the snowboy process
  23. self.trigger_instance.pause()
  24. Say(message=self.settings.random_wake_up_answers)
  25. self.order_listener.load_stt_plugin()
  26. def analyse_order(self, order):
  27. """
  28. Receive an order, try to retreive it in the brain.yml to launch to attached plugins
  29. :return:
  30. """
  31. order_analyser = OrderAnalyser(order, main_controller=self, brain_file=self.brain_file)
  32. order_analyser.start()
  33. # restart the trigger when the order analyser has finish his job
  34. self.trigger_instance.unpause()
  35. def _get_default_trigger(self):
  36. """
  37. Return an instance of the default trigger
  38. :return:
  39. """
  40. for trigger in self.settings.triggers:
  41. if trigger.name == self.settings.default_trigger_name:
  42. return TriggerLauncher.get_trigger(trigger, callback=self.callback)