Really add mesh device bits
This commit is contained in:
parent
b3a500fd17
commit
d0fdf59486
@ -22,6 +22,7 @@ from sugar.activity import bundleregistry
|
|||||||
from model.BuddyModel import BuddyModel
|
from model.BuddyModel import BuddyModel
|
||||||
from model.accesspointmodel import AccessPointModel
|
from model.accesspointmodel import AccessPointModel
|
||||||
from hardware import hardwaremanager
|
from hardware import hardwaremanager
|
||||||
|
from hardware import nmclient
|
||||||
|
|
||||||
class ActivityModel:
|
class ActivityModel:
|
||||||
def __init__(self, activity, bundle, service):
|
def __init__(self, activity, bundle, service):
|
||||||
@ -58,7 +59,10 @@ class MeshModel(gobject.GObject):
|
|||||||
'access-point-added': (gobject.SIGNAL_RUN_FIRST,
|
'access-point-added': (gobject.SIGNAL_RUN_FIRST,
|
||||||
gobject.TYPE_NONE, ([gobject.TYPE_PYOBJECT])),
|
gobject.TYPE_NONE, ([gobject.TYPE_PYOBJECT])),
|
||||||
'access-point-removed': (gobject.SIGNAL_RUN_FIRST,
|
'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):
|
def __init__(self):
|
||||||
@ -67,6 +71,7 @@ class MeshModel(gobject.GObject):
|
|||||||
self._activities = {}
|
self._activities = {}
|
||||||
self._buddies = {}
|
self._buddies = {}
|
||||||
self._access_points = {}
|
self._access_points = {}
|
||||||
|
self._mesh = None
|
||||||
self._bundle_registry = bundleregistry.get_registry()
|
self._bundle_registry = bundleregistry.get_registry()
|
||||||
|
|
||||||
self._pservice = PresenceService.get_instance()
|
self._pservice = PresenceService.get_instance()
|
||||||
@ -92,10 +97,15 @@ class MeshModel(gobject.GObject):
|
|||||||
self._add_network_device(nm_device)
|
self._add_network_device(nm_device)
|
||||||
network_manager.connect('device-added',
|
network_manager.connect('device-added',
|
||||||
self._nm_device_added_cb)
|
self._nm_device_added_cb)
|
||||||
|
network_manager.connect('device-removed',
|
||||||
|
self._nm_device_removed_cb)
|
||||||
|
|
||||||
def _nm_device_added_cb(self, manager, nm_device):
|
def _nm_device_added_cb(self, manager, nm_device):
|
||||||
self._add_network_device(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):
|
def _nm_network_appeared_cb(self, nm_device, nm_network):
|
||||||
self._add_access_point(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)
|
self._remove_access_point(nm_network)
|
||||||
|
|
||||||
def _add_network_device(self, nm_device):
|
def _add_network_device(self, nm_device):
|
||||||
for nm_network in nm_device.get_networks():
|
dtype = nm_device.get_type()
|
||||||
self._add_access_point(nm_device, nm_network)
|
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',
|
nm_device.connect('network-appeared',
|
||||||
self._nm_network_appeared_cb)
|
self._nm_network_appeared_cb)
|
||||||
nm_device.connect('network-disappeared',
|
nm_device.connect('network-disappeared',
|
||||||
self._nm_network_disappeared_cb)
|
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):
|
def _add_access_point(self, nm_device, nm_network):
|
||||||
model = AccessPointModel(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()])
|
self._access_points[nm_network.get_op()])
|
||||||
del 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):
|
def get_access_points(self):
|
||||||
return self._access_points.values()
|
return self._access_points.values()
|
||||||
|
|
||||||
|
@ -3,6 +3,7 @@ import gobject
|
|||||||
from model.devices import device
|
from model.devices import device
|
||||||
from model.devices.network import wired
|
from model.devices.network import wired
|
||||||
from model.devices.network import wireless
|
from model.devices.network import wireless
|
||||||
|
from model.devices.network import mesh
|
||||||
from model.devices import battery
|
from model.devices import battery
|
||||||
from hardware import hardwaremanager
|
from hardware import hardwaremanager
|
||||||
from hardware import nmclient
|
from hardware import nmclient
|
||||||
@ -45,21 +46,28 @@ class DevicesModel(gobject.GObject):
|
|||||||
self._remove_network_device(nm_device)
|
self._remove_network_device(nm_device)
|
||||||
|
|
||||||
def _network_device_state_changed_cb(self, 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)
|
self._remove_network_device(nm_device)
|
||||||
|
|
||||||
def _check_network_device(self, nm_device):
|
def _check_network_device(self, nm_device):
|
||||||
if not nm_device.is_valid():
|
if not nm_device.is_valid():
|
||||||
return
|
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)
|
self._add_network_device(nm_device)
|
||||||
|
|
||||||
def _get_network_device(self, 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):
|
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',
|
nm_device.connect('state-changed',
|
||||||
self._network_device_state_changed_cb)
|
self._network_device_state_changed_cb)
|
||||||
|
|
||||||
@ -71,6 +79,8 @@ class DevicesModel(gobject.GObject):
|
|||||||
|
|
||||||
def add_device(self, device):
|
def add_device(self, device):
|
||||||
self._devices[device.get_id()] = device
|
self._devices[device.get_id()] = device
|
||||||
|
import logging
|
||||||
|
logging.debug("adding device %s" % device.get_id())
|
||||||
self.emit('device-appeared', device)
|
self.emit('device-appeared', device)
|
||||||
|
|
||||||
def remove_device(self, device):
|
def remove_device(self, device):
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
sugardir = $(pkgdatadir)/shell/model/devices/network
|
sugardir = $(pkgdatadir)/shell/model/devices/network
|
||||||
sugar_PYTHON = \
|
sugar_PYTHON = \
|
||||||
__init__.py \
|
__init__.py \
|
||||||
|
mesh.py \
|
||||||
wired.py \
|
wired.py \
|
||||||
wireless.py
|
wireless.py
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
sugardir = $(pkgdatadir)/shell/view/devices/network
|
sugardir = $(pkgdatadir)/shell/view/devices/network
|
||||||
sugar_PYTHON = \
|
sugar_PYTHON = \
|
||||||
__init__.py \
|
__init__.py \
|
||||||
|
mesh.py \
|
||||||
wired.py \
|
wired.py \
|
||||||
wireless.py
|
wireless.py
|
||||||
|
@ -18,6 +18,7 @@ import random
|
|||||||
|
|
||||||
import hippo
|
import hippo
|
||||||
import gobject
|
import gobject
|
||||||
|
from gettext import gettext as _
|
||||||
|
|
||||||
from sugar.graphics.spreadbox import SpreadBox
|
from sugar.graphics.spreadbox import SpreadBox
|
||||||
from sugar.graphics.snowflakebox import SnowflakeBox
|
from sugar.graphics.snowflakebox import SnowflakeBox
|
||||||
@ -25,10 +26,14 @@ from sugar.graphics.canvasicon import CanvasIcon
|
|||||||
from sugar.graphics import color
|
from sugar.graphics import color
|
||||||
from sugar.graphics import xocolor
|
from sugar.graphics import xocolor
|
||||||
from sugar.graphics import canvasicon
|
from sugar.graphics import canvasicon
|
||||||
|
from sugar.graphics import units
|
||||||
from model import accesspointmodel
|
from model import accesspointmodel
|
||||||
|
from model.devices.network import mesh
|
||||||
from hardware import hardwaremanager
|
from hardware import hardwaremanager
|
||||||
|
from hardware import nmclient
|
||||||
from view.BuddyIcon import BuddyIcon
|
from view.BuddyIcon import BuddyIcon
|
||||||
from view.pulsingicon import PulsingIcon
|
from view.pulsingicon import PulsingIcon
|
||||||
|
from sugar import profile
|
||||||
|
|
||||||
_ICON_NAME = 'device-network-wireless'
|
_ICON_NAME = 'device-network-wireless'
|
||||||
|
|
||||||
@ -101,6 +106,39 @@ class AccessPointView(PulsingIcon):
|
|||||||
self.props.fill_color = color.HTMLColor(self._inactive_fill_color)
|
self.props.fill_color = color.HTMLColor(self._inactive_fill_color)
|
||||||
self.props.stroke_color = color.HTMLColor(self._inactive_stroke_color)
|
self.props.stroke_color = color.HTMLColor(self._inactive_stroke_color)
|
||||||
|
|
||||||
|
class MeshDeviceView(CanvasIcon):
|
||||||
|
def __init__(self, nm_device):
|
||||||
|
CanvasIcon.__init__(self, scale=units.MEDIUM_ICON_SCALE,
|
||||||
|
icon_name='theme:device-network-mesh')
|
||||||
|
self._nm_device = nm_device
|
||||||
|
self.props.tooltip = _("Mesh Network")
|
||||||
|
|
||||||
|
self.connect('activated', self._activate_cb)
|
||||||
|
|
||||||
|
self._nm_device.connect('state-changed', self._state_changed_cb)
|
||||||
|
self._update_state()
|
||||||
|
|
||||||
|
def _activate_cb(self, icon):
|
||||||
|
network_manager = hardwaremanager.get_network_manager()
|
||||||
|
network_manager.set_active_device(self._nm_device)
|
||||||
|
|
||||||
|
def _state_changed_cb(self, model):
|
||||||
|
self._update_state()
|
||||||
|
|
||||||
|
def _update_state(self):
|
||||||
|
# FIXME Change icon colors once we have real icons
|
||||||
|
state = self._nm_device.get_state()
|
||||||
|
if state == nmclient.DEVICE_STATE_ACTIVATING:
|
||||||
|
self.props.fill_color = color.ICON_FILL_INACTIVE
|
||||||
|
self.props.stroke_color = color.ICON_STROKE_INACTIVE
|
||||||
|
elif state == nmclient.DEVICE_STATE_ACTIVATED:
|
||||||
|
mycolor = profile.get_color()
|
||||||
|
self.props.fill_color = color.HTMLColor(mycolor.get_fill_color())
|
||||||
|
self.props.stroke_color = color.HTMLColor(mycolor.get_stroke_color())
|
||||||
|
elif state == nmclient.DEVICE_STATE_INACTIVE:
|
||||||
|
self.props.fill_color = color.ICON_FILL_INACTIVE
|
||||||
|
self.props.stroke_color = color.ICON_STROKE_INACTIVE
|
||||||
|
|
||||||
class ActivityView(SnowflakeBox):
|
class ActivityView(SnowflakeBox):
|
||||||
def __init__(self, shell, menu_shell, model):
|
def __init__(self, shell, menu_shell, model):
|
||||||
SnowflakeBox.__init__(self)
|
SnowflakeBox.__init__(self)
|
||||||
@ -141,6 +179,7 @@ class MeshBox(SpreadBox):
|
|||||||
self._buddies = {}
|
self._buddies = {}
|
||||||
self._activities = {}
|
self._activities = {}
|
||||||
self._access_points = {}
|
self._access_points = {}
|
||||||
|
self._mesh = None
|
||||||
self._buddy_to_activity = {}
|
self._buddy_to_activity = {}
|
||||||
|
|
||||||
for buddy_model in self._model.get_buddies():
|
for buddy_model in self._model.get_buddies():
|
||||||
@ -164,6 +203,20 @@ class MeshBox(SpreadBox):
|
|||||||
self._model.connect('access-point-removed',
|
self._model.connect('access-point-removed',
|
||||||
self._access_point_removed_cb)
|
self._access_point_removed_cb)
|
||||||
|
|
||||||
|
if self._model.get_mesh():
|
||||||
|
self._add_mesh_icon(self._model.get_mesh())
|
||||||
|
|
||||||
|
self._model.connect('mesh-added',
|
||||||
|
self._mesh_added_cb)
|
||||||
|
self._model.connect('mesh-removed',
|
||||||
|
self._mesh_removed_cb)
|
||||||
|
|
||||||
|
def _mesh_added_cb(self, model, mesh):
|
||||||
|
self._add_mesh_icon(mesh)
|
||||||
|
|
||||||
|
def _mesh_removed_cb(self, model):
|
||||||
|
self._remove_mesh_icon()
|
||||||
|
|
||||||
def _buddy_added_cb(self, model, buddy_model):
|
def _buddy_added_cb(self, model, buddy_model):
|
||||||
self._add_alone_buddy(buddy_model)
|
self._add_alone_buddy(buddy_model)
|
||||||
|
|
||||||
@ -185,6 +238,20 @@ class MeshBox(SpreadBox):
|
|||||||
def _access_point_removed_cb(self, model, ap_model):
|
def _access_point_removed_cb(self, model, ap_model):
|
||||||
self._remove_access_point(ap_model)
|
self._remove_access_point(ap_model)
|
||||||
|
|
||||||
|
def _add_mesh_icon(self, mesh):
|
||||||
|
if self._mesh:
|
||||||
|
self._remove_mesh()
|
||||||
|
if not mesh:
|
||||||
|
return
|
||||||
|
self._mesh = MeshDeviceView(mesh)
|
||||||
|
self.add_item(self._mesh)
|
||||||
|
|
||||||
|
def _remove_access_point(self):
|
||||||
|
if not self._mesh:
|
||||||
|
return
|
||||||
|
self.remove_item(self._mesh)
|
||||||
|
self._mesh = None
|
||||||
|
|
||||||
def _add_alone_buddy(self, buddy_model):
|
def _add_alone_buddy(self, buddy_model):
|
||||||
icon = BuddyIcon(self._shell, self._menu_shell, buddy_model)
|
icon = BuddyIcon(self._shell, self._menu_shell, buddy_model)
|
||||||
self.add_item(icon)
|
self.add_item(icon)
|
||||||
|
Loading…
Reference in New Issue
Block a user