Add bundle removing methods/signals to the activity registry, and use them
This commit is contained in:
@@ -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():
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user