Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/bin/sugar-activity
diff options
context:
space:
mode:
Diffstat (limited to 'bin/sugar-activity')
-rwxr-xr-xbin/sugar-activity80
1 files changed, 80 insertions, 0 deletions
diff --git a/bin/sugar-activity b/bin/sugar-activity
new file mode 100755
index 0000000..1b85980
--- /dev/null
+++ b/bin/sugar-activity
@@ -0,0 +1,80 @@
+#!/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()