[Sugar-devel] [PATCH] sl#3325, Make the Modem-Configuration "Country, Provider, Plan" parameters persistent.

Ajay Garg ajay at activitycentral.com
Tue Feb 14 10:23:22 EST 2012


This patch stores the values of these 3 parameters in GConf (similar to other parameters).

 extensions/cpsection/modemconfiguration/model.py |   58 ++++++++++++++-
 extensions/cpsection/modemconfiguration/view.py  |   87 +++++++++++++++++-----
 src/jarabe/model/network.py                      |    3 +
 3 files changed, 127 insertions(+), 21 deletions(-)

diff --git a/extensions/cpsection/modemconfiguration/model.py b/extensions/cpsection/modemconfiguration/model.py
index ca9f75c..e0a792d 100644
--- a/extensions/cpsection/modemconfiguration/model.py
+++ b/extensions/cpsection/modemconfiguration/model.py
@@ -23,7 +23,8 @@ import logging
 from xml.etree.cElementTree import ElementTree
 from gettext import gettext as _
 
-from jarabe.model.network import GSM_USERNAME_PATH, GSM_PASSWORD_PATH, \
+from jarabe.model.network import GSM_COUNTRY_PATH, GSM_PROVIDERS_PATH, GSM_PLAN_PATH, \
+                                 GSM_USERNAME_PATH, GSM_PASSWORD_PATH, \
                                  GSM_NUMBER_PATH, GSM_APN_PATH, GSM_PIN_PATH, \
                                  GSM_PUK_PATH
 
@@ -32,6 +33,18 @@ from cpsection.modemconfiguration.config import PROVIDERS_PATH, \
                                                 COUNTRY_CODES_PATH
 
 
+def get_country():
+    client = gconf.client_get_default()
+    return client.get_string(GSM_COUNTRY_PATH) or ''
+
+def get_provider():
+    client = gconf.client_get_default()
+    return client.get_string(GSM_PROVIDERS_PATH) or ''
+
+def get_plan():
+    client = gconf.client_get_default()
+    return client.get_string(GSM_PLAN_PATH) or ''
+
 def get_username():
     client = gconf.client_get_default()
     return client.get_string(GSM_USERNAME_PATH) or ''
@@ -62,6 +75,21 @@ def get_puk():
     return client.get_string(GSM_PUK_PATH) or ''
 
 
+def set_country(country):
+    client = gconf.client_get_default()
+    client.set_string(GSM_COUNTRY_PATH, country)
+
+
+def set_provider(provider):
+    client = gconf.client_get_default()
+    client.set_string(GSM_PROVIDERS_PATH, provider)
+
+
+def set_plan(plan):
+    client = gconf.client_get_default()
+    client.set_string(GSM_PLAN_PATH, plan)
+
+
 def set_username(username):
     client = gconf.client_get_default()
     client.set_string(GSM_USERNAME_PATH, username)
@@ -146,7 +174,13 @@ class CountryListStore(gtk.ListStore):
         if self._country_idx is not None:
             return self._country_idx
         else:
-            return -1
+            return 0
+
+    def search_index_by_code(self, code):
+        for index in range(0, len(self)):
+            if self[index][0] == code:
+                return index
+        return -1
 
 
 class ProviderListStore(gtk.ListStore):
@@ -162,6 +196,16 @@ class ProviderListStore(gtk.ListStore):
     def get_row_plans(self, row):
         return self[row][1]
 
+    def guess_providers_row(self):
+        # Simply return the first entry as the default.
+        return 0
+
+    def search_index_by_code(self, code):
+        for index in range(0, len(self)):
+            if self[index][0] == code:
+                return index
+        return -1
+
 
 class PlanListStore(gtk.ListStore):
     LANG_NS_ATTR = '{http://www.w3.org/XML/1998/namespace}lang'
@@ -202,3 +246,13 @@ class PlanListStore(gtk.ListStore):
 
     def get_row_plan(self, row):
         return self[row][1]
+
+    def guess_plan_row(self):
+        # Simply return the first entry as the default.
+        return 0
+
+    def search_index_by_code(self, code):
+        for index in range(0, len(self)):
+            if self[index][0] == code:
+                return index
+        return -1
diff --git a/extensions/cpsection/modemconfiguration/view.py b/extensions/cpsection/modemconfiguration/view.py
index a16de88..67d8544 100644
--- a/extensions/cpsection/modemconfiguration/view.py
+++ b/extensions/cpsection/modemconfiguration/view.py
@@ -204,16 +204,15 @@ class ModemConfiguration(SectionView):
             label_group.add_widget(label)
             box.pack_start(label, False)
             label.show()
-            country_store = model.CountryListStore()
-            country_combo = gtk.ComboBox(country_store)
-            combo_group.add_widget(country_combo)
+            self._country_store = model.CountryListStore()
+            self._country_combo = gtk.ComboBox(self._country_store)
+            combo_group.add_widget(self._country_combo)
             cell = gtk.CellRendererText()
             cell.props.xalign = 0.5
-            country_combo.pack_start(cell)
-            country_combo.add_attribute(cell, 'text', 0)
-            country_combo.connect('changed', self.__country_selected_cb)
-            box.pack_start(country_combo, False)
-            country_combo.show()
+            self._country_combo.pack_start(cell)
+            self._country_combo.add_attribute(cell, 'text', 0)
+            box.pack_start(self._country_combo, False)
+            self._country_combo.show()
             self._upper_box.pack_start(box, False)
             box.show()
 
@@ -229,8 +228,6 @@ class ModemConfiguration(SectionView):
             cell.props.xalign = 0.5
             self._providers_combo.pack_start(cell)
             self._providers_combo.add_attribute(cell, 'text', 0)
