X-Git-Url: https://git.linta.de/?p=~helmut%2Fonoff.git;a=blobdiff_plain;f=dbus_client.py;h=fbaf33a26571c6d921450fd6a939ffbfe679e6ed;hp=a675eb7c936e09482efbc5ed19a124cacecd7bda;hb=ebb54f285c50e188cf3548de99072c0b082ed742;hpb=095d0243e517021355338e0e2e6fdd265a167b5a diff --git a/dbus_client.py b/dbus_client.py index a675eb7..fbaf33a 100755 --- a/dbus_client.py +++ b/dbus_client.py @@ -8,7 +8,6 @@ released. import argparse import os -import xml.parsers.expat from dbus.mainloop.glib import DBusGMainLoop from gi.repository import GObject @@ -16,30 +15,13 @@ from gi.repository import GObject from onoff.common import ST_ACTIVE import onoff.dbusutils -def wait_for_signal(proxy, signal): +def wait_for_signal(proxy, signal, desired_state): loop = GObject.MainLoop() - state = [] def callback(st): - state.append(st) - loop.quit() + if st == desired_state: + loop.quit() proxy.connect_to_signal(signal, callback) loop.run() - return state[0] - -def parse_introspection(xmlstring): - parser = xml.parsers.expat.ParserCreate() - nodes = [] - def start_element(name, attrs): - if name != "node": - return - try: - value = attrs["name"] - except KeyError: - return - nodes.append(value) - parser.StartElementHandler = start_element - parser.Parse(xmlstring) - return nodes def main(): parser = argparse.ArgumentParser(parents=[onoff.dbusutils.dbus_options]) @@ -55,8 +37,7 @@ def main(): DBusGMainLoop(set_as_default=True) if args.list: bus = onoff.dbusutils.get_dbus(args) - proxy = bus.get_object(args.busname, onoff.dbusutils.object_prefix) - for elem in parse_introspection(proxy.Introspect()): + for elem in onoff.dbusutils.list_objects(bus, args.busname): print(elem) elif args.command: proxy = onoff.dbusutils.get_dbus_proxy(args) @@ -66,16 +47,16 @@ def main(): os.close(fd) if st != ST_ACTIVE: print("state is %d waiting for signal" % st) - st = wait_for_signal(proxy, "changestate") - print("new state is %d" % st) + wait_for_signal(proxy, "changestate", ST_ACTIVE) + print("new state is actived") os.execvp(args.command[0], args.command) else: proxy = onoff.dbusutils.get_dbus_proxy(args) st = proxy.activatetime(args.duration) if st != ST_ACTIVE: print("state is %d waiting for signal" % st) - st = wait_for_signal(proxy, "changestate") - print("new state is %d" % st) + wait_for_signal(proxy, "changestate", ST_ACTIVE) + print("new state is active") if __name__ == "__main__": main()