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
	 Marco Pesenti Gritti
						Marco Pesenti Gritti