| 
									
										
										
										
											2006-08-09 02:02:34 +02:00
										 |  |  | import sys | 
					
						
							|  |  |  | import logging | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import dbus | 
					
						
							|  |  |  | import dbus.service | 
					
						
							|  |  |  | import gobject | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from sugar.presence.PresenceService import PresenceService | 
					
						
							| 
									
										
										
										
											2006-08-09 12:57:42 +02:00
										 |  |  | from sugar.activity import Activity | 
					
						
							| 
									
										
										
										
											2006-08-09 02:02:34 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | def get_path(activity_name): | 
					
						
							|  |  |  | 	"""Returns the activity path""" | 
					
						
							|  |  |  | 	return '/' + activity_name.replace('.', '/') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def _get_factory(activity_name): | 
					
						
							|  |  |  | 	"""Returns the activity factory""" | 
					
						
							|  |  |  | 	return activity_name + '.Factory' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ActivityFactory(dbus.service.Object): | 
					
						
							|  |  |  | 	"""Dbus service that takes care of creating new instances of an activity""" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-09-02 10:54:34 +02:00
										 |  |  | 	def __init__(self, activity_type, activity_class): | 
					
						
							|  |  |  | 		self._activity_type = activity_type | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-09 02:02:34 +02:00
										 |  |  | 		splitted_module = activity_class.rsplit('.', 1) | 
					
						
							|  |  |  | 		module_name = splitted_module[0] | 
					
						
							|  |  |  | 		class_name = splitted_module[1] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		module = __import__(module_name)		 | 
					
						
							|  |  |  | 		for comp in module_name.split('.')[1:]: | 
					
						
							|  |  |  | 			module = getattr(module, comp) | 
					
						
							| 
									
										
										
										
											2006-09-26 22:12:18 +02:00
										 |  |  | 		if hasattr(module, 'start'): | 
					
						
							|  |  |  | 			module.start() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-09 02:02:34 +02:00
										 |  |  | 		self._class = getattr(module, class_name) | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 		bus = dbus.SessionBus() | 
					
						
							| 
									
										
										
										
											2006-09-02 10:54:34 +02:00
										 |  |  | 		factory = _get_factory(activity_type) | 
					
						
							| 
									
										
										
										
											2006-08-09 02:02:34 +02:00
										 |  |  | 		bus_name = dbus.service.BusName(factory, bus = bus)  | 
					
						
							|  |  |  | 		dbus.service.Object.__init__(self, bus_name, get_path(factory)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	@dbus.service.method("com.redhat.Sugar.ActivityFactory") | 
					
						
							|  |  |  | 	def create(self): | 
					
						
							|  |  |  | 		activity = self._class() | 
					
						
							| 
									
										
										
										
											2006-09-02 10:54:34 +02:00
										 |  |  | 		activity.set_type(self._activity_type) | 
					
						
							| 
									
										
										
										
											2006-08-09 18:29:33 +02:00
										 |  |  | 		return activity.window.xid | 
					
						
							| 
									
										
										
										
											2006-08-09 02:02:34 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-09 12:57:42 +02:00
										 |  |  | def create(activity_name): | 
					
						
							| 
									
										
										
										
											2006-08-09 02:02:34 +02:00
										 |  |  | 	"""Create a new activity from his name.""" | 
					
						
							|  |  |  | 	bus = dbus.SessionBus() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	factory_name = _get_factory(activity_name) | 
					
						
							|  |  |  | 	factory_path = get_path(factory_name)  | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	proxy_obj = bus.get_object(factory_name, factory_path) | 
					
						
							|  |  |  | 	factory = dbus.Interface(proxy_obj, "com.redhat.Sugar.ActivityFactory") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-09 18:29:33 +02:00
										 |  |  | 	xid = factory.create() | 
					
						
							| 
									
										
										
										
											2006-08-09 12:57:42 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	bus = dbus.SessionBus() | 
					
						
							| 
									
										
										
										
											2006-08-09 18:29:33 +02:00
										 |  |  | 	proxy_obj = bus.get_object(Activity.get_service_name(xid), | 
					
						
							|  |  |  | 							   Activity.get_object_path(xid)) | 
					
						
							| 
									
										
										
										
											2006-08-09 12:57:42 +02:00
										 |  |  | 	activity = dbus.Interface(proxy_obj, Activity.ACTIVITY_INTERFACE) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return activity | 
					
						
							| 
									
										
										
										
											2006-08-09 02:02:34 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-09 13:01:47 +02:00
										 |  |  | def register_factory(name, activity_class): | 
					
						
							| 
									
										
										
										
											2006-08-09 02:02:34 +02:00
										 |  |  | 	"""Register the activity factory.""" | 
					
						
							| 
									
										
										
										
											2006-08-09 13:01:47 +02:00
										 |  |  | 	factory = ActivityFactory(name, activity_class) |