Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell/model
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2007-03-29 14:10:34 (GMT)
committer Dan Williams <dcbw@redhat.com>2007-03-29 14:10:34 (GMT)
commitd0fdf59486984d29e37def27fa917caffd1bdb87 (patch)
tree39ce9bb9baa5114e73ebfeb68186278b77c031c7 /shell/model
parentb3a500fd17ad71a43a9c6cd4b2ebd7a4cfabddf0 (diff)
Really add mesh device bits
Diffstat (limited to 'shell/model')
-rw-r--r--shell/model/MeshModel.py44
-rw-r--r--shell/model/devices/devicesmodel.py18
-rw-r--r--shell/model/devices/network/Makefile.am1
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