#!/usr/bin/python

import gobject

import dbus
import dbus.mainloop.glib

def property_changed(name, value, path, interface):
    iface = interface[interface.rfind(".") + 1:]
    ipath = path[path.rfind("/") + 1:]
    if iface not in ["Service"]:
        return
    if name in ["Profiles", "Services",
                "Devices", "Networks"]:
        val = "["
        for i in value:
            val = val + " " + i[i.rfind("/") + 1:]
        val = val + " ]"
    elif name in ["Strength", "Priority"]:
        val = int(value)
    else:
        val = str(value)
    print "{%s} [%s] %s = %s" % (iface, ipath, name, val)

if __name__ == '__main__':
    dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)

    bus = dbus.SystemBus()

    bus.add_signal_receiver(property_changed,
                            bus_name="org.chromium.flimflam",
                            signal_name = "PropertyChanged",
                            path_keyword="path",
                            interface_keyword="interface")

    mainloop = gobject.MainLoop()
    mainloop.run()
