Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/tutorius/engine.py
blob: dda9f3f46769ce027902e7253a5ac553a0b48878 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import logging
import dbus.mainloop.glib
from jarabe.model import shell

from sugar.tutorius.bundler import TutorialStore
from sugar.bundle.activitybundle import ActivityBundle

class Engine:
    """
    Driver for the execution of tutorials
    """

    def __init__(self):
        # FIXME Probe management should be in the probe manager
        dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
        #FIXME shell.get_model() will only be useful in the shell process
        self._shell = shell.get_model()
        self._tutorial = None

    def launch(self, tutorialID):
	""" Launch a tutorial 
            @param tutorialID unique tutorial identifier used to retrieve it from the disk
        """
        if self._tutorial:
            self._tutorial.detach()
            self._tutorial = None

        store = TutorialStore()

        #Get the active activity from the shell
        activity = self._shell.get_active_activity()
        self._tutorial = store.load_tutorial(tutorialID, bundle_path=activity.get_bundle_path())

        #TProbes automatically use the bundle id, available from the ActivityBundle
        bundle = ActivityBundle(activity.get_bundle_path())
        self._tutorial.attach(bundle.get_bundle_id())

    def stop(self):
        """ Stop the current tutorial
        """
        self._tutorial.detach()
        self._tutorial = None

    def pause(self):
        """ Interrupt the current tutorial and save its state in the journal
        """
        raise NotImplementedError("Unable to store tutorial state")