from engine import Engine import dbus _DBUS_SERVICE = "org.tutorius.Service" _DBUS_PATH = "org/tutorius/Service" _DBUS_SERVICE_IFACE = "org.tutorius.Service" class Service(dbus.service.Object): """ Global tutorius entry point to control the whole system """ def __init__(self): bus = dbus.SessionBus() bus_name = dbus.service.BusName(_DBUS_SERVICE, bus=bus) dbus.service.Object.__init__(self, bus_name, _DBUS_PATH) self._engine = Engine() def start(self): """ Start the service itself """ # For the moment there is nothing to do pass @dbus.service.method(_DBUS_SERVICE_IFACE, in_signature="s", out_signature="") def launch(self, tutorialID): """ Launch a tutorial @param tutorialID unique tutorial identifier used to retrieve it from the disk """ self._engine.launch(tutorialID) @dbus.service.method(_DBUS_SERVICE_IFACE, in_signature="", out_signature="") def stop(self): """ Stop the current tutorial """ self._engine.stop() @dbus.service.method(_DBUS_SERVICE_IFACE, in_signature="", out_signature="") def pause(self): """ Interrupt the current tutorial and save its state in the journal """ self._engine.pause() class ServiceProxy: """ Proxy to connect to the Service object, abstracting the DBus interface""" def __init__(self): bus = dbus.SessionBus() self._object = bus.get_object(_DBUS_SERVICE,_DBUS_PATH) self._service = dbus.Interface(self._object, _DBUS_SERVICE_IFACE) def launch(self, tutorialID): self._service.launch(tutorialID) def stop(self): self._service.stop() def pause(self): self._service.pause()