81 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env python
 | |
| 
 | |
| # Copyright (C) 2006, 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 sys
 | |
| import os
 | |
| from ConfigParser import ConfigParser
 | |
| 
 | |
| from sugar import env
 | |
| 
 | |
| # Setup the environment so that we run inside the Sugar shell
 | |
| cp = ConfigParser()
 | |
| cp.read([env.get_profile_path("session.info")])
 | |
| os.environ['DBUS_SESSION_BUS_ADDRESS'] = cp.get('Session', 'dbus_address')
 | |
| os.environ['DISPLAY'] = cp.get('Session', 'display')
 | |
| del cp
 | |
| 
 | |
| import gtk
 | |
| import dbus
 | |
| import dbus.glib
 | |
| 
 | |
| from sugar.activity import bundleregistry
 | |
| from sugar.activity import activityfactory
 | |
| from sugar.activity import activityfactoryservice
 | |
| 
 | |
| def _success_cb(handler, exit):
 | |
|     if exit:
 | |
|         gtk.main_quit()
 | |
| 
 | |
| def _error_cb(handler, err):
 | |
|     print err
 | |
|     gtk.main_quit()
 | |
| 
 | |
| def print_help(self):
 | |
|     sys.exit(0)
 | |
| 
 | |
| bundle = None
 | |
| 
 | |
| if len(sys.argv) > 1:
 | |
|     registry = bundleregistry.get_registry()
 | |
|     bundle = registry.find_bundle(sys.argv[1])
 | |
| 
 | |
| if bundle == None:
 | |
|     print 'Usage:\n\n' \
 | |
|           'sugar-activity [bundle]\n\n' \
 | |
|           'Bundle can be a part of the service name or of bundle name.'
 | |
|     sys.exit(0)
 | |
| 
 | |
| bus = dbus.SessionBus()
 | |
| bus_object = bus.get_object('org.freedesktop.DBus', '/org/freedesktop/DBus')
 | |
| try:
 | |
|     name = bus_object.GetNameOwner(
 | |
|         bundle.get_service_name(), dbus_interface='org.freedesktop.DBus')
 | |
| except  dbus.DBusException:
 | |
|     name = None
 | |
| 
 | |
| if name:
 | |
|     print '%s is already running, creating a new instance.' % bundle.get_service_name()
 | |
| else:
 | |
|     activityfactoryservice.run(bundle.get_path())
 | |
| 
 | |
| handler = activityfactory.create(bundle.get_service_name())
 | |
| handler.connect('success', _success_cb, name != None)
 | |
| handler.connect('error', _error_cb)
 | |
| 
 | |
| gtk.main()
 | 
