* #1260, #2664, #1542, #2985: Rework network UI bits to be more informative and

increase granularity of mesh device control
This commit is contained in:
Dan Williams
2007-09-09 00:02:26 -04:00
parent e52d6f6ed4
commit 6b6470ebcb
6 changed files with 272 additions and 51 deletions
+40 -10
View File
@@ -207,6 +207,8 @@ class Device(gobject.GObject):
gobject.TYPE_NONE, ([])),
'state-changed': (gobject.SIGNAL_RUN_FIRST,
gobject.TYPE_NONE, ([])),
'activation-stage-changed': (gobject.SIGNAL_RUN_FIRST,
gobject.TYPE_NONE, ([])),
'network-appeared': (gobject.SIGNAL_RUN_FIRST,
gobject.TYPE_NONE,
([gobject.TYPE_PYOBJECT])),
@@ -332,6 +334,15 @@ class Device(gobject.GObject):
ret.append(net.get_op())
return ret
def get_mesh_step(self):
if self._type != DEVICE_TYPE_802_11_MESH_OLPC:
raise RuntimeError("Only valid for mesh devices")
try:
step = self.dev.getMeshStep(timeout=3000)
except dbus.DBusException, e:
step = 0
return step
def get_frequency(self):
freq = 0.0
try:
@@ -426,6 +437,9 @@ class Device(gobject.GObject):
if state == self._state:
return
if state == DEVICE_STATE_INACTIVE:
self._act_stage = 0
self._state = state
if self._valid:
self.emit('state-changed')
@@ -437,6 +451,16 @@ class Device(gobject.GObject):
self.dev.getActiveNetwork(reply_handler=lambda *args: self._get_active_net_cb(state, *args),
error_handler=self._get_active_net_error_cb)
def set_activation_stage(self, stage):
if stage == self._act_stage:
return
self._act_stage = stage
if self._valid:
self.emit('activation-stage-changed')
def get_activation_stage(self):
return self._act_stage
def get_ssid(self):
if self._active_network and self._active_network.is_valid():
return self._active_network.get_ssid()
@@ -586,26 +610,32 @@ class NMClient(gobject.GObject):
except dbus.DBusException:
pass
def set_active_device(self, device, network=None):
def set_active_device(self, device, network=None, mesh_freq=None, mesh_start=None):
ssid = ""
if network:
ssid = network.get_ssid()
try:
# NM 0.6.4 and earlier have a bug which returns an
# InvalidArguments error if no security information is passed
# for wireless networks
self._nm_obj.setActiveDevice(device.get_op(), ssid)
except dbus.DBusException, e:
if str(e).find("invalid arguments"):
pass
if device.get_type() == DEVICE_TYPE_802_11_MESH_OLPC:
if mesh_freq or mesh_start:
if mesh_freq and not mesh_start:
self._nm_obj.setActiveDevice(device.get_op(), dbus.Double(mesh_freq))
elif mesh_start and not mesh_freq:
self._nm_obj.setActiveDevice(device.get_op(), dbus.Double(0.0), dbus.UInt32(mesh_start))
else:
self._nm_obj.setActiveDevice(device.get_op(), dbus.Double(mesh_freq), dbus.UInt32(mesh_start))
else:
raise dbus.DBusException(e)
self._nm_obj.setActiveDevice(device.get_op())
else:
self._nm_obj.setActiveDevice(device.get_op(), ssid)
def state_changed_sig_handler(self, new_state):
logging.debug('NM State Changed to %d' % new_state)
def device_activation_stage_sig_handler(self, device, stage):
logging.debug('Device Activation Stage "%s" for device %s' % (NM_DEVICE_STAGE_STRINGS[stage], device))
if not self._devices.has_key(device):
logging.debug('DeviceActivationStage, device %s does not exist' % (device))
return
self._devices[device].set_activation_stage(stage)
def device_activating_sig_handler(self, device):
logging.debug('DeviceActivating for %s' % (device))