#!/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()