More work on bundles support
This commit is contained in:
parent
87274fd89f
commit
d150ac40cc
@ -15,6 +15,8 @@
|
|||||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
from sugar.presence import PresenceService
|
from sugar.presence import PresenceService
|
||||||
|
from sugar.activity.bundleregistry import BundleRegistry
|
||||||
|
from sugar import env
|
||||||
from model.Friends import Friends
|
from model.Friends import Friends
|
||||||
from model.MeshModel import MeshModel
|
from model.MeshModel import MeshModel
|
||||||
from model.Owner import ShellOwner
|
from model.Owner import ShellOwner
|
||||||
@ -28,9 +30,16 @@ class ShellModel:
|
|||||||
|
|
||||||
self._owner = ShellOwner()
|
self._owner = ShellOwner()
|
||||||
self._owner.announce()
|
self._owner.announce()
|
||||||
|
|
||||||
self._friends = Friends()
|
self._friends = Friends()
|
||||||
self._mesh = MeshModel()
|
self._mesh = MeshModel()
|
||||||
|
|
||||||
|
self._bundle_registry = BundleRegistry()
|
||||||
|
self._bundle_registry.add_search_path(env.get_bundles_path())
|
||||||
|
|
||||||
|
def get_bundle_registry(self):
|
||||||
|
return self._bundle_registry
|
||||||
|
|
||||||
def get_mesh(self):
|
def get_mesh(self):
|
||||||
return self._mesh
|
return self._mesh
|
||||||
|
|
||||||
|
@ -55,14 +55,18 @@ class ActivitiesBox(hippo.CanvasBox):
|
|||||||
hippo.CanvasBox.__init__(self, orientation=hippo.ORIENTATION_HORIZONTAL)
|
hippo.CanvasBox.__init__(self, orientation=hippo.ORIENTATION_HORIZONTAL)
|
||||||
|
|
||||||
self._shell = shell
|
self._shell = shell
|
||||||
|
self._shell_model = self._shell.get_model()
|
||||||
self._invite_to_item = {}
|
self._invite_to_item = {}
|
||||||
self._invites = self._shell.get_model().get_invites()
|
self._invites = self._shell_model.get_invites()
|
||||||
|
|
||||||
registry = conf.get_activity_registry()
|
registry = conf.get_activity_registry()
|
||||||
for activity in registry.list_activities():
|
for activity in registry.list_activities():
|
||||||
if activity.get_show_launcher():
|
if activity.get_show_launcher():
|
||||||
self.add_activity(activity)
|
self.add_activity(activity)
|
||||||
|
|
||||||
|
for bundle in self._shell_model.get_bundle_registry():
|
||||||
|
self.add_activity(bundle)
|
||||||
|
|
||||||
for invite in self._invites:
|
for invite in self._invites:
|
||||||
self.add_invite(invite)
|
self.add_invite(invite)
|
||||||
self._invites.connect('invite-added', self._invite_added_cb)
|
self._invites.connect('invite-added', self._invite_added_cb)
|
||||||
|
@ -16,10 +16,3 @@ def get_default_type(activity_type):
|
|||||||
splitted_id = activity_type.split('.')
|
splitted_id = activity_type.split('.')
|
||||||
splitted_id.reverse()
|
splitted_id.reverse()
|
||||||
return '_' + '_'.join(splitted_id) + '._udp'
|
return '_' + '_'.join(splitted_id) + '._udp'
|
||||||
|
|
||||||
from sugar.activity.bundleregistry import BundleRegistry
|
|
||||||
|
|
||||||
_bundle_registry = BundleRegistry()
|
|
||||||
|
|
||||||
def get_bundle_registry():
|
|
||||||
return _bundle_registry
|
|
||||||
|
@ -41,7 +41,7 @@ class Bundle:
|
|||||||
|
|
||||||
def get_service_name(self):
|
def get_service_name(self):
|
||||||
"""Get the activity service name"""
|
"""Get the activity service name"""
|
||||||
return self._id
|
return self._service_name
|
||||||
|
|
||||||
def get_icon(self):
|
def get_icon(self):
|
||||||
"""Get the activity icon name"""
|
"""Get the activity icon name"""
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
import os
|
||||||
|
|
||||||
from sugar.activity.bundle import Bundle
|
from sugar.activity.bundle import Bundle
|
||||||
|
|
||||||
class BundleRegistry:
|
class BundleRegistry:
|
||||||
@ -14,19 +16,23 @@ class BundleRegistry:
|
|||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def append_search_path(self, path):
|
def add_search_path(self, path):
|
||||||
"""Append a directory to the bundles search path"""
|
"""Add a directory to the bundles search path"""
|
||||||
self._search_path.append(path)
|
self._search_path.append(path)
|
||||||
self._scan_directory(path)
|
self._scan_directory(path)
|
||||||
|
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
return self._bundles.values()
|
return self._bundles.values().__iter__()
|
||||||
|
|
||||||
def _scan_directory(self, path):
|
def _scan_directory(self, path):
|
||||||
for bundle_dir in os.listdir(path):
|
for f in os.listdir(path):
|
||||||
if os.path.isdir(bundle_dir):
|
bundle_dir = os.path.join(path, f)
|
||||||
info_path = os.path.join(bundle_dir, activity_info)
|
if os.path.isdir(bundle_dir) and bundle_dir.endswith('.activity'):
|
||||||
|
self._add_bundle(bundle_dir)
|
||||||
|
|
||||||
|
def _add_bundle(self, bundle_dir):
|
||||||
|
info_path = os.path.join(bundle_dir, 'activity.info')
|
||||||
if os.path.isfile(info_path):
|
if os.path.isfile(info_path):
|
||||||
bundle = Bundle(info_path)
|
bundle = Bundle(info_path)
|
||||||
if bundle.is_valid():
|
if bundle.is_valid():
|
||||||
self._bundles.append(bundle)
|
self._bundles[bundle.get_service_name()] = bundle
|
||||||
|
@ -53,3 +53,6 @@ def get_services_dir():
|
|||||||
|
|
||||||
def get_dbus_config():
|
def get_dbus_config():
|
||||||
return sugar_dbus_config
|
return sugar_dbus_config
|
||||||
|
|
||||||
|
def get_bundles_path():
|
||||||
|
return os.path.join(get_profile_path(), 'bundles')
|
||||||
|
Loading…
Reference in New Issue
Block a user