Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shared.py
diff options
context:
space:
mode:
Diffstat (limited to 'shared.py')
-rw-r--r--shared.py78
1 files changed, 54 insertions, 24 deletions
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)