From e0ab59b6a5183352a327b1d24880755c3799191f Mon Sep 17 00:00:00 2001
From: root <root@localhost.localdomain>
Date: Thu, 14 Jan 2010 15:41:59 -0200
Subject: [PATCH] 3G Connection Info
---
extensions/deviceicon/network.py | 63 +++++++++++++++++++++++++++++++++++---
src/jarabe/model/network.py | 13 +++++---
2 files changed, 66 insertions(+), 10 deletions(-)
diff --git a/extensions/deviceicon/network.py b/extensions/deviceicon/network.py
index 2ca6a88..8e8eb64 100644
a
|
b
|
import hashlib |
23 | 23 | import socket |
24 | 24 | import struct |
25 | 25 | import re |
26 | | |
| 26 | import datetime, time |
27 | 27 | import gtk |
28 | 28 | import gobject |
29 | 29 | import gconf |
… |
… |
_NM_PATH = '/org/freedesktop/NetworkManager' |
52 | 52 | _NM_DEVICE_IFACE = 'org.freedesktop.NetworkManager.Device' |
53 | 53 | _NM_WIRED_IFACE = 'org.freedesktop.NetworkManager.Device.Wired' |
54 | 54 | _NM_WIRELESS_IFACE = 'org.freedesktop.NetworkManager.Device.Wireless' |
| 55 | _NM_SERIAL_IFACE = 'org.freedesktop.NetworkManager.Device.Serial' |
55 | 56 | _NM_OLPC_MESH_IFACE = 'org.freedesktop.NetworkManager.Device.OlpcMesh' |
56 | 57 | _NM_ACCESSPOINT_IFACE = 'org.freedesktop.NetworkManager.AccessPoint' |
57 | 58 | _NM_ACTIVE_CONN_IFACE = 'org.freedesktop.NetworkManager.Connection.Active' |
… |
… |
class GsmPalette(Palette): |
221 | 222 | } |
222 | 223 | |
223 | 224 | def __init__(self): |
| 225 | |
| 226 | def _padded(child, xalign=0, yalign=0.5): |
| 227 | padder = gtk.Alignment(xalign=xalign, yalign=yalign, |
| 228 | xscale=1, yscale=0.33) |
| 229 | padder.set_padding(style.DEFAULT_SPACING, |
| 230 | style.DEFAULT_SPACING, |
| 231 | style.DEFAULT_SPACING, |
| 232 | style.DEFAULT_SPACING) |
| 233 | padder.add(child) |
| 234 | return padder |
| 235 | |
224 | 236 | Palette.__init__(self, label=_('Wireless modem')) |
225 | 237 | |
226 | 238 | self._current_state = None |
… |
… |
class GsmPalette(Palette): |
232 | 244 | |
233 | 245 | self.set_state(_GSM_STATE_NOT_READY) |
234 | 246 | |
| 247 | self._info = gtk.VBox() |
| 248 | self._data_label = gtk.Label() |
| 249 | self._data_label.props.xalign = 0.0 |
| 250 | self._info.pack_start(_padded(self._data_label)) |
| 251 | |
| 252 | self._conn_time_label = gtk.Label() |
| 253 | self._conn_time_label.props.xalign = 0.0 |
| 254 | self._info.pack_start(_padded(self._conn_time_label)) |
| 255 | |
| 256 | self._info.show_all() |
| 257 | self.set_content(self._info) |
| 258 | |
235 | 259 | def set_state(self, state): |
236 | 260 | self._current_state = state |
237 | 261 | self._update_label_and_text() |
… |
… |
class GsmDeviceView(TrayIcon): |
683 | 707 | FRAME_POSITION_RELATIVE = 303 |
684 | 708 | |
685 | 709 | def __init__(self, device): |
| 710 | self.__connection_time_handler = None |
| 711 | self.__connection_timestamp = None |
| 712 | |
686 | 713 | client = gconf.client_get_default() |
687 | 714 | color = xocolor.XoColor(client.get_string('/desktop/sugar/user/color')) |
688 | 715 | |
… |
… |
class GsmDeviceView(TrayIcon): |
697 | 724 | signal_name='StateChanged', |
698 | 725 | path=self._device.object_path, |
699 | 726 | dbus_interface=_NM_DEVICE_IFACE) |
700 | | |
| 727 | self._bus.add_signal_receiver(self.__ppp_stats_changed_cb, |
| 728 | signal_name='PppStats', |
| 729 | path=self._device.object_path, |
| 730 | dbus_interface=_NM_SERIAL_IFACE) |
701 | 731 | def create_palette(self): |
702 | 732 | palette = GsmPalette() |
703 | 733 | |
… |
… |
class GsmDeviceView(TrayIcon): |
770 | 800 | |
771 | 801 | if state is network.DEVICE_STATE_ACTIVATED: |
772 | 802 | gsm_state = _GSM_STATE_CONNECTED |
773 | | |
774 | | elif state is network.DEVICE_STATE_DISCONNECTED: |
| 803 | connection = network.find_gsm_connection() |
| 804 | if (connection <> None): |
| 805 | connection.set_connected() |
| 806 | self.__connection_timestamp = time.time() - connection.get_settings().connection.timestamp |
| 807 | self.__connection_time_handler = gobject.timeout_add(1000, self.connection_timecount_cb) |
| 808 | self.__ppp_stats_changed_cb(0, 0) |
| 809 | self.connection_timecount_cb() |
| 810 | self._palette._info.show_all() |
| 811 | else: |
| 812 | self.__connection_timestamp = 0 |
| 813 | if (self.__connection_time_handler <> None): |
| 814 | gobject.source_remove(self.__connection_time_handler) |
| 815 | self._palette._info.hide_all() |
| 816 | if state is network.DEVICE_STATE_DISCONNECTED: |
775 | 817 | gsm_state = _GSM_STATE_DISCONNECTED |
776 | 818 | |
777 | 819 | elif state in [network.DEVICE_STATE_UNMANAGED, |
… |
… |
class GsmDeviceView(TrayIcon): |
792 | 834 | signal_name='StateChanged', |
793 | 835 | path=self._device.object_path, |
794 | 836 | dbus_interface=_NM_DEVICE_IFACE) |
795 | | |
| 837 | |
| 838 | def __ppp_stats_changed_cb(self, in_bytes, out_bytes): |
| 839 | in_bytes = in_bytes / 1024 |
| 840 | out_bytes = out_bytes / 1024 |
| 841 | self._palette ._data_label.set_text("Data sent {0} kb / received {1} kb".format(out_bytes ,in_bytes)) |
| 842 | |
| 843 | def connection_timecount_cb(self): |
| 844 | self.__connection_timestamp = self.__connection_timestamp + 1 |
| 845 | connection_time = datetime.datetime.fromtimestamp(self.__connection_timestamp) |
| 846 | self._palette._conn_time_label.set_text("Connection time " + connection_time.strftime('%H : %M : %S')) |
| 847 | return True |
| 848 | |
796 | 849 | class WirelessDeviceObserver(object): |
797 | 850 | def __init__(self, device, tray, device_type): |
798 | 851 | self._device = device |
diff --git a/src/jarabe/model/network.py b/src/jarabe/model/network.py
index 696dc91..00db4e7 100644
a
|
b
|
class NMSettingsConnection(dbus.service.Object): |
350 | 350 | self._secrets = secrets |
351 | 351 | |
352 | 352 | def set_connected(self): |
353 | | if not self._settings.connection.autoconnect: |
354 | | self._settings.connection.autoconnect = True |
355 | | self._settings.connection.timestamp = int(time.time()) |
356 | | if self._settings.connection.type == NM_CONNECTION_TYPE_802_11_WIRELESS: |
357 | | self.save() |
| 353 | if self._settings.connection.type == NM_CONNECTION_TYPE_GSM: |
| 354 | self._settings.connection.timestamp = int(time.time()) |
| 355 | else: |
| 356 | if not self._settings.connection.autoconnect: |
| 357 | self._settings.connection.autoconnect = True |
| 358 | self._settings.connection.timestamp = int(time.time()) |
| 359 | if self._settings.connection.type == NM_CONNECTION_TYPE_802_11_WIRELESS: |
| 360 | self.save() |
358 | 361 | |
359 | 362 | def set_secrets(self, secrets): |
360 | 363 | self._secrets = secrets |