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
|
||||
|
||||
from sugar.presence import PresenceService
|
||||
from sugar.activity.bundleregistry import BundleRegistry
|
||||
from sugar import env
|
||||
from model.Friends import Friends
|
||||
from model.MeshModel import MeshModel
|
||||
from model.Owner import ShellOwner
|
||||
@ -28,9 +30,16 @@ class ShellModel:
|
||||
|
||||
self._owner = ShellOwner()
|
||||
self._owner.announce()
|
||||
|
||||
self._friends = Friends()
|
||||
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):
|
||||
return self._mesh
|
||||
|
||||
|
@ -55,14 +55,18 @@ class ActivitiesBox(hippo.CanvasBox):
|
||||
hippo.CanvasBox.__init__(self, orientation=hippo.ORIENTATION_HORIZONTAL)
|
||||
|
||||
self._shell = shell
|
||||
self._shell_model = self._shell.get_model()
|
||||
self._invite_to_item = {}
|
||||
self._invites = self._shell.get_model().get_invites()
|
||||
self._invites = self._shell_model.get_invites()
|
||||
|
||||
registry = conf.get_activity_registry()
|
||||
for activity in registry.list_activities():
|
||||
if activity.get_show_launcher():
|
||||
self.add_activity(activity)
|
||||
|
||||
for bundle in self._shell_model.get_bundle_registry():
|
||||
self.add_activity(bundle)
|
||||
|
||||
for invite in self._invites:
|
||||
self.add_invite(invite)
|
||||
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.reverse()
|
||||
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):
|
||||
"""Get the activity service name"""
|
||||
return self._id
|
||||
return self._service_name
|
||||
|
||||
def get_icon(self):
|
||||
"""Get the activity icon name"""
|
||||
|
@ -1,3 +1,5 @@
|
||||
import os
|
||||
|
||||
from sugar.activity.bundle import Bundle
|
||||
|
||||
class BundleRegistry:
|
||||
@ -14,19 +16,23 @@ class BundleRegistry:
|
||||
else:
|
||||
return None
|
||||
|
||||
def append_search_path(self, path):
|
||||
"""Append a directory to the bundles search path"""
|
||||
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()
|
||||
return self._bundles.values().__iter__()
|
||||
|
||||
def _scan_directory(self, path):
|
||||
for bundle_dir in os.listdir(path):
|
||||
if os.path.isdir(bundle_dir):
|
||||
info_path = os.path.join(bundle_dir, activity_info)
|
||||
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_dir):
|
||||
info_path = os.path.join(bundle_dir, 'activity.info')
|
||||
if os.path.isfile(info_path):
|
||||
bundle = Bundle(info_path)
|
||||
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():
|
||||
return sugar_dbus_config
|
||||
|
||||
def get_bundles_path():
|
||||
return os.path.join(get_profile_path(), 'bundles')
|
||||
|
Loading…
Reference in New Issue
Block a user