summaryrefslogtreecommitdiff
path: root/python/reserve_audio.py
diff options
context:
space:
mode:
authortorben <torben@0c269be4-1314-0410-8aa9-9f06e86f4224>2011-05-29 00:47:39 +0000
committertorben <torben@0c269be4-1314-0410-8aa9-9f06e86f4224>2011-05-29 00:47:39 +0000
commit75664ed224c962255d5a89598095cee926823771 (patch)
treebedf043a4b2f18cb784fa00db1093ed199e7bd15 /python/reserve_audio.py
parent45d20150768bc3aeb74f32c64b95286b55699623 (diff)
downloadjack1-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.py63
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()
+
+