import dbus
import gobject


from dbus.mainloop.glib import DBusGMainLoop

DBusGMainLoop(set_as_default = True)

def _get_initial_devices_reply_cb(ops):
    for op in ops:
        device = dbus.SystemBus().get_object('org.freedesktop.NetworkManager', op)
        props = dbus.Interface(device, 'org.freedesktop.DBus.Properties')
         
        device_type = props.Get('org.freedesktop.NetworkManager', 'DeviceType')
        if device_type == 2:
            print op
            wireless = dbus.Interface(device, 'org.freedesktop.NetworkManager.Device.Wireless')
            #wireless.GetAccessPoints(reply_handler=_get_access_points_reply_cb,
            #                         error_handler=_get_access_points_error_cb)
            device.Get('org.freedesktop.NetworkManager.Device.Wireless', 'ActiveAccessPoint',
                         reply_handler=__get_active_ap_reply_cb,
                         error_handler=__get_active_ap_error_cb)

def _get_access_points_reply_cb(access_points_o):
    for ap_o in access_points_o:
        ap = dbus.SystemBus().get_object('org.freedesktop.NetworkManager', ap_o)
        model_props = dbus.Interface(ap, 'org.freedesktop.DBus.Properties')
        model_props.GetAll('org.freedesktop.NetworkManager.AccessPoint', byte_arrays=True,
                           reply_handler=__get_all_props_reply_cb,
                           error_handler=__get_all_props_error_cb)


def __get_active_ap_reply_cb(ap):
    print ap
def __get_active_ap_error_cb(err):
    print 'Error getting the active access point: %s', err
        
def __get_all_props_reply_cb(properties):
    print properties

def __get_all_props_error_cb(err):
    pass

def _get_access_points_error_cb(err):
    print 'Failed to get access points: %s', err

def _get_initial_devices_error_cb(ops):
    for op in ops:
        print op

def lookup():
    nm_proxy = dbus.SystemBus().get_object('org.freedesktop.NetworkManager', '/org/freedesktop/NetworkManager',
                                                 follow_name_owner_changes=True)
    nm_obj = dbus.Interface(nm_proxy, 'org.freedesktop.NetworkManager')
    nm_obj.GetDevices(reply_handler=_get_initial_devices_reply_cb,
                      error_handler=_get_initial_devices_error_cb)
    
import gobject
loop = gobject.MainLoop()

gobject.idle_add(lookup)

print "Running the loop"
loop.run()
