Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/tutorius/creator.py
diff options
context:
space:
mode:
Diffstat (limited to 'tutorius/creator.py')
-rw-r--r--tutorius/creator.py62
1 files changed, 55 insertions, 7 deletions
diff --git a/tutorius/creator.py b/tutorius/creator.py
index 6ba7011..92344d2 100644
--- a/tutorius/creator.py
+++ b/tutorius/creator.py
@@ -32,7 +32,7 @@ import os
from sugar.graphics import icon, style
import jarabe.frame
-from . import overlayer, gtkutils, vault, addon
+from . import overlayer, gtkutils, vault, addon, translator
from .tutorial import Tutorial
from . import viewer
from .propwidgets import TextInputDialog
@@ -91,7 +91,7 @@ class Creator(Object):
if Creator._instance:
raise RuntimeError("Creator was already instanciated")
Creator._instance = self
- self._probe_mgr = probe_manager
+ self._probe_mgr_unwrapped = probe_manager
self._installed_actions = list()
def start_authoring(self, tutorial=None):
@@ -130,8 +130,23 @@ class Creator(Object):
self._selected_widget = None
self._eventmenu = None
self.tuto = None
- self._guid = None
- self.metadata = None
+
+ self._guid = str(uuid.uuid1())
+ self._metadata = {
+ vault.INI_GUID_PROPERTY: self._guid,
+ vault.INI_NAME_PROPERTY: '',
+ vault.INI_VERSION_PROPERTY: '1',
+ }
+
+ related_activities_dict = {}
+ self._metadata['activities'] = dict(related_activities_dict)
+ # Save Tutorial right now, so resource can be added right now.
+ # If the tutorial is still unnamed at quit it will be removed.
+ vault.Vault.saveTutorial(self._tutorial, self._metadata)
+
+ self._probe_mgr = translator.ResourceTranslator(
+ self._probe_mgr_unwrapped,
+ self._guid)
frame = jarabe.frame.get_view()
@@ -306,8 +321,17 @@ class Creator(Object):
"""
event_type = self._propedit.events_list[path][ToolBox.ICON_NAME]
- event = self._probe_mgr.create_event(event_type)
+ event = self._probe_mgr.create_event(event_type,
+ event_created_cb=partial(self._event_created, event_type))
+ def _event_created(self, event_type, event):
+ """
+ Callback to execute when the creation of a new event is complete.
+
+ @param event_type The type of event that was created
+ @param event The event that was instanciated
+ """
+ LOGGER.debug("Creator :: _event_created, now setting source and adding inside tutorial")
# Configure the event prior to installing it
# Currently, this consists of writing its source
event.source = self._probe_mgr.currentActivity
@@ -393,13 +417,18 @@ class Creator(Object):
self._overview.destroy()
self.is_authoring = False
+ # remove unsaved tutorial remains
+ if not self._metadata[vault.INI_NAME_PROPERTY]:
+ LOGGER.debug("Creator :: removing unsaved tutorial %s" % \
+ str(self._guid))
+ vault.Vault.deleteTutorial(self._guid)
+
def save(self, widget=None):
"""
Save the currently edited tutorial to bundle, prompting for
a name as needed.
"""
- if not self._guid:
- self._guid = str(uuid.uuid1())
+ if not self._metadata[vault.INI_NAME_PROPERTY]:
dlg = TextInputDialog(parent=self._overview.win,
text=T("Enter a tutorial title."),
field=T("Title"))
@@ -432,6 +461,7 @@ class Creator(Object):
related_activities_dict[activity_name] = str(bundle.get_activity_version())
self._metadata['activities'] = dict(related_activities_dict)
+ self._metadata[vault.INI_NAME_PROPERTY] = tutorial_name
vault.Vault.saveTutorial(self._tutorial, self._metadata)
@@ -465,6 +495,24 @@ class Creator(Object):
"""
return self.is_authoring
+ def set_resource(self, resource_id, file_path):
+ """
+ Adds a resource to the currently edited tutorial.
+ This is intended for use by the property widgets to update resources
+ without knowing anything about the vault and tutorial GUID.
+
+ @param resource_id: the id of the resource to update, or an empty
+ string for a new resource.
+ @param file_path: the path to the resource to use for update.
+ @returns the new resource_id
+ """
+ LOGGER.debug("Creator :: Updating resource from '%s'" % file_path)
+
+ if resource_id:
+ vault.Vault.delete_resource(self._guid, resource_id)
+
+ return str(vault.Vault.add_resource(self._guid, file_path))
+
def update_addon_property(self, addon_address, diff_dict):
"""
Updates the properties on an addon.