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 | |
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')
-rw-r--r-- | python/mygetopt.py | 48 | ||||
-rw-r--r-- | python/reserve_audio.py | 63 |
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() + + |