#!/usr/bin/python

import dbus

def print_sub_properties(key, value):
    if key == "Profiles":
        interface = "org.chromium.flimflam.Profile"
    elif key == "Devices":
        interface = "org.chromium.flimflam.Device"
    elif key == "Services":
        interface = "org.chromium.flimflam.Service"
    else:
        return

    print "%s" % (key)
    for path in value:
        print "    %s" % (path)
        obj = dbus.Interface(bus.get_object("org.chromium.flimflam", path),
                             interface)

        properties = obj.GetProperties(utf8_strings = True)

        for key in properties.keys():
            if key in ["Networks", "Services"]:
                continue

            if key in ["Powered", "Scanning", "Connected",
                       "Available", "Remember", "Default"]:
                if properties[key] == dbus.Boolean(1):
                    val = "true"
                else:
                    val = "false"
            elif key in ["Strength", "Priority"]:
                val = int(properties[key])
            else:
                val = str(properties[key])

            print "        %s = %s" % (key, val)

        if "Services" in properties.keys():
            remove_prefix = lambda x: x[x.rfind("/") + 1]
            services = [" ".join(
                map(remove_prefix, map(str, properties["Services"])))]
            print "        Services = [ %s]" % (services)

def print_properties(properties):
    for key in properties.keys():
        if key in ["Profiles", "Devices", "Services"]:
            print_sub_properties(key, properties[key])
        elif key in ["AvailableTechnologies", "EnabledTechnologies",
                     "ConnectedTechnologies"]:
            print "%s" % (key)
            print "    [ %s]" % (" ".join(properties[key]))
        elif key in ["OfflineMode"]:
            print "%s" % (key)
            if properties[key] == dbus.Boolean(1):
                print "    true"
            else:
                print "    false"
        elif key in ["DefaultTechnology"]:
            print "%s" % (key)
            if properties[key] == "":
                print "    <none>"
            else:
                print "    %s" % (properties[key])
        else:
            print "%s" % (key)
            print "    %s" % (properties[key])

bus = dbus.SystemBus()

manager = dbus.Interface(bus.get_object("org.chromium.flimflam", "/"),
                                        "org.chromium.flimflam.Manager")

print_properties(manager.GetProperties(utf8_strings = True))