-            self._providers_combo.connect('changed',
-                                          self.__provider_selected_cb)
             box.pack_start(self._providers_combo, False)
             self._providers_combo.show()
             self._upper_box.pack_start(box, False)
@@ -248,14 +245,11 @@ class ModemConfiguration(SectionView):
             cell.props.xalign = 0.5
             self._plan_combo.pack_start(cell)
             self._plan_combo.add_attribute(cell, 'text', 0)
-            self._plan_combo.connect('changed', self.__plan_selected_cb)
             box.pack_start(self._plan_combo, False)
             self._plan_combo.show()
             self._upper_box.pack_start(box, False)
             box.show()
 
-            country_combo.set_active(country_store.guess_country_row())
-
             separator = gtk.HSeparator()
             main_box.pack_start(separator, False)
             separator.show()
@@ -315,6 +309,17 @@ class ModemConfiguration(SectionView):
         self.setup()
 
     def setup(self):
+        if self._model.has_providers_db():
+            persisted_country = self._model.get_country()
+            if (self._model.has_providers_db()) and (persisted_country != ''):
+                self._country_combo.set_active(self._country_store.search_index_by_code(persisted_country))
+            else:
+                self._country_combo.set_active(self._country_store.guess_country_row())
+
+            # Call the selected callback anyway, so as to chain-set the
+            # default values for providers and the plans.
+            self.__country_selected_cb(self._country_combo, setup=True)
+
         self._username_entry.set_text_from_model()
         self._password_entry.set_text_from_model()
         self._number_entry.set_text_from_model()
@@ -327,18 +332,62 @@ class ModemConfiguration(SectionView):
     def undo(self):
         self._model.undo()
 
-    def __country_selected_cb(self, combo):
+    def _get_selected_text(self, combo):
+        active_iter = combo.get_active_iter()
+        return combo.get_model().get(active_iter, 0)[0]
+
+    def __country_selected_cb(self, combo, setup=False):
+        country = self._get_selected_text(combo)
+        self._model.set_country(country)
+
         model = combo.get_model()
         providers = model.get_row_providers(combo.get_active())
-        self._providers_combo.set_model(
-            self._model.ProviderListStore(providers))
+        self._providers_liststore = self._model.ProviderListStore(providers)
+        self._providers_combo.set_model(self._providers_liststore)
+
+        # Set the default provider as well.
+        if setup:
+            persisted_provider = self._model.get_provider()
+            if persisted_provider == '':
+                self._providers_combo.set_active(self._providers_liststore.guess_providers_row())
+            else:
+                self._providers_combo.set_active(self._providers_liststore.search_index_by_code(persisted_provider))
+        else:
+            self._providers_combo.set_active(self._providers_liststore.guess_providers_row())
+
+        # Call the callback, so that default provider may be set.
+        self.__provider_selected_cb(self._providers_combo, setup)
+
+        self._country_combo.connect('changed', self.__country_selected_cb, False)
+        self._providers_combo.connect('changed', self.__provider_selected_cb, False)
+        self._plan_combo.connect('changed', self.__plan_selected_cb, False)
+
+    def __provider_selected_cb(self, combo, setup=False):
+        provider = self._get_selected_text(combo)
+        self._model.set_provider(provider)
 
-    def __provider_selected_cb(self, combo):
         model = combo.get_model()
         plans = model.get_row_plans(combo.get_active())
-        self._plan_combo.set_model(self._model.PlanListStore(plans))
+        self._plan_liststore = self._model.PlanListStore(plans)
+        self._plan_combo.set_model(self._plan_liststore)
+
+        # Set the default plan as well.
+        if setup:
+            persisted_plan = self._model.get_plan()
+            if persisted_plan == '':
+                self._plan_combo.set_active(self._plan_liststore.guess_plan_row())
+            else:
+                self._plan_combo.set_active(self._plan_liststore.search_index_by_code(persisted_plan))
+        else:
+            self._plan_combo.set_active(self._plan_liststore.guess_plan_row())
+
+        # Call the callback, so that the default plan is set.
+        self.__plan_selected_cb(self._plan_combo, setup)
+
+    def __plan_selected_cb(self, combo, setup):
+        plan = self._get_selected_text(combo)
+        self._model.set_plan(plan)
 
-    def __plan_selected_cb(self, combo):
         model = combo.get_model()
         plan = model.get_row_plan(combo.get_active())
         self._username_entry.entry.set_text(plan['username'])
diff --git a/src/jarabe/model/network.py b/src/jarabe/model/network.py
index 84e3666..8e60e0d 100644
--- a/src/jarabe/model/network.py
+++ b/src/jarabe/model/network.py
@@ -141,6 +141,9 @@ NM_SECRETS_IFACE = 'org.freedesktop.NetworkManagerSettings.Connection.Secrets'
 NM_ACCESSPOINT_IFACE = 'org.freedesktop.NetworkManager.AccessPoint'
 NM_ACTIVE_CONN_IFACE = 'org.freedesktop.NetworkManager.Connection.Active'
 
+GSM_COUNTRY_PATH = '/desktop/sugar/network/gsm/country'
+GSM_PROVIDERS_PATH = '/desktop/sugar/network/gsm/providers'
+GSM_PLAN_PATH = '/desktop/sugar/network/gsm/plan'
 GSM_USERNAME_PATH = '/desktop/sugar/network/gsm/username'
 GSM_PASSWORD_PATH = '/desktop/sugar/network/gsm/password'
 GSM_NUMBER_PATH = '/desktop/sugar/network/gsm/number'
-- 
1.7.4.4



More information about the Sugar-devel mailing list