diff options
author | torben <torben@0c269be4-1314-0410-8aa9-9f06e86f4224> | 2011-05-29 00:47:39 +0000 |
---|---|---|
committer | torben <torben@0c269be4-1314-0410-8aa9-9f06e86f4224> | 2011-05-29 00:47:39 +0000 |
commit | 75664ed224c962255d5a89598095cee926823771 (patch) | |
tree | bedf043a4b2f18cb784fa00db1093ed199e7bd15 /python/reserve_audio.py | |
parent | 45d20150768bc3aeb74f32c64b95286b55699623 (diff) | |
download | jack1-75664ed224c962255d5a89598095cee926823771.tar.gz |
[python] add mygetopt.py and the current reserve_audio code
git-svn-id: svn+ssh://jackaudio.org/trunk/jack@4441 0c269be4-1314-0410-8aa9-9f06e86f4224
Diffstat (limited to 'python/reserve_audio.py')
-rw-r--r-- | python/reserve_audio.py | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/python/reserve_audio.py b/python/reserve_audio.py new file mode 100644 index 0000000..5096600 --- /dev/null +++ b/python/reserve_audio.py @@ -0,0 +1,63 @@ + +import dbus.service +import gobject +import dbus.mainloop.glib + +rr = None + +class reservation_t( dbus.service.Object ): + def __init__( self, device_name, prio, override_cb=None ): + + self.dev_name = device_name + self.prio = prio + self.override_cb = override_cb + + self.bus = dbus.SessionBus() + + dbus.service.Object.__init__( self, None, + "/org/freedesktop/ReserveDevice1/" + self.dev_name, + dbus.service.BusName( "org.freedesktop.ReserveDevice1." + self.dev_name, bus=self.bus, allow_replacement=True, replace_existing=True, do_not_queue=True ) ) + + @dbus.service.method( dbus_interface="org.freedesktop.ReserveDevice1", in_signature="i", out_signature="b" ) + def RequestRelease( self, prio ): + if prio < self.prio: + return False + + if self.override_cb: + if self.override_cb( self.device_name ): + self.connection.release_name( 'org.freedesktop.ReserveDevice1.' + self.dev_name ) + return True + + return False + + + +def reserve_dev( dev_name, prio, override_cb ): + global rr + try: + session_bus = dbus.SessionBus() + except Exception: + return + + try: + r_proxy = session_bus.get_object( "org.freedesktop.ReserveDevice1." + dev_name, "/org/freedesktop/ReserveDevice1/" + dev_name ) + r_iface = dbus.Interface( r_proxy, "org.freedesktop.ReserveDevice1" ) + except Exception: + rr = reservation_t( dev_name, prio, override_cb ) + return + + if not r_iface.RequestRelease( prio ): + raise Exception + + rr = reservation_t( dev_name, prio, override_cb ) + + + +dbus.mainloop.glib.threads_init() +dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) + +def run_main(): + loop = gobject.MainLoop() + loop.run() + + |