[Sugar-devel] [PATCH sugar 3/4] implement discarding network history (SL#1673)

Sascha Silbe sascha-pgp at silbe.org
Fri Jan 21 08:10:34 EST 2011


From: James Cameron <quozl at laptop.org>

User interface changes:

- enable the discard network history button in the network control
  panel, which also now forces a disconnect, and will be insensitive
  if there are no networks to be discarded, (rather than the button
  doing nothing),

[split out from larger "fix network disconnect and discard history" patch;
replaced count_*() with have_*(); added FIXME]
Signed-off-by: Sascha Silbe <sascha-pgp at silbe.org>
Reviewed-by: Sascha Silbe <sascha-pgp at silbe.org>

diff --git a/extensions/cpsection/network/model.py b/extensions/cpsection/network/model.py
index 8426b7f..916ce8c 100644
--- a/extensions/cpsection/network/model.py
+++ b/extensions/cpsection/network/model.py
@@ -19,6 +19,9 @@ import dbus
 from gettext import gettext as _
 import gconf
 
+from jarabe.model import network
+
+
 _NM_SERVICE = 'org.freedesktop.NetworkManager'
 _NM_PATH = '/org/freedesktop/NetworkManager'
 _NM_IFACE = 'org.freedesktop.NetworkManager'
@@ -109,7 +112,11 @@ def clear_registration():
 def clear_networks():
     """Clear saved passwords and network configurations.
     """
-    pass
+    network.clear_wifi_connections()
+
+
+def have_networks():
+    return network.have_wifi_connections()
 
 
 def get_publish_information():
diff --git a/extensions/cpsection/network/view.py b/extensions/cpsection/network/view.py
index 9ecc8fd..381dcb6 100644
--- a/extensions/cpsection/network/view.py
+++ b/extensions/cpsection/network/view.py
@@ -106,6 +106,8 @@ class Network(SectionView):
         self._clear_history_button = gtk.Button()
         self._clear_history_button.set_label(_('Discard network history'))
         box_clear_history.pack_start(self._clear_history_button, expand=False)
+        if not self._model.have_networks():
+            self._clear_history_button.set_sensitive(False)
         self._clear_history_button.show()
         box_wireless.pack_start(box_clear_history, expand=False)
         box_clear_history.show()
@@ -220,6 +222,8 @@ class Network(SectionView):
             self._radio_valid = False
         else:
             self._radio_valid = True
+            if self._model.have_networks():
+                self._clear_history_button.set_sensitive(True)
 
         self._validate()
         return False
@@ -250,4 +254,8 @@ class Network(SectionView):
         return False
 
     def __network_configuration_reset_cb(self, widget):
+        # FIXME: takes effect immediately, not after CP is closed with
+        # confirmation button
         self._model.clear_networks()
+        if not self._model.have_networks():
+            self._clear_history_button.set_sensitive(False)
diff --git a/src/jarabe/model/network.py b/src/jarabe/model/network.py
index 1eb34ab..037f90f 100644
--- a/src/jarabe/model/network.py
+++ b/src/jarabe/model/network.py
@@ -521,6 +521,14 @@ class NMSettings(dbus.service.Object):
         self.secrets_request.send(self, connection=sender,
                                   response=kwargs['response'])
 
+    def clear_wifi_connections(self):
+        for uuid in self.connections.keys():
+            conn = self.connections[uuid]
+            if conn._settings.connection.type == \
+               NM_CONNECTION_TYPE_802_11_WIRELESS:
+                conn.Removed()
+                self.connections.pop(uuid)
+
 
 class SecretsResponse(object):
     """Intermediate object to report the secrets from the dialog
@@ -551,6 +559,16 @@ class NMSettingsConnection(dbus.service.Object):
         self._settings = settings
         self._secrets = secrets
 
+    @dbus.service.signal(dbus_interface=NM_CONNECTION_IFACE,
+                         signature='')
+    def Removed(self):
+        pass
+
+    @dbus.service.signal(dbus_interface=NM_CONNECTION_IFACE,
+                         signature='a{sa{sv}}')
+    def Updated(self, settings):
+        pass
+
     def set_connected(self):
         if self._settings.connection.type == NM_CONNECTION_TYPE_GSM:
             self._settings.connection.timestamp = int(time.time())
@@ -559,6 +577,7 @@ class NMSettingsConnection(dbus.service.Object):
             self._settings.connection.timestamp = int(time.time())
             if (self._settings.connection.type ==
                     NM_CONNECTION_TYPE_802_11_WIRELESS):
+                self.Updated(self._settings.get_dict())
                 self.save()
 
         try:
@@ -582,8 +601,7 @@ class NMSettingsConnection(dbus.service.Object):
         return self._settings
 
     def save(self):
-        profile_path = env.get_profile_path()
-        config_path = os.path.join(profile_path, 'nm', 'connections.cfg')
+        config_path = _get_wifi_connections_path()
 
         config = ConfigParser.ConfigParser()
         try:
@@ -812,19 +830,25 @@ def add_connection(uuid, settings, secrets=None):
     return conn
 
 
-def load_wifi_connections():
+def _get_wifi_connections_path():
     profile_path = env.get_profile_path()
-    config_path = os.path.join(profile_path, 'nm', 'connections.cfg')
+    return os.path.join(profile_path, 'nm', 'connections.cfg')
+
+
+def _create_wifi_connections(config_path):
+    if not os.path.exists(os.path.dirname(config_path)):
+        os.makedirs(os.path.dirname(config_path), 0755)
+    f = open(config_path, 'w')
+    f.close()
 
-    config = ConfigParser.ConfigParser()
+
+def load_wifi_connections():
+    config_path = _get_wifi_connections_path()
 
     if not os.path.exists(config_path):
-        if not os.path.exists(os.path.dirname(config_path)):
-            os.makedirs(os.path.dirname(config_path), 0755)
-        f = open(config_path, 'w')
-        config.write(f)
-        f.close()
+        _create_wifi_connections(config_path)
 
+    config = ConfigParser.ConfigParser()
     try:
         if not config.read(config_path):
             logging.error('Error reading the nm config file')
@@ -932,3 +956,15 @@ def find_gsm_connection():
 
     logging.debug('There is no gsm connection in the NMSettings.')
     return None
+
+
+def have_wifi_connections():
+    return bool(get_settings().connections)
+
+
+def clear_wifi_connections():
+    if _nm_settings is not None:
+        _nm_settings.clear_wifi_connections()
+
+    config_path = _get_wifi_connections_path()
+    _create_wifi_connections(config_path)
-- 
1.7.2.3



More information about the Sugar-devel mailing list