83 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			83 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
 | 
						|
 | 
						|
import pygtk
 | 
						|
pygtk.require('2.0')
 | 
						|
 | 
						|
from sugar import activity
 | 
						|
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 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)
 | 
						|
activity_info = None
 | 
						|
 | 
						|
if len(sys.argv) > 1:
 | 
						|
    activities = activity.get_registry().find_activity(sys.argv[1])
 | 
						|
    if len(activities) > 0:
 | 
						|
        activity_info = activities[0]
 | 
						|
 | 
						|
if activity_info == 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(
 | 
						|
        activity_info.service_name, dbus_interface='org.freedesktop.DBus')
 | 
						|
except  dbus.DBusException:
 | 
						|
    name = None
 | 
						|
 | 
						|
if name:
 | 
						|
    service_name = activity_info.service_name
 | 
						|
    print '%s is already running, creating a new instance.' % service_name
 | 
						|
else:
 | 
						|
    activityfactoryservice.run(activity_info.path)
 | 
						|
 | 
						|
activityfactory.create(activity_info.service_name)
 | 
						|
 | 
						|
gtk.main()
 |