Add bundle removing methods/signals to the activity registry, and use them

This commit is contained in:
Dan Winship
2007-10-04 15:59:23 -04:00
parent 5b05668032
commit 2bcbde6e44
6 changed files with 71 additions and 5 deletions
+18
View File
@@ -32,6 +32,7 @@ class ActivityRegistry(dbus.service.Object):
bundle_registry = bundleregistry.get_registry()
bundle_registry.connect('bundle-added', self._bundle_added_cb)
bundle_registry.connect('bundle-removed', self._bundle_removed_cb)
@dbus.service.method(_ACTIVITY_REGISTRY_IFACE,
in_signature='s', out_signature='b')
@@ -48,6 +49,16 @@ class ActivityRegistry(dbus.service.Object):
registry = bundleregistry.get_registry()
return registry.add_bundle(bundle_path)
@dbus.service.method(_ACTIVITY_REGISTRY_IFACE,
in_signature='s', out_signature='b')
def RemoveBundle(self, bundle_path):
'''Unregister the activity bundle with the global registry
bundle_path -- path to the activity bundle root directory
'''
registry = bundleregistry.get_registry()
return registry.remove_bundle(bundle_path)
@dbus.service.method(_ACTIVITY_REGISTRY_IFACE,
in_signature='', out_signature='aa{sv}')
def GetActivities(self):
@@ -94,6 +105,10 @@ class ActivityRegistry(dbus.service.Object):
def ActivityAdded(self, activity_info):
pass
@dbus.service.signal(_ACTIVITY_REGISTRY_IFACE, signature='a{sv}')
def ActivityRemoved(self, activity_info):
pass
def _bundle_to_dict(self, bundle):
return {'name': bundle.get_name(),
'icon': bundle.get_icon(),
@@ -104,6 +119,9 @@ class ActivityRegistry(dbus.service.Object):
def _bundle_added_cb(self, bundle_registry, bundle):
self.ActivityAdded(self._bundle_to_dict(bundle))
def _bundle_removed_cb(self, bundle_registry, bundle):
self.ActivityRemoved(self._bundle_to_dict(bundle))
_instance = None
def get_instance():
+15 -1
View File
@@ -73,12 +73,17 @@ class _ServiceManager(object):
util.write_service(bundle.get_service_name(),
bundle.get_command(), self._path)
def remove(self, bundle):
util.delete_service(bundle.get_service_name(), self._path)
class BundleRegistry(gobject.GObject):
"""Service that tracks the available activity bundles"""
__gsignals__ = {
'bundle-added': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
([gobject.TYPE_PYOBJECT]))
([gobject.TYPE_PYOBJECT])),
'bundle-removed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
([gobject.TYPE_PYOBJECT]))
}
def __init__(self):
@@ -133,6 +138,15 @@ class BundleRegistry(gobject.GObject):
self.emit('bundle-added', bundle)
return True
def remove_bundle(self, bundle_path):
for bundle in self._bundles:
if bundle.get_path() == bundle_path:
self._bundles.remove(bundle)
self._service_manager.remove(bundle)
self.emit('bundle-removed', bundle)
return True
return False
def get_activities_for_type(self, mime_type):
result = []
for bundle in self._bundles: