X-Git-Url: https://git.linta.de/?p=~helmut%2Fonoff.git;a=blobdiff_plain;f=dbus_service.py;h=94ff9b5d45b6b63ecbea853672538b820c3bc7a7;hp=7fbdf2991e17734d2f4e00d7191772b1afef73c7;hb=296ba160a075b2da20ba4ec5a1d50cdccd1bec38;hpb=6a715d2d8eb6ec53e24f2448e74d548c4ee74ea5 diff --git a/dbus_service.py b/dbus_service.py index 7fbdf29..94ff9b5 100755 --- a/dbus_service.py +++ b/dbus_service.py @@ -1,70 +1,31 @@ #!/usr/bin/env python +""" +A dbus service example currently providing a device called redshift, that runs +redshift whenever it is not activated. This could be useful to temporarily +disable redshift e.g. while watching a movie. +""" -import os +import logging import dbus import dbus.service from dbus.mainloop.glib import DBusGMainLoop -import gobject - -from onoff.common import ST_ACTIVE, ST_TRANSITION - -class OnoffControl(dbus.service.Object): - domain = "de.subdivi.onoff" - path = "/de/subdivi/onoff" - - def __init__(self, bus, num): - busname = dbus.service.BusName(self.domain, bus=bus) - dbus.service.Object.__init__(self, busname, "%s/%d" % (self.path, num)) - self.usecount = 0 - self.curstate = 0 # empty bitmask - - @dbus.service.signal(domain, signature="q") - def state(self, st): - print("emitting state %d" % st) - self.curstate = st - - @dbus.service.method(domain, in_signature="q", out_signature="q") - def activatetime(self, duration): - print("called with duration %d" % duration) - self.usecount += 1 - gobject.timeout_add(duration * 1000, self.unuse) - if self.usecount > 1: - return self.curstate - self.state(ST_TRANSITION) - def finish(): - self.state(ST_ACTIVE) - gobject.timeout_add(200, finish) - return self.curstate - - @dbus.service.method(domain, in_signature="hq", out_signature="q") - def activatefd(self, fd, duration): - self.usecount += 1 - fd = fd.take() - print("called with fd %d and duration %d" % (fd, duration)) - def callback(fd, _): - print("fd %d completed" % fd) - os.close(fd) - gobject.timeout_add(duration * 1000, self.unuse) - return False - gobject.io_add_watch(fd, gobject.IO_HUP|gobject.IO_ERR, callback) - self.state(ST_ACTIVE) - return self.curstate - - def unuse(self): - self.usecount -= 1 - if not self.usecount: - self.state(0) - else: - print("%d users left" % self.usecount) - return False +from gi.repository import GObject +import onoff.common +import onoff.dbusutils +import onoff.process def main(): + logging.basicConfig() + logging.getLogger().setLevel(logging.DEBUG) DBusGMainLoop(set_as_default=True) bus = dbus.SessionBus() - OnoffControl(bus, 5) - gobject.MainLoop().run() + dev = onoff.process.OnoffProcess(["redshift"], 3) + dev = onoff.common.InvertedDevice(dev) + dev = onoff.common.ThrottledDevice(dev, 1, 5) + onoff.dbusutils.OnoffControl(bus, "redshift", dev) + GObject.MainLoop().run() if __name__ == "__main__": main()