diff options
author | Tomeu Vizoso <tomeu@tomeuvizoso.net> | 2007-08-08 16:08:07 (GMT) |
---|---|---|
committer | Tomeu Vizoso <tomeu@tomeuvizoso.net> | 2007-08-08 16:08:07 (GMT) |
commit | fa8bcd2ba58fca8605bc2fea72478a23f9bd9998 (patch) | |
tree | 5a1f5702a5847b8f7cb80684d0c2dd9f92e9f13d /shell | |
parent | bfcab6b0b64d1b10d4010c34596e748f54335ba9 (diff) |
Move the activity register to the clipboard service.
Diffstat (limited to 'shell')
-rw-r--r-- | shell/model/Makefile.am | 1 | ||||
-rw-r--r-- | shell/model/bundleregistry.py | 118 | ||||
-rw-r--r-- | shell/shellservice.py | 69 |
3 files changed, 0 insertions, 188 deletions
diff --git a/shell/model/Makefile.am b/shell/model/Makefile.am index 486ad09..0b7d14c 100644 --- a/shell/model/Makefile.am +++ b/shell/model/Makefile.am @@ -4,7 +4,6 @@ sugardir = $(pkgdatadir)/shell/model sugar_PYTHON = \ __init__.py \ accesspointmodel.py \ - bundleregistry.py \ BuddyModel.py \ Friends.py \ Invites.py \ diff --git a/shell/model/bundleregistry.py b/shell/model/bundleregistry.py deleted file mode 100644 index bc8eec9..0000000 --- a/shell/model/bundleregistry.py +++ /dev/null @@ -1,118 +0,0 @@ -# Copyright (C) 2006-2007 Red Hat, Inc. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -import os - -import gobject - -from sugar.activity.bundle import Bundle -from sugar import env -from sugar import util - -# http://standards.freedesktop.org/basedir-spec/basedir-spec-0.6.html -def _get_data_dirs(): - if os.environ.has_key('XDG_DATA_DIRS'): - return os.environ['XDG_DATA_DIRS'].split(':') - else: - return [ '/usr/local/share/', '/usr/share/' ] - -class _ServiceManager(object): - """Internal class responsible for creating dbus service files - - DBUS services are defined in files which bind a service name - to the name of an executable which provides the service name. - - In Sugar, the service files are automatically generated from - the activity registry (by this class). When an activity's - dbus launch service is requested, dbus will launch the - specified executable in order to allow it to provide the - requested activity-launching service. - - In the case of activities which provide a "class", instead of - an "exec" attribute in their activity.info, the - sugar-activity-factory script is used with an appropriate - argument to service that bundle. - """ - SERVICE_DIRECTORY = '~/.local/share/dbus-1/services' - def __init__(self): - service_dir = os.path.expanduser(self.SERVICE_DIRECTORY) - if not os.path.isdir(service_dir): - os.makedirs(service_dir) - - self._path = service_dir - - def add(self, bundle): - util.write_service(bundle.get_service_name(), - bundle.get_exec(), 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])) - } - - def __init__(self): - gobject.GObject.__init__(self) - - self._bundles = {} - self._search_path = [] - self._service_manager = _ServiceManager() - - def get_bundle(self, service_name): - """Returns an bundle given his service name""" - if self._bundles.has_key(service_name): - return self._bundles[service_name] - else: - return None - - def add_search_path(self, path): - """Add a directory to the bundles search path""" - self._search_path.append(path) - self._scan_directory(path) - - def __iter__(self): - return self._bundles.values().__iter__() - - def _scan_directory(self, path): - if os.path.isdir(path): - for f in os.listdir(path): - bundle_dir = os.path.join(path, f) - if os.path.isdir(bundle_dir) and \ - bundle_dir.endswith('.activity'): - self.add_bundle(bundle_dir) - - def add_bundle(self, bundle_path): - bundle = Bundle(bundle_path) - if bundle.is_valid(): - self._bundles[bundle.get_service_name()] = bundle - self._service_manager.add(bundle) - self.emit('bundle-added', bundle) - return True - else: - return False - -def get_registry(): - return _bundle_registry - -_bundle_registry = BundleRegistry() - -for path in _get_data_dirs(): - bundles_path = os.path.join(path, 'activities') - _bundle_registry.add_search_path(bundles_path) - -_bundle_registry.add_search_path(env.get_user_activities_path()) diff --git a/shell/shellservice.py b/shell/shellservice.py index 5728e44..d577a44 100644 --- a/shell/shellservice.py +++ b/shell/shellservice.py @@ -17,10 +17,7 @@ """D-bus service providing access to the shell's functionality""" import dbus -from model import bundleregistry - _DBUS_SERVICE = "org.laptop.Shell" -_DBUS_ACTIVITY_REGISTRY_IFACE = "org.laptop.Shell.ActivityRegistry" _DBUS_SHELL_IFACE = "org.laptop.Shell" _DBUS_OWNER_IFACE = "org.laptop.Shell.Owner" _DBUS_PATH = "/org/laptop/Shell" @@ -56,9 +53,6 @@ class ShellService(dbus.service.Object): self._home_model.connect('active-activity-changed', self._cur_activity_changed_cb) - bundle_registry = bundleregistry.get_registry() - bundle_registry.connect('bundle-added', self._bundle_added_cb) - bus = dbus.SessionBus() bus_name = dbus.service.BusName(_DBUS_SERVICE, bus=bus) dbus.service.Object.__init__(self, bus_name, _DBUS_PATH) @@ -83,60 +77,6 @@ class ShellService(dbus.service.Object): def NotifyLaunchFailure(self, activity_id): self._shell.notify_launch_failure(activity_id) - @dbus.service.method(_DBUS_ACTIVITY_REGISTRY_IFACE, - in_signature="s", out_signature="b") - def AddBundle(self, bundle_path): - """Register the activity bundle with the global registry - - bundle_path -- path to the activity bundle's root directory, - that is, the directory with activity/activity.info as a - child of the directory. - - The bundleregistry.BundleRegistry is responsible for setting - up a set of d-bus service mappings for each available activity. - """ - registry = bundleregistry.get_registry() - return registry.add_bundle(bundle_path) - - @dbus.service.method(_DBUS_ACTIVITY_REGISTRY_IFACE, - in_signature="s", out_signature="a{sv}") - def GetActivity(self, service_name): - registry = bundleregistry.get_registry() - bundle = registry.get_bundle(service_name) - if not bundle: - return {} - - return self._bundle_to_dict(bundle) - - @dbus.service.method(_DBUS_ACTIVITY_REGISTRY_IFACE, - in_signature="s", out_signature="aa{sv}") - def FindActivity(self, name): - result = [] - key = name.lower() - - for bundle in bundleregistry.get_registry(): - name = bundle.get_name().lower() - service_name = bundle.get_service_name().lower() - if name.find(key) != -1 or service_name.find(key) != -1: - result.append(self._bundle_to_dict(bundle)) - - return result - - @dbus.service.method(_DBUS_ACTIVITY_REGISTRY_IFACE, - in_signature="s", out_signature="aa{sv}") - def GetActivitiesForType(self, mime_type): - result = [] - - for bundle in bundleregistry.get_registry(): - if bundle.get_mime_types() and mime_type in bundle.get_mime_types(): - result.append(self._bundle_to_dict(bundle)) - - return result - - @dbus.service.signal(_DBUS_ACTIVITY_REGISTRY_IFACE, signature="a{sv}") - def ActivityAdded(self, activity_info): - pass - @dbus.service.signal(_DBUS_OWNER_IFACE, signature="s") def ColorChanged(self, color): pass @@ -169,12 +109,3 @@ class ShellService(dbus.service.Object): if new_id: self.CurrentActivityChanged(new_id) - def _bundle_to_dict(self, bundle): - return {'name': bundle.get_name(), - 'icon': bundle.get_icon(), - 'service_name': bundle.get_service_name(), - 'path': bundle.get_path()} - - def _bundle_added_cb(self, bundle_registry, bundle): - self.ActivityAdded(self._bundle_to_dict(bundle)) - |