From a82ba3893ac6b249eefe5081b76cc3be92b428c5 Mon Sep 17 00:00:00 2001 From: Aleksey Lim Date: Thu, 12 Mar 2009 19:33:04 +0000 Subject: Remove map event issue by switching to {new|resume|save|share}_instance --- 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) -- cgit v0.9.1