diff options
author | Dan Williams <dcbw@redhat.com> | 2007-03-29 14:10:34 (GMT) |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2007-03-29 14:10:34 (GMT) |
commit | d0fdf59486984d29e37def27fa917caffd1bdb87 (patch) | |
tree | 39ce9bb9baa5114e73ebfeb68186278b77c031c7 /shell/model | |
parent | b3a500fd17ad71a43a9c6cd4b2ebd7a4cfabddf0 (diff) |
Really add mesh device bits
Diffstat (limited to 'shell/model')
-rw-r--r-- | shell/model/MeshModel.py | 44 | ||||
-rw-r--r-- | shell/model/devices/devicesmodel.py | 18 | ||||
-rw-r--r-- | shell/model/devices/network/Makefile.am | 1 |
3 files changed, 51 insertions, 12 deletions
diff --git a/shell/model/MeshModel.py b/shell/model/MeshModel.py index b2c49bb..74dba26 100644 --- a/shell/model/MeshModel.py +++ b/shell/model/MeshModel.py @@ -22,6 +22,7 @@ from sugar.activity import bundleregistry from model.BuddyModel import BuddyModel from model.accesspointmodel import AccessPointModel from hardware import hardwaremanager +from hardware import nmclient class ActivityModel: def __init__(self, activity, bundle, service): @@ -58,7 +59,10 @@ class MeshModel(gobject.GObject): 'access-point-added': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([gobject.TYPE_PYOBJECT])), 'access-point-removed': (gobject.SIGNAL_RUN_FIRST, - gobject.TYPE_NONE, ([gobject.TYPE_PYOBJECT])) + gobject.TYPE_NONE, ([gobject.TYPE_PYOBJECT])), + 'mesh-added': (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, ([gobject.TYPE_PYOBJECT])), + 'mesh-removed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])) } def __init__(self): @@ -67,6 +71,7 @@ class MeshModel(gobject.GObject): self._activities = {} self._buddies = {} self._access_points = {} + self._mesh = None self._bundle_registry = bundleregistry.get_registry() self._pservice = PresenceService.get_instance() @@ -92,10 +97,15 @@ class MeshModel(gobject.GObject): self._add_network_device(nm_device) network_manager.connect('device-added', self._nm_device_added_cb) + network_manager.connect('device-removed', + self._nm_device_removed_cb) def _nm_device_added_cb(self, manager, nm_device): self._add_network_device(nm_device) + def _nm_device_removed_cb(self, manager, nm_device): + self._remove_network_device(nm_device) + def _nm_network_appeared_cb(self, nm_device, nm_network): self._add_access_point(nm_device, nm_network) @@ -103,13 +113,28 @@ class MeshModel(gobject.GObject): self._remove_access_point(nm_network) def _add_network_device(self, nm_device): - for nm_network in nm_device.get_networks(): - self._add_access_point(nm_device, nm_network) - - nm_device.connect('network-appeared', - self._nm_network_appeared_cb) - nm_device.connect('network-disappeared', - self._nm_network_disappeared_cb) + dtype = nm_device.get_type() + if dtype == nmclient.DEVICE_TYPE_802_11_WIRELESS: + for nm_network in nm_device.get_networks(): + self._add_access_point(nm_device, nm_network) + + nm_device.connect('network-appeared', + self._nm_network_appeared_cb) + nm_device.connect('network-disappeared', + self._nm_network_disappeared_cb) + elif dtype == nmclient.DEVICE_TYPE_802_11_MESH_OLPC: + self._mesh = nm_device + self.emit('mesh-added', self._mesh) + + def _remove_network_device(self, nm_device): + if nm_device == self._mesh: + self._mesh = None + self.emit('mesh-removed') + elif nm_device.get_type() == nmclient.DEVICE_TYPE_802_11_WIRELESS: + aplist = self._access_points.values() + for ap in aplist: + if ap.get_nm_device() == nm_device: + self._remove_access_point(ap) def _add_access_point(self, nm_device, nm_network): model = AccessPointModel(nm_device, nm_network) @@ -121,6 +146,9 @@ class MeshModel(gobject.GObject): self._access_points[nm_network.get_op()]) del self._access_points[nm_network.get_op()] + def get_mesh(self): + return self._mesh + def get_access_points(self): return self._access_points.values() diff --git a/shell/model/devices/devicesmodel.py b/shell/model/devices/devicesmodel.py index 3caa039..a161609 100644 --- a/shell/model/devices/devicesmodel.py +++ b/shell/model/devices/devicesmodel.py @@ -3,6 +3,7 @@ import gobject from model.devices import device from model.devices.network import wired from model.devices.network import wireless +from model.devices.network import mesh from model.devices import battery from hardware import hardwaremanager from hardware import nmclient @@ -45,21 +46,28 @@ class DevicesModel(gobject.GObject): self._remove_network_device(nm_device) def _network_device_state_changed_cb(self, nm_device): - if nm_device.get_state == nmclient.DEVICE_STATE_INACTIVE: + if nm_device.get_state() == nmclient.DEVICE_STATE_INACTIVE: self._remove_network_device(nm_device) def _check_network_device(self, nm_device): if not nm_device.is_valid(): return - if nm_device.get_type() == nmclient.DEVICE_TYPE_802_11_WIRELESS: + dtype = nm_device.get_type() + if dtype == nmclient.DEVICE_TYPE_802_11_WIRELESS \ + or dtype == nmclient.DEVICE_TYPE_802_11_MESH_OLPC: self._add_network_device(nm_device) def _get_network_device(self, nm_device): - return self._devices[nm_device.get_op()] + return self._devices[str(nm_device.get_op())] def _add_network_device(self, nm_device): - self.add_device(wireless.Device(nm_device)) + dtype = nm_device.get_type() + if dtype == nmclient.DEVICE_TYPE_802_11_WIRELESS: + self.add_device(wireless.Device(nm_device)) + if dtype == nmclient.DEVICE_TYPE_802_11_MESH_OLPC: + self.add_device(mesh.Device(nm_device)) + nm_device.connect('state-changed', self._network_device_state_changed_cb) @@ -71,6 +79,8 @@ class DevicesModel(gobject.GObject): def add_device(self, device): self._devices[device.get_id()] = device + import logging + logging.debug("adding device %s" % device.get_id()) self.emit('device-appeared', device) def remove_device(self, device): diff --git a/shell/model/devices/network/Makefile.am b/shell/model/devices/network/Makefile.am index 3801a14..04074e5 100644 --- a/shell/model/devices/network/Makefile.am +++ b/shell/model/devices/network/Makefile.am @@ -1,5 +1,6 @@ sugardir = $(pkgdatadir)/shell/model/devices/network sugar_PYTHON = \ __init__.py \ + mesh.py \ wired.py \ wireless.py |