Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sugar/activity
diff options
context:
space:
mode:
authorMorgan Collett <morgan.collett@gmail.com>2007-07-11 08:42:27 (GMT)
committer Morgan Collett <morgan.collett@gmail.com>2007-07-11 08:42:27 (GMT)
commit8fab49b64ead8fa9104b7df1501cde2fe40bc8b4 (patch)
tree20aaff0c95262ca0a3c6d613014de1d950e59feb /sugar/activity
parent66983f0d24b71a2798018873f5c509def40f0e0e (diff)
parente4bce9271a2db597adb50fce182afe765ac97fa6 (diff)
Merge branch 'master' of git+ssh://dev.laptop.org/git/sugar
Diffstat (limited to 'sugar/activity')
-rw-r--r--sugar/activity/activity.py24
-rw-r--r--sugar/activity/bundlebuilder.py16
-rw-r--r--sugar/activity/registry.py28
3 files changed, 44 insertions, 24 deletions
diff --git a/sugar/activity/activity.py b/sugar/activity/activity.py
index 8a97199..3202703 100644
--- a/sugar/activity/activity.py
+++ b/sugar/activity/activity.py
@@ -64,11 +64,11 @@ class ActivityToolbar(gtk.Toolbar):
self.insert(separator, -1)
separator.show()
- self.save = ToolButton('document-save')
- self.save.set_tooltip(_('Save'))
- self.save.connect('clicked', self._save_clicked_cb)
- self.insert(self.save, -1)
- self.save.show()
+ self.keep = ToolButton('document-save')
+ self.keep.set_tooltip(_('Keep'))
+ self.keep.connect('clicked', self._keep_clicked_cb)
+ self.insert(self.keep, -1)
+ self.keep.show()
self.share = ToolButton('stock-share-mesh')
self.share.set_tooltip(_('Share'))
@@ -83,21 +83,21 @@ class ActivityToolbar(gtk.Toolbar):
self.insert(separator, -1)
separator.show()
- self.close = ToolButton('window-close')
- self.close.set_tooltip(_('Close'))
- self.close.connect('clicked', self._close_clicked_cb)
- self.insert(self.close, -1)
- self.close.show()
+ self.stop = ToolButton('activity-stop')
+ self.stop.set_tooltip(_('Stop'))
+ self.stop.connect('clicked', self._stop_clicked_cb)
+ self.insert(self.stop, -1)
+ self.stop.show()
self._update_title_sid = None
def _share_clicked_cb(self, button):
self._activity.share()
- def _save_clicked_cb(self, button):
+ def _keep_clicked_cb(self, button):
self._activity.save()
- def _close_clicked_cb(self, button):
+ def _stop_clicked_cb(self, button):
self._activity.close()
self._activity.destroy()
diff --git a/sugar/activity/bundlebuilder.py b/sugar/activity/bundlebuilder.py
index a82d744..8e8c49d 100644
--- a/sugar/activity/bundlebuilder.py
+++ b/sugar/activity/bundlebuilder.py
@@ -50,26 +50,22 @@ class _DefaultFileList(list):
self.append(os.path.join('activity', name))
self.append('activity/activity.info')
- self.append('setup.py')
if os.path.isfile(_get_source_path('NEWS')):
self.append('NEWS')
-class _ManifestFileList(list):
- def __init__(self, manifest=None):
+class _ManifestFileList(_DefaultFileList):
+ def __init__(self, manifest):
+ _DefaultFileList.__init__(self)
self.append(manifest)
f = open(manifest,'r')
for line in f.readlines():
stripped_line = line.strip()
- if stripped_line:
+ if stripped_line and not stripped_line in self:
self.append(stripped_line)
f.close()
- defaults = _DefaultFileList()
- for path in defaults:
- self.append(path)
-
def _extract_bundle(source_file, dest_dir):
if not os.path.exists(dest_dir):
os.mkdir(dest_dir)
@@ -270,8 +266,8 @@ def cmd_release(bundle_name, manifest):
sugar_news += '%s - %d\n\n' % (bundle_name, version)
f = open(news_path,'r')
- for line in f.readline():
- if len(line) > 0:
+ for line in f.readlines():
+ if len(line.strip()) > 0:
sugar_news += line
else:
break
diff --git a/sugar/activity/registry.py b/sugar/activity/registry.py
index 171f740..b19abee 100644
--- a/sugar/activity/registry.py
+++ b/sugar/activity/registry.py
@@ -15,6 +15,8 @@
# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
+import logging
+
import dbus
_SHELL_SERVICE = "org.laptop.Shell"
@@ -39,6 +41,11 @@ class ActivityRegistry(object):
bus = dbus.SessionBus()
bus_object = bus.get_object(_SHELL_SERVICE, _SHELL_PATH)
self._registry = dbus.Interface(bus_object, _REGISTRY_IFACE)
+ self._registry.connect_to_signal('ActivityAdded', self._activity_added_cb)
+
+ # Two caches fo saving some travel across dbus.
+ self._service_name_to_activity_info = {}
+ self._mime_type_to_activities = {}
def _convert_info_list(self, info_list):
result = []
@@ -49,16 +56,33 @@ class ActivityRegistry(object):
return result
def get_activity(self, service_name):
+ if self._service_name_to_activity_info.has_key(service_name):
+ return self._service_name_to_activity_info[service_name]
+
info_dict = self._registry.GetActivity(service_name)
- return _activity_info_from_dict(info_dict)
+ activity_info = _activity_info_from_dict(info_dict)
+
+ self._service_name_to_activity_info[service_name] = activity_info
+ return activity_info
def find_activity(self, name):
info_list = self._registry.FindActivity(name)
return self._convert_info_list(info_list)
def get_activities_for_type(self, mime_type):
+ if self._mime_type_to_activities.has_key(mime_type):
+ return self._mime_type_to_activities[mime_type]
+
info_list = self._registry.GetActivitiesForType(mime_type)
- return self._convert_info_list(info_list)
+ activities = self._convert_info_list(info_list)
+
+ self._mime_type_to_activities[mime_type] = activities
+ return activities
+
+ def _activity_added_cb(self, bundle):
+ logging.debug('ActivityRegistry._activity_added_cb: flushing caches')
+ self._service_name_to_activity_info.clear()
+ self._mime_type_to_activities.clear()
_registry = None