7 from dbus.mainloop.glib import DBusGMainLoop
8 from gi.repository import GObject
10 from onoff.common import ST_ACTIVE, ST_TRANSITION
12 class OnoffControl(dbus.service.Object):
13 domain = "de.subdivi.onoff"
14 path = "/de/subdivi/onoff"
16 def __init__(self, bus, num):
17 busname = dbus.service.BusName(self.domain, bus=bus)
18 dbus.service.Object.__init__(self, busname, "%s/%d" % (self.path, num))
20 self.curstate = 0 # empty bitmask
22 @dbus.service.signal(domain, signature="q")
23 def changestate(self, st):
24 print("emitting state %d" % st)
27 @dbus.service.method(domain, out_signature="q")
31 @dbus.service.method(domain, in_signature="q", out_signature="q")
32 def activatetime(self, duration):
33 print("called with duration %d" % duration)
34 GObject.timeout_add(duration * 1000, self.unuse)
37 @dbus.service.method(domain, in_signature="hq", out_signature="q")
38 def activatefd(self, fd, duration):
40 print("called with fd %d and duration %d" % (fd, duration))
42 print("fd %d completed" % fd)
44 GObject.timeout_add(duration * 1000, self.unuse)
46 GObject.io_add_watch(fd, GObject.IO_HUP|GObject.IO_ERR, callback)
51 if self.usecount <= 1:
52 self.changestate(ST_ACTIVE|ST_TRANSITION)
54 self.changestate(ST_ACTIVE)
55 GObject.timeout_add(200, finish)
63 print("%d users left" % self.usecount)
68 DBusGMainLoop(set_as_default=True)
69 bus = dbus.SessionBus()
71 GObject.MainLoop().run()
73 if __name__ == "__main__":