#!/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 import gtk import dbus import dbus.glib from sugar.activity import bundleregistry from sugar.activity import activityfactory from sugar.activity import activityfactoryservice from sugar import env def _setup_bus_address(): '''Use the bus address of the running Sugar''' bus_file = os.path.join(env.get_profile_path(), "session_bus_address") f = open(bus_file, "r") bus_name = f.read() f.close() os.environ['DBUS_SESSION_BUS_ADDRESS'] = bus_name 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) _setup_bus_address() 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.' % 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()