summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDenis Kenzior <denkenz@gmail.com>2011-04-14 16:12:02 -0500
committerDenis Kenzior <denkenz@gmail.com>2011-04-14 17:02:22 -0500
commit441456503e97a0b2d9dac54072eb2324ca4762e5 (patch)
tree11145c24bd718076d4b796119aad09ded07a6855 /src
parent240a01260f6ee99c6eeef2928b3fb73c010477f5 (diff)
downloadofono-441456503e97a0b2d9dac54072eb2324ca4762e5.tar.bz2
network: Use strings instead of ints in settings
Diffstat (limited to 'src')
-rw-r--r--src/network.c61
1 files changed, 51 insertions, 10 deletions
diff --git a/src/network.c b/src/network.c
index 19e2bcac..bccd9137 100644
--- a/src/network.c
+++ b/src/network.c
@@ -199,8 +199,15 @@ static void set_registration_mode(struct ofono_netreg *netreg, int mode)
netreg->mode = mode;
if (netreg->settings) {
- g_key_file_set_integer(netreg->settings, SETTINGS_GROUP,
- "Mode", netreg->mode);
+ const char *mode;
+
+ if (netreg->mode == NETWORK_REGISTRATION_MODE_MANUAL)
+ mode = "manual";
+ else
+ mode = "auto";
+
+ g_key_file_set_string(netreg->settings, SETTINGS_GROUP,
+ "Mode", mode);
storage_sync(netreg->imsi, SETTINGS_STORE, netreg->settings);
}
@@ -1894,7 +1901,9 @@ struct ofono_netreg *ofono_netreg_create(struct ofono_modem *modem,
static void netreg_load_settings(struct ofono_netreg *netreg)
{
const char *imsi;
- int mode;
+ char *strmode;
+ gboolean upgrade = FALSE;
+ GError *error = NULL;
imsi = ofono_sim_get_imsi(netreg->sim);
if (imsi == NULL)
@@ -1907,15 +1916,47 @@ static void netreg_load_settings(struct ofono_netreg *netreg)
netreg->imsi = g_strdup(imsi);
- mode = g_key_file_get_integer(netreg->settings, SETTINGS_GROUP,
- "Mode", NULL);
+ /*
+ * Try legacy (integer) value first. We do this because g_key_file
+ * does not really distinguish between integers and strings
+ */
+ strmode = g_key_file_get_string(netreg->settings, SETTINGS_GROUP,
+ "Mode", &error);
+
+ if (strmode == NULL)
+ upgrade = TRUE;
+ else if (g_str_equal(strmode, "auto"))
+ netreg->mode = NETWORK_REGISTRATION_MODE_AUTO;
+ else if (g_str_equal(strmode, "manual"))
+ netreg->mode = NETWORK_REGISTRATION_MODE_MANUAL;
+ else {
+ int mode;
+
+ mode = g_key_file_get_integer(netreg->settings, SETTINGS_GROUP,
+ "Mode", NULL);
+
+ switch (mode) {
+ case NETWORK_REGISTRATION_MODE_AUTO:
+ case NETWORK_REGISTRATION_MODE_MANUAL:
+ netreg->mode = mode;
+ break;
+ }
- if (mode == NETWORK_REGISTRATION_MODE_AUTO ||
- mode == NETWORK_REGISTRATION_MODE_MANUAL)
- netreg->mode = mode;
+ upgrade = TRUE;
+ }
+
+ g_free(strmode);
+
+ if (upgrade == FALSE)
+ return;
+
+ if (netreg->mode == NETWORK_REGISTRATION_MODE_MANUAL)
+ strmode = "manual";
+ else
+ strmode = "auto";
- g_key_file_set_integer(netreg->settings, SETTINGS_GROUP,
- "Mode", netreg->mode);
+ g_key_file_set_string(netreg->settings, SETTINGS_GROUP,
+ "Mode", strmode);
}
static void sim_pnn_opl_changed(int id, void *userdata)