Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/bin/sugar-activity
blob: 31c48d07641ba0b7a755fef4d08a3866d5b3a47c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#!/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.activity import ActivityRegistry
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:
    registry = ActivityRegistry()
    activities = registry.get_activities_for_name(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)

handler = activityfactory.create(activity_info.service_name)
handler.connect('success', _success_cb, name != None)
handler.connect('error', _error_cb)

gtk.main()