~ubuntu-branches/ubuntu/hardy/screenlets/hardy-backports

« back to all changes in this revision

Viewing changes to src/share/screenlets-manager/screenlets-daemon.py

  • Committer: Bazaar Package Importer
  • Author(s): Julien Lavergne
  • Date: 2007-10-19 16:52:50 UTC
  • Revision ID: james.westby@ubuntu.com-20071019165250-rzvyfmphfsbl6kip
Tags: upstream-0.0.10
ImportĀ upstreamĀ versionĀ 0.0.10

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/env python
 
2
 
 
3
# ScreenletsDaemon - (c) RYX (Rico Pfaus) 2007
 
4
#
 
5
# + INFO:
 
6
# This is a background daemon that keeps track of opened screenlets. The
 
7
# screenlets.session.ScreenletSession currently (ab)uses this as a workaround
 
8
# for the incomplete pyinotify-support in common distros.
 
9
#
 
10
# + TODO:
 
11
# - use a filewatch on '/tmp/screenlets/screenlets.running' instead of 
 
12
#   requring screenlets to register themselves with the daemon??
 
13
#
 
14
 
 
15
import dbus
 
16
import dbus.service
 
17
if getattr(dbus, 'version', (0,0,0)) >= (0,41,0):
 
18
        import dbus.glib
 
19
import gobject
 
20
 
 
21
import screenlets
 
22
from screenlets import utils
 
23
 
 
24
SLD_BUS         = 'org.screenlets.ScreenletsDaemon'
 
25
SLD_PATH        = '/org/screenlets/ScreenletsDaemon'
 
26
SLD_IFACE       = 'org.screenlets.ScreenletsDaemon'
 
27
 
 
28
 
 
29
class ScreenletsDaemon (dbus.service.Object):
 
30
        """A simple backend class where screenlets register and unregister. It
 
31
        offers functions to keep track of currently opened screenlets."""
 
32
        
 
33
        def __init__ (self):
 
34
                # create bus, call super
 
35
                session_bus = dbus.SessionBus()
 
36
                bus_name = dbus.service.BusName(SLD_BUS, bus=session_bus)
 
37
                dbus.service.Object.__init__(self, bus_name, SLD_PATH)
 
38
                # init properties
 
39
                self.running_screenlets = []
 
40
                # get list of currently open screenlets from system
 
41
                running = utils.list_running_screenlets()
 
42
                if running:
 
43
                        self.running_screenlets = running
 
44
        
 
45
        @dbus.service.method(SLD_IFACE)
 
46
        def get_running_screenlets (self):
 
47
                """Get a list of all currently running screenlets."""
 
48
                return self.running_screenlets
 
49
        
 
50
        @dbus.service.method(SLD_IFACE)
 
51
        def register_screenlet (self, name):
 
52
                """Register the screenlet with the given name as running."""
 
53
                self.running_screenlets.append(name)
 
54
                self.screenlet_registered(name)         # send signal
 
55
                print "ScreenletsDaemon: registered %s" % name
 
56
        
 
57
        @dbus.service.method(SLD_IFACE)
 
58
        def unregister_screenlet (self, name):
 
59
                """Unregister the screenlet with the given name from the list."""
 
60
                if self.running_screenlets.count(name):
 
61
                        self.running_screenlets.remove(name)
 
62
                        self.screenlet_unregistered(name)               # send signal
 
63
                        print "screenletsDaemon: unregistered %s" % name
 
64
        
 
65
        @dbus.service.signal(SLD_IFACE)
 
66
        def screenlet_registered (self, name):
 
67
                """Send the 'register'-signal over DBus."""
 
68
                pass
 
69
        
 
70
        @dbus.service.signal(SLD_IFACE)
 
71
        def screenlet_unregistered (self, name):
 
72
                """Send the 'unregister'-signal over DBus."""
 
73
                pass
 
74
 
 
75
 
 
76
if __name__ == '__main__':
 
77
        # check for running daemon
 
78
        """import os
 
79
        proc = os.popen("ps axo \"%p,%a\" | grep \"screenlets-daemon.py\" | grep -v grep|cut -d',' -f1").read()
 
80
        procs = proc.split('\n')
 
81
        if len(procs) > 2:
 
82
                pid = int(procs[0].strip())
 
83
                os.kill(pid, 0)
 
84
        else:
 
85
                print "no daemon"
 
86
        import sys
 
87
        sys.exit(1)"""
 
88
        # create new daemon
 
89
        daemon = ScreenletsDaemon()
 
90
        print 'ScreenletsDaemon running ...'
 
91
        # and start mainloop
 
92
        try:
 
93
                # start mainloop
 
94
                loop = gobject.MainLoop()
 
95
                loop.run()
 
96
        except KeyboardInterrupt:
 
97
                # notify when daemon is closed
 
98
                #service.notify('Screenlets-backend has been shut down .... ', 5000)
 
99
                print 'ScreenletsDaemon has been shut down ...'
 
100
        except Exception, ex:
 
101
                print "Exception in ScreenletsDaemon: %s" % ex
 
102
 
 
103