summaryrefslogtreecommitdiff
path: root/python
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
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')
-rw-r--r--python/mygetopt.py48
-rw-r--r--python/reserve_audio.py63
2 files changed, 111 insertions, 0 deletions
diff --git a/python/mygetopt.py b/python/mygetopt.py
new file mode 100644
index 0000000..5ed2811
--- /dev/null
+++ b/python/mygetopt.py
@@ -0,0 +1,48 @@
+#!/usr/bin/env python
+
+import getopt
+
+def my_getopt(args, shortopts, longopts = []):
+ """getopt(args, options[, long_options]) -> opts, args
+
+ Parses command line options and parameter list. args is the
+ argument list to be parsed, without the leading reference to the
+ running program. Typically, this means "sys.argv[1:]". shortopts
+ is the string of option letters that the script wants to
+ recognize, with options that require an argument followed by a
+ colon (i.e., the same format that Unix getopt() uses). If
+ specified, longopts is a list of strings with the names of the
+ long options which should be supported. The leading '--'
+ characters should not be included in the option name. Options
+ which require an argument should be followed by an equal sign
+ ('=').
+
+ The return value consists of two elements: the first is a list of
+ (option, value) pairs; the second is the list of program arguments
+ left after the option list was stripped (this is a trailing slice
+ of the first argument). Each option-and-value pair returned has
+ the option as its first element, prefixed with a hyphen (e.g.,
+ '-x'), and the option argument as its second element, or an empty
+ string if the option has no argument. The options occur in the
+ list in the same order in which they were found, thus allowing
+ multiple occurrences. Long and short options may be mixed.
+
+ """
+
+ opts = []
+ if type(longopts) == type(""):
+ longopts = [longopts]
+ else:
+ longopts = list(longopts)
+ if args and args[0].startswith('-') and args[0] != '-':
+ if args[0] == '--':
+ args = args[1:]
+ if args[0].startswith('--'):
+ opts, args = getopt.do_longs(opts, args[0][2:], longopts, args[1:])
+ else:
+ opts, args = getopt.do_shorts(opts, args[0][1:], shortopts, args[1:])
+
+ return opts, args
+ else:
+ return None, args
+
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()
+
+