Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sugar/activity
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu@tomeuvizoso.net>2007-07-23 11:45:46 (GMT)
committer Tomeu Vizoso <tomeu@tomeuvizoso.net>2007-07-23 11:45:46 (GMT)
commit32074713c8058ead891bdc25bad4d340f1b7b373 (patch)
treeb804f3cde2b36e1373551766535848d064f5316a /sugar/activity
parent557f3d6ea702665b6e55e1981f921aa2c407b5cf (diff)
Clean up only when latest call to the DS has finished.
Diffstat (limited to 'sugar/activity')
-rw-r--r--sugar/activity/activity.py41
1 files changed, 33 insertions, 8 deletions
diff --git a/sugar/activity/activity.py b/sugar/activity/activity.py
index a616ccd..08a9893 100644
--- a/sugar/activity/activity.py
+++ b/sugar/activity/activity.py
@@ -222,6 +222,8 @@ class Activity(Window, gtk.Container):
self._join_id = None
self._can_close = True
self._preview = None
+ self._updating_jobject = False
+ self._closing = False
shared_activity = handle.get_shared_activity()
if shared_activity:
@@ -307,11 +309,27 @@ class Activity(Window, gtk.Container):
raise NotImplementedError
def _internal_save_cb(self):
- pass
+ self._updating_jobject = False
+ if self._closing:
+ self._cleanup_jobject()
+ self.destroy()
def _internal_save_error_cb(self, err):
+ self._updating_jobject = False
+ if self._closing:
+ self._cleanup_jobject()
+ self.destroy()
logging.debug("Error saving activity object to datastore: %s" % err)
+ def _cleanup_jobject(self):
+ if self._jobject:
+ if self._owns_file and os.path.isfile(self._jobject.file_path):
+ logging.debug('_cleanup_jobject: removing %r' % self._jobject.file_path)
+ os.remove(self._jobject.file_path)
+ self._owns_file = False
+ self._jobject.destroy()
+ self._jobject = None
+
def _get_preview(self):
preview_pixbuf = self.get_canvas_screenshot()
if preview_pixbuf is None:
@@ -341,6 +359,10 @@ class Activity(Window, gtk.Container):
def save(self):
"""Request that the activity is saved to the Journal."""
+
+ if self._updating_jobject:
+ return
+
#self.metadata['buddies'] = self._get_buddies()
if self._preview is None:
self.metadata['preview'] = ''
@@ -356,6 +378,7 @@ class Activity(Window, gtk.Container):
self._jobject.file_path = file_path
except NotImplementedError:
pass
+ self._updating_jobject = True
datastore.write(self._jobject,
reply_handler=self._internal_save_cb,
error_handler=self._internal_save_error_cb)
@@ -406,6 +429,8 @@ class Activity(Window, gtk.Container):
return True
def close(self):
+ self._closing = True
+
if self._bus:
del self._bus
self._bus = None
@@ -414,13 +439,13 @@ class Activity(Window, gtk.Container):
self._preview = self._get_preview()
self.save()
-
- if self._jobject:
- if self._owns_file and os.path.isfile(self._jobject.file_path):
- os.remove(self._jobject.file_path)
- self._owns_file = False
- self._jobject.destroy()
- self._jobject = None
+
+ def destroy(self):
+ if self._updating_jobject:
+ # Delay destruction
+ self.hide()
+ else:
+ Window.destroy(self)
def get_metadata(self):
if self._jobject: