Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--activity.py16
-rw-r--r--document.py3
-rw-r--r--shared.py78
3 files changed, 61 insertions, 36 deletions
diff --git a/activity.py b/activity.py
index 7b89a66..020ab78 100644
--- a/activity.py
+++ b/activity.py
@@ -35,9 +35,6 @@ class CartoonBuilderActivity(SharedActivity):
self.notebook = gtk.Notebook()
SharedActivity.__init__(self, self.notebook, SERVICE, handle)
- self.connect('init', self._init_cb)
- self.connect('tube', self._tube_cb)
-
self.notebook.show()
self.notebook.props.show_border = False
self.notebook.props.show_tabs = False
@@ -63,19 +60,20 @@ class CartoonBuilderActivity(SharedActivity):
toolbox.set_current_toolbar(1)
- def read_file(self, filepath):
+ def new_instance(self):
+ self.montage.restore()
+
+ def resume_instance(self, filepath):
document.load(filepath)
char.load()
ground.load()
sound.load()
+ self.montage.restore()
- def write_file(self, filepath):
+ def save_instance(self, filepath):
document.save(filepath)
- def _init_cb(self, sender):
- self.montage.restore()
-
- def _tube_cb(self, activity, tube_conn, initiating):
+ def share_instance(self, tube_conn, initiating):
self.messenger = Messenger(tube_conn, initiating, self.montage)
def _toolbar_changed_cb(self, widget, index):
diff --git a/document.py b/document.py
index d3ba739..6e1e979 100644
--- a/document.py
+++ b/document.py
@@ -78,9 +78,6 @@ def save(filepath):
zip.writestr('MANIFEST', json.dumps(cfg))
zip.close()
- import shutil
- shutil.copy(filepath, '/tmp/foo.zip')
-
def load(filepath):
zip = ZipFile(filepath, 'r')
cfg = json.loads(zip.read('MANIFEST'))
diff --git a/shared.py b/shared.py
index 3ca51ca..9ba1ecc 100644
--- a/shared.py
+++ b/shared.py
@@ -21,41 +21,76 @@ from sugar.presence.sugartubeconn import SugarTubeConnection
logger = logging.getLogger('cartoon-builder')
-class CanvasActivity(Activity):
- __gsignals__ = {
- 'init' : (SIGNAL_RUN_FIRST, None, []) }
-
- def __init__(self, canvas, *args):
- Activity.__init__(self, *args)
+INSTANCED = 0
+NEW_INSTANCE = 1
+RESUME_INSTANCE = 2
- self._inited = False
+class CanvasActivity(Activity):
+ def new_instance(self):
+ # stub
+ pass
+
+ def resume_instance(self, filepath):
+ # stub
+ pass
+
+ def save_instance(self, filepath):
+ # stub
+ raise NotImplementedError
+
+ def share_instance(self, connection, is_initiator):
+ # stub
+ pass
+
+ def __init__(self, canvas, handle):
+ Activity.__init__(self, handle)
+
+ self.__state = handle.object_id is None \
+ and NEW_INSTANCE or RESUME_INSTANCE
+ self.__resume_filename = None
+ self.__postponed_share = []
# XXX do it after(possible) read_file() invoking
# have to rely on calling read_file() from map_cb in sugar-toolkit
canvas.connect_after('map', self._map_canvasactivity_cb)
self.set_canvas(canvas)
- def get_inited(self):
- return self._inited
- inited = property(type=bool, default=False, getter=get_inited, setter=None)
+ def __instance(self, cb, *args):
+ for i in self.__postponed_share:
+ self.share_instance(i, self._initiating)
+ self.__postponed_share = []
+ cb(*args)
+
+ def read_file(self, filepath):
+ if self.__state != INSTANCED:
+ self.__resume_filename = filepath
+ self.__state = INSTANCED
+ else:
+ self.__instance(self.resume_instance, filepath);
def _map_canvasactivity_cb(self, widget):
- self._inited = True
- self.emit('init')
+ if self.__state == NEW_INSTANCE:
+ self.__instance(self.new_instance)
+ elif self.__state != INSTANCED:
+ self.__state = INSTANCED
+ else:
+ self.__instance(self.resume_instance, self.__resume_filename);
return False
+ def write_file(self, filepath):
+ self.save_instance(filepath)
+
class SharedActivity(CanvasActivity):
- __gsignals__ = {
- 'tube' : (SIGNAL_RUN_FIRST, None, 2*[TYPE_PYOBJECT]) }
+ def share_instance(self, connection, is_initiator):
+ # stub
+ pass
def __init__(self, canvas, service, *args):
CanvasActivity.__init__(self, canvas, *args)
self.service = service
- self._postpone_tubes = []
- self.connect_after('init', self._init_sharedactivity_cb)
self.connect('shared', self._shared_cb)
# Owner.props.key
@@ -66,11 +101,6 @@ class SharedActivity(CanvasActivity):
# We've already joined
self._joined_cb()
- def _init_sharedactivity_cb(self, sender):
- for i in self._postpone_tubes:
- self.emit('tube', i, self._initiating)
- self._postpone_tubes = []
-
def _shared_cb(self, activity):
logger.debug('My activity was shared')
self._initiating = True
@@ -125,7 +155,7 @@ class SharedActivity(CanvasActivity):
self._tubes_chan[telepathy.CHANNEL_TYPE_TUBES],
id, group_iface=self._text_chan[telepathy.CHANNEL_INTERFACE_GROUP])
- if self.get_inited():
- self.emit('tube', tube_conn, self._initiating)
+ if self.__state == INSTANCED:
+ self.share_instance(tube_conn, self._initiating)
else:
- self._postpone_tubes.append(tube_conn)
+ self.__postponed_share.append(tube_conn)