Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/tutorius/engine.py
diff options
context:
space:
mode:
Diffstat (limited to 'tutorius/engine.py')
-rw-r--r--tutorius/engine.py29
1 files changed, 19 insertions, 10 deletions
diff --git a/tutorius/engine.py b/tutorius/engine.py
index c945e49..10c8d14 100644
--- a/tutorius/engine.py
+++ b/tutorius/engine.py
@@ -7,7 +7,9 @@ from .vault import Vault
from .TProbe import ProbeManager
from .dbustools import save_args
from .tutorial import Tutorial, AutomaticTransitionEvent
+from .translator import ResourceTranslator
+LOGGER = logging.getLogger("sugar.tutorius.engine")
class TutorialRunner(object):
"""
@@ -27,6 +29,7 @@ class TutorialRunner(object):
#Cached objects
self._actions = {}
+ self._installed_actions = {}
#Temp FIX until event/actions have an activity id
self._activity_id = None
@@ -55,15 +58,21 @@ class TutorialRunner(object):
return
#Clear the current actions
- for action in self._actions.values():
- self._pM.uninstall(action)
+ for (action_name, action_address) in self._installed_actions.items():
+ LOGGER.debug("TutorialRunner :: Uninstalling action %s with address %s"%(action_name, action_address))
+ self._pM.uninstall(action_address)
self._actions = {}
+ self._installed_actions = {}
#Clear the EventFilters
for event in self._sEvents:
self._pM.unsubscribe(event)
self._sEvents.clear()
+ def __action_installed(self, action_name, address):
+ LOGGER.debug("TutorialRunner :: Action %s received address %s"%(action_name, address))
+ self._installed_actions[action_name] = address
+
def _setupState(self):
if self._state is None:
raise RuntimeError("Attempting to setupState without a state")
@@ -77,13 +86,15 @@ class TutorialRunner(object):
for (event, next_state) in transitions.values():
if isinstance(event, AutomaticTransitionEvent):
state_name = next_state
- break
+ return state_name
+
+ for (action_name, action) in self._actions.items():
+ self._pM.install(action, save_args(self.__action_installed, action_name), True)
+ LOGGER.debug("TutorialRunner :: Installed action %s"%(action_name))
+ for (event, next_state) in transitions.values():
self._sEvents.add(self._pM.subscribe(event, save_args(self._handleEvent, next_state)))
- for action in self._actions.values():
- self._pM.install(action)
-
return state_name
def enterState(self, state_name):
@@ -112,9 +123,6 @@ class TutorialRunner(object):
# transition in the state definition
self.enterState(self._setupState())
-
-
-
class Engine:
"""
Driver for the execution of tutorials
@@ -137,7 +145,8 @@ class Engine:
if self._tutorial:
self.stop()
- self._tutorial = TutorialRunner(Vault.loadTutorial(tutorialID), self._probeManager)
+ translator_decorator = ResourceTranslator(self._probeManager, tutorialID)
+ self._tutorial = TutorialRunner(Vault.loadTutorial(tutorialID), translator_decorator)
#Get the active activity from the shell
activity = self._shell.get_active_activity()