diff options
Diffstat (limited to 'extensions/deviceicon/network.py')
-rw-r--r-- | extensions/deviceicon/network.py | 111 |
1 files changed, 52 insertions, 59 deletions
diff --git a/extensions/deviceicon/network.py b/extensions/deviceicon/network.py index 0789f9c..4c4f339 100644 --- a/extensions/deviceicon/network.py +++ b/extensions/deviceicon/network.py @@ -23,7 +23,6 @@ import logging import hashlib import socket import struct -import re import datetime import time import gtk @@ -40,16 +39,14 @@ from sugar.graphics.tray import TrayIcon from sugar.graphics.menuitem import MenuItem from sugar.graphics.icon import Icon from sugar.graphics import xocolor -from sugar.util import unique_id from sugar import profile from jarabe.model import network -from jarabe.model.network import Settings -from jarabe.model.network import IP4Config from jarabe.frame.frameinvoker import FrameWidgetInvoker from jarabe.view.pulsingicon import PulsingIcon -IP_ADDRESS_TEXT_TEMPLATE = _("IP address: %s") + +IP_ADDRESS_TEXT_TEMPLATE = _('IP address: %s') _NM_SERVICE = 'org.freedesktop.NetworkManager' _NM_IFACE = 'org.freedesktop.NetworkManager' @@ -73,8 +70,8 @@ class WirelessPalette(Palette): __gtype_name__ = 'SugarWirelessPalette' __gsignals__ = { - 'deactivate-connection' : (gobject.SIGNAL_RUN_FIRST, - gobject.TYPE_NONE, ([])) + 'deactivate-connection': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([])), } def __init__(self, primary_text): @@ -107,7 +104,8 @@ class WirelessPalette(Palette): self._disconnect_item = MenuItem(_('Disconnect...')) icon = Icon(icon_size=gtk.ICON_SIZE_MENU, icon_name='media-eject') self._disconnect_item.set_image(icon) - self._disconnect_item.connect('activate', self.__disconnect_activate_cb) + self._disconnect_item.connect('activate', + self.__disconnect_activate_cb) self.menu.append(self._disconnect_item) def set_connecting(self): @@ -141,7 +139,7 @@ class WirelessPalette(Palette): self._set_channel(channel) def _set_channel(self, channel): - self._channel_label.set_text("%s: %d" % (_("Channel"), channel)) + self._channel_label.set_text('%s: %d' % (_('Channel'), channel)) def _set_ip_address(self, ip_address): if ip_address is not None: @@ -189,7 +187,7 @@ class WiredPalette(Palette): def _inet_ntoa(self, iaddress): address = ['%s' % ((iaddress >> i) % 256) for i in [0, 8, 16, 24]] - return ".".join(address) + return '.'.join(address) def _set_ip_address(self, ip_address): if ip_address is not None: @@ -199,14 +197,13 @@ class WiredPalette(Palette): ip_address_text = "" self._ip_address_label.set_text(ip_address_text) + class GsmPalette(Palette): __gtype_name__ = 'SugarGsmPalette' __gsignals__ = { - 'gsm-connect' : (gobject.SIGNAL_RUN_FIRST, - gobject.TYPE_NONE, ([])), - 'gsm-disconnect' : (gobject.SIGNAL_RUN_FIRST, - gobject.TYPE_NONE, ([])), + 'gsm-connect': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])), + 'gsm-disconnect': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])), } def __init__(self): @@ -302,7 +299,7 @@ class GsmPalette(Palette): icon = Icon(icon_name='media-eject', \ icon_size=gtk.ICON_SIZE_MENU) self._toggle_state_item.set_image(icon) - + elif self._current_state == _GSM_STATE_FAILED: message_error = self._get_error_by_nm_reason(reason) self.add_alert(message_error[0], message_error[1]) @@ -327,7 +324,8 @@ class GsmPalette(Palette): def add_alert(self, error, suggestion): self._failed_connection = True - self._toggle_state_item.get_child().set_label(_('Try connection again')) + action = _('Try connection again') + self._toggle_state_item.get_child().set_label(action) title = _('Error: %s') % error self.error_title_label.set_markup('<b>%s</b>' % title) @@ -347,8 +345,8 @@ class GsmPalette(Palette): def update_stats(self, in_bytes, out_bytes): in_KBytes = in_bytes / 1024 out_KBytes = out_bytes / 1024 - self._data_label_up.set_text(_("%d KB") % (out_KBytes)) - self._data_label_down.set_text(_("%d KB") % (in_KBytes)) + self._data_label_up.set_text(_('%d KB') % (out_KBytes)) + self._data_label_down.set_text(_('%d KB') % (in_KBytes)) def _get_error_by_nm_reason(self, reason): if reason in [network.NM_DEVICE_STATE_REASON_NO_SECRETS, @@ -390,8 +388,8 @@ class WirelessDeviceView(ToolButton): self._icon = PulsingIcon() self._icon.props.icon_name = get_icon_state('network-wireless', 0) - self._inactive_color = xocolor.XoColor( \ - "%s,%s" % (style.COLOR_BUTTON_GREY.get_svg(), + self._inactive_color = xocolor.XoColor( + '%s,%s' % (style.COLOR_BUTTON_GREY.get_svg(), style.COLOR_TRANSPARENT.get_svg())) self._icon.props.pulse_color = self._inactive_color self._icon.props.base_color = self._inactive_color @@ -406,9 +404,9 @@ class WirelessDeviceView(ToolButton): self.set_palette(self._palette) self._palette.set_group_id('frame') - self._device_props = dbus.Interface(self._device, - 'org.freedesktop.DBus.Properties') - self._device_props.GetAll(_NM_DEVICE_IFACE, byte_arrays=True, + self._device_props = dbus.Interface(self._device, + dbus.PROPERTIES_IFACE) + self._device_props.GetAll(_NM_DEVICE_IFACE, byte_arrays=True, reply_handler=self.__get_device_props_reply_cb, error_handler=self.__get_device_props_error_cb) @@ -448,7 +446,7 @@ class WirelessDeviceView(ToolButton): return self._active_ap_op = active_ap_op active_ap = self._bus.get_object(_NM_SERVICE, active_ap_op) - props = dbus.Interface(active_ap, 'org.freedesktop.DBus.Properties') + props = dbus.Interface(active_ap, dbus.PROPERTIES_IFACE) props.GetAll(_NM_ACCESSPOINT_IFACE, byte_arrays=True, reply_handler=self.__get_all_ap_props_reply_cb, @@ -497,7 +495,7 @@ class WirelessDeviceView(ToolButton): digest = hash(sha_hash.digest()) index = digest % len(xocolor.colors) - self._color = xocolor.XoColor('%s,%s' % + self._color = xocolor.XoColor('%s,%s' % (xocolor.colors[index][0], xocolor.colors[index][1])) self._update() @@ -510,7 +508,7 @@ class WirelessDeviceView(ToolButton): def _update(self): if self._flags == network.NM_802_11_AP_FLAGS_PRIVACY: - self._icon.props.badge_name = "emblem-locked" + self._icon.props.badge_name = 'emblem-locked' else: self._icon.props.badge_name = None @@ -552,7 +550,8 @@ class WirelessDeviceView(ToolButton): self._icon.props.pulsing = True elif state == network.DEVICE_STATE_ACTIVATED: address = self._device_props.Get(_NM_DEVICE_IFACE, 'Ip4Address') - self._palette.set_connected_with_frequency(self._frequency, address) + self._palette.set_connected_with_frequency(self._frequency, + address) self._icon.props.pulsing = False else: self._icon.props.badge_name = None @@ -565,21 +564,12 @@ class WirelessDeviceView(ToolButton): self._icon.props.base_color = self._color def __deactivate_connection_cb(self, palette, data=None): - if self._active_ap_op is not None: - obj = self._bus.get_object(_NM_SERVICE, _NM_PATH) - netmgr = dbus.Interface(obj, _NM_IFACE) - netmgr_props = dbus.Interface( - netmgr, 'org.freedesktop.DBus.Properties') - active_connections_o = netmgr_props.Get(_NM_IFACE, - 'ActiveConnections') - - for conn_o in active_connections_o: - obj = self._bus.get_object(_NM_IFACE, conn_o) - props = dbus.Interface(obj, 'org.freedesktop.DBus.Properties') - ap_op = props.Get(_NM_ACTIVE_CONN_IFACE, 'SpecificObject') - if ap_op == self._active_ap_op: - netmgr.DeactivateConnection(conn_o) - break + if self._mode == network.NM_802_11_MODE_INFRA: + connection = network.find_connection_by_ssid(self._name) + if connection: + connection.disable_autoconnect() + + network.disconnect_access_points([self._active_ap_op]) def __activate_reply_cb(self, connection): logging.debug('Network created: %s', connection) @@ -602,8 +592,8 @@ class OlpcMeshDeviceView(ToolButton): self._channel = 0 self._icon = PulsingIcon(icon_name=self._ICON_NAME) - self._inactive_color = xocolor.XoColor( \ - "%s,%s" % (style.COLOR_BUTTON_GREY.get_svg(), + self._inactive_color = xocolor.XoColor( + '%s,%s' % (style.COLOR_BUTTON_GREY.get_svg(), style.COLOR_TRANSPARENT.get_svg())) self._icon.props.pulse_color = profile.get_color() self._icon.props.base_color = self._inactive_color @@ -612,7 +602,7 @@ class OlpcMeshDeviceView(ToolButton): self._icon.show() self.set_palette_invoker(FrameWidgetInvoker(self)) - self._palette = WirelessPalette(_("Mesh Network")) + self._palette = WirelessPalette(_('Mesh Network')) self._palette.connect('deactivate-connection', self.__deactivate_connection) self.set_palette(self._palette) @@ -621,7 +611,7 @@ class OlpcMeshDeviceView(ToolButton): self.update_state(state) self._device_props = dbus.Interface(self._device, - 'org.freedesktop.DBus.Properties') + dbus.PROPERTIES_IFACE) self._device_props.Get(_NM_OLPC_MESH_IFACE, 'ActiveChannel', reply_handler=self.__get_active_channel_reply_cb, error_handler=self.__get_active_channel_error_cb) @@ -655,7 +645,7 @@ class OlpcMeshDeviceView(ToolButton): def _update_text(self): channel = str(self._channel) - text = _("Mesh Network %s") % glib.markup_escape_text(channel) + text = _('Mesh Network %s') % glib.markup_escape_text(channel) self._palette.props.primary_text = text def _update(self): @@ -683,21 +673,21 @@ class OlpcMeshDeviceView(ToolButton): def __deactivate_connection(self, palette, data=None): obj = self._bus.get_object(_NM_SERVICE, _NM_PATH) netmgr = dbus.Interface(obj, _NM_IFACE) - netmgr_props = dbus.Interface(netmgr, 'org.freedesktop.DBus.Properties') + netmgr_props = dbus.Interface(netmgr, dbus.PROPERTIES_IFACE) active_connections_o = netmgr_props.Get(_NM_IFACE, 'ActiveConnections') for conn_o in active_connections_o: # The connection path for a mesh connection is the device itself. obj = self._bus.get_object(_NM_IFACE, conn_o) - props = dbus.Interface(obj, 'org.freedesktop.DBus.Properties') + props = dbus.Interface(obj, dbus.PROPERTIES_IFACE) ap_op = props.Get(_NM_ACTIVE_CONN_IFACE, 'SpecificObject') try: obj = self._bus.get_object(_NM_IFACE, ap_op) - props = dbus.Interface(obj, 'org.freedesktop.DBus.Properties') - type = props.Get(_NM_DEVICE_IFACE, 'DeviceType') - if type == network.DEVICE_TYPE_802_11_OLPC_MESH: + props = dbus.Interface(obj, dbus.PROPERTIES_IFACE) + device_type = props.Get(_NM_DEVICE_IFACE, 'DeviceType') + if device_type == network.DEVICE_TYPE_802_11_OLPC_MESH: netmgr.DeactivateConnection(conn_o) break except dbus.exceptions.DBusException: @@ -749,6 +739,7 @@ class GsmDeviceView(TrayIcon): signal_name='PppStats', path=self._device.object_path, dbus_interface=_NM_SERIAL_IFACE) + def create_palette(self): palette = GsmPalette() @@ -758,7 +749,7 @@ class GsmDeviceView(TrayIcon): self._palette = palette - props = dbus.Interface(self._device, 'org.freedesktop.DBus.Properties') + props = dbus.Interface(self._device, dbus.PROPERTIES_IFACE) props.GetAll(_NM_DEVICE_IFACE, byte_arrays=True, reply_handler=self.__current_state_check_cb, error_handler=self.__current_state_check_error_cb) @@ -791,12 +782,12 @@ class GsmDeviceView(TrayIcon): def __gsm_disconnect_cb(self, palette, data=None): obj = self._bus.get_object(_NM_SERVICE, _NM_PATH) netmgr = dbus.Interface(obj, _NM_IFACE) - netmgr_props = dbus.Interface(netmgr, 'org.freedesktop.DBus.Properties') + netmgr_props = dbus.Interface(netmgr, dbus.PROPERTIES_IFACE) active_connections_o = netmgr_props.Get(_NM_IFACE, 'ActiveConnections') for conn_o in active_connections_o: obj = self._bus.get_object(_NM_IFACE, conn_o) - props = dbus.Interface(obj, 'org.freedesktop.DBus.Properties') + props = dbus.Interface(obj, dbus.PROPERTIES_IFACE) devices = props.Get(_NM_ACTIVE_CONN_IFACE, 'Devices') if self._device.object_path in devices: netmgr.DeactivateConnection( @@ -961,7 +952,7 @@ class WiredDeviceObserver(object): self._device_view = None self._tray = tray - props = dbus.Interface(self._device, 'org.freedesktop.DBus.Properties') + props = dbus.Interface(self._device, dbus.PROPERTIES_IFACE) props.GetAll(_NM_DEVICE_IFACE, byte_arrays=True, reply_handler=self.__get_device_props_reply_cb, error_handler=self.__get_device_props_error_cb) @@ -989,8 +980,7 @@ class WiredDeviceObserver(object): def _update_state(self, state): if state == network.DEVICE_STATE_ACTIVATED: - props = dbus.Interface(self._device, - 'org.freedesktop.DBus.Properties') + props = dbus.Interface(self._device, dbus.PROPERTIES_IFACE) address = props.Get(_NM_DEVICE_IFACE, 'Ip4Address') speed = props.Get(_NM_WIRED_IFACE, 'Speed') self._device_view = WiredDeviceView(speed, address) @@ -1001,6 +991,7 @@ class WiredDeviceObserver(object): del self._device_view self._device_view = None + class GsmDeviceObserver(object): def __init__(self, device, tray): self._device = device @@ -1015,6 +1006,7 @@ class GsmDeviceObserver(object): self._tray.remove_device(self._device_view) self._device_view = None + class NetworkManagerObserver(object): def __init__(self, tray): self._bus = dbus.SystemBus() @@ -1048,7 +1040,7 @@ class NetworkManagerObserver(object): def _check_device(self, device_op): nm_device = self._bus.get_object(_NM_SERVICE, device_op) - props = dbus.Interface(nm_device, 'org.freedesktop.DBus.Properties') + props = dbus.Interface(nm_device, dbus.PROPERTIES_IFACE) device_type = props.Get(_NM_DEVICE_IFACE, 'DeviceType') if device_type == network.DEVICE_TYPE_802_3_ETHERNET: @@ -1073,5 +1065,6 @@ class NetworkManagerObserver(object): device.disconnect() del self._devices[device_op] + def setup(tray): device_observer = NetworkManagerObserver(tray) |