X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fmodest-account-mgr.c;h=c89deab955a649925e23756ae6e927011e71db0a;hb=df6be154c51576cb795b074615358107bccd603b;hp=d77633cc4fff05c0bfcfcfb3288d8aaf2e3e8ebf;hpb=434ec10090daec7d9d80c1f419b9113d15d58fd4;p=modest diff --git a/src/modest-account-mgr.c b/src/modest-account-mgr.c index d77633c..c89deab 100644 --- a/src/modest-account-mgr.c +++ b/src/modest-account-mgr.c @@ -11,6 +11,7 @@ static void modest_account_mgr_init (ModestAccountMgr *obj); static void modest_account_mgr_finalize (GObject *obj); static gchar* get_account_keyname (const gchar *accname, const gchar *name); +static gchar* get_server_account_keyname (const gchar *accname, const gchar *name); /* list my signals */ enum { @@ -80,7 +81,7 @@ static void modest_account_mgr_init (ModestAccountMgr *obj) { ModestAccountMgrPrivate *priv = MODEST_ACCOUNT_MGR_GET_PRIVATE(obj); - priv->modest_conf = NULL; + priv->modest_conf = NULL; } static void @@ -98,7 +99,7 @@ modest_account_mgr_new (ModestConf *conf) { GObject *obj; ModestAccountMgrPrivate *priv; - + g_return_val_if_fail (conf, NULL); obj = G_OBJECT(g_object_new(MODEST_TYPE_ACCOUNT_MGR, NULL)); @@ -123,21 +124,21 @@ modest_account_mgr_add_account (ModestAccountMgr *self, const gchar* name, ModestAccountMgrPrivate *priv; gchar *key; gboolean retval; - + g_return_val_if_fail (self, FALSE); g_return_val_if_fail (name, FALSE); if (modest_account_mgr_account_exists (self, name, err)) { g_warning ("account already exists"); //return FALSE; - } + } /* * we create the account by adding an account 'dir', with the name , * and in that the 'display_name' string key */ priv = MODEST_ACCOUNT_MGR_GET_PRIVATE(self); - key = get_account_keyname (name, MODEST_ACCOUNT_DISPLAY_NAME); + key = get_account_keyname (name, MODEST_ACCOUNT_DISPLAY_NAME); modest_conf_set_string (priv->modest_conf, key, name, err); g_free (key); @@ -152,11 +153,11 @@ modest_account_mgr_add_account (ModestAccountMgr *self, const gchar* name, modest_conf_set_string (priv->modest_conf, key, transport_account, err); g_free (key); } - + return TRUE; /* TODO: error handling */ } - + gboolean modest_account_mgr_remove_account (ModestAccountMgr *self, const gchar* name, GError **err) @@ -164,7 +165,7 @@ modest_account_mgr_remove_account (ModestAccountMgr *self, const gchar* name, ModestAccountMgrPrivate *priv; gchar *key; gboolean retval; - + g_return_val_if_fail (self, FALSE); g_return_val_if_fail (name, FALSE); @@ -172,11 +173,11 @@ modest_account_mgr_remove_account (ModestAccountMgr *self, const gchar* name, g_warning ("account doest not exist"); return FALSE; } - - priv = MODEST_ACCOUNT_MGR_GET_PRIVATE(self); + + priv = MODEST_ACCOUNT_MGR_GET_PRIVATE(self); key = get_account_keyname (name, NULL); - - retval = modest_conf_remove_key (priv->modest_conf, key, NULL); + + retval = modest_conf_remove_key (priv->modest_conf, key, NULL); g_free (key); return retval; @@ -200,16 +201,16 @@ modest_account_mgr_add_server_account (ModestAccountMgr *self, { ModestAccountMgrPrivate *priv; gchar *acckey, *key; - + g_return_val_if_fail (self, FALSE); g_return_val_if_fail (name, FALSE); /* TODO: check already exists */ - - priv = MODEST_ACCOUNT_MGR_GET_PRIVATE(self); + + priv = MODEST_ACCOUNT_MGR_GET_PRIVATE(self); acckey = g_strconcat (MODEST_SERVER_ACCOUNT_NAMESPACE, "/", name, NULL); - + if (modest_conf_key_exists(priv->modest_conf, acckey, NULL)) { g_warning ("server account %s already exists", name); g_free (acckey); @@ -221,7 +222,7 @@ modest_account_mgr_add_server_account (ModestAccountMgr *self, modest_conf_set_string (priv->modest_conf, key, null_means_empty(hostname), NULL); g_free (key); - + /* username */ key = g_strconcat (acckey, "/", MODEST_ACCOUNT_USERNAME, NULL); modest_conf_set_string (priv->modest_conf, key, @@ -233,7 +234,7 @@ modest_account_mgr_add_server_account (ModestAccountMgr *self, modest_conf_set_string (priv->modest_conf, key, null_means_empty(password), NULL); g_free (key); - + /* proto */ key = g_strconcat (acckey, "/", MODEST_ACCOUNT_PROTO, NULL); modest_conf_set_string (priv->modest_conf, key, @@ -252,28 +253,45 @@ modest_account_mgr_remove_server_account (ModestAccountMgr *self, ModestAccountMgrPrivate *priv; gchar *acckey, *key; gboolean retval; - + g_return_val_if_fail (self, FALSE); g_return_val_if_fail (name, FALSE); priv = MODEST_ACCOUNT_MGR_GET_PRIVATE(self); - + acckey = g_strconcat (MODEST_SERVER_ACCOUNT_NAMESPACE, "/", name, NULL); - + if (!modest_conf_key_exists(priv->modest_conf, acckey, NULL)) { g_warning ("server account %s does not exist exist", name); g_free (acckey); return FALSE; } - + retval = modest_conf_remove_key (priv->modest_conf, acckey, NULL); g_free (acckey); - + return retval; } +/* strip the first /n/ character from each element */ +/* caller must make sure all elements are strings with + * length >= n, and also that data can be freed. + */ +static GSList* +strip_prefix_from_elements (GSList *lst, guint n) +{ + GSList *cursor = lst; + while (cursor) { + gchar *str = (gchar*)cursor->data; + cursor->data = g_strdup (str + n); + g_free (str); + cursor = cursor->next; + } + return lst; +} + GSList* @@ -286,9 +304,11 @@ modest_account_mgr_server_account_names (ModestAccountMgr *self, GSList *accounts; GSList *cursor; ModestAccountMgrPrivate *priv; - + const size_t prefix_len = + strlen (MODEST_SERVER_ACCOUNT_NAMESPACE "/"); + g_return_val_if_fail (self, NULL); - + priv = MODEST_ACCOUNT_MGR_GET_PRIVATE(self); accounts = modest_conf_list_subkeys (priv->modest_conf, MODEST_SERVER_ACCOUNT_NAMESPACE, @@ -296,19 +316,19 @@ modest_account_mgr_server_account_names (ModestAccountMgr *self, /* no restrictions, return everything */ if (type == MODEST_PROTO_TYPE_ANY && !proto) - return accounts; + return strip_prefix_from_elements (accounts,prefix_len); /* otherwise, filter out the none-matching ones */ cursor = accounts; while (cursor) { gchar *keyspace, *proto_key, *acc_proto; - + keyspace = (gchar*) cursor->data; proto_key = g_strconcat (keyspace, "/", MODEST_ACCOUNT_PROTO, NULL); acc_proto = modest_conf_get_string (priv->modest_conf, proto_key, NULL); g_free (proto_key); - + if ((!acc_proto) || /* proto not defined? */ (type != MODEST_PROTO_TYPE_ANY && /* proto type ... */ modest_proto_type (acc_proto) != type) || /* ... matches? */ @@ -318,11 +338,11 @@ modest_account_mgr_server_account_names (ModestAccountMgr *self, g_free (acc_proto); accounts = g_slist_delete_link (accounts, cursor); cursor = nxt; - } else - cursor = cursor->next; + } else + cursor = cursor->next; } - - return accounts; + + return strip_prefix_from_elements (accounts, prefix_len); } @@ -332,49 +352,70 @@ modest_account_mgr_account_names (ModestAccountMgr *self, GError **err) { GSList *accounts, *cursor; ModestAccountMgrPrivate *priv; - + const size_t prefix_len = + strlen (MODEST_ACCOUNT_NAMESPACE "/"); + + g_return_val_if_fail (self, NULL); - + priv = MODEST_ACCOUNT_MGR_GET_PRIVATE(self); - return modest_conf_list_subkeys (priv->modest_conf, - MODEST_ACCOUNT_NAMESPACE, - err); + accounts = modest_conf_list_subkeys (priv->modest_conf, + MODEST_ACCOUNT_NAMESPACE, + err); + return strip_prefix_from_elements (accounts, prefix_len); } -gchar* -modest_account_mgr_get_account_string (ModestAccountMgr *self, const gchar *name, - const gchar *key, GError **err) + +static gchar* +get_account_string (ModestAccountMgr *self, const gchar *name, + const gchar *key, gboolean server_account, + GError **err) { ModestAccountMgrPrivate *priv; gchar *keyname; - gchar *retval; + gchar * retval; g_return_val_if_fail (self, NULL); g_return_val_if_fail (name, NULL); g_return_val_if_fail (key, NULL); - keyname = get_account_keyname (name, key); + if (server_account) + keyname = get_server_account_keyname (name, key); + else + keyname = get_account_keyname (name, key); - g_warning ("===> %s", keyname); - priv = MODEST_ACCOUNT_MGR_GET_PRIVATE(self); - - retval = modest_conf_get_string (priv->modest_conf, - keyname, err); - + retval = modest_conf_get_string (priv->modest_conf,keyname,err); g_free (keyname); + return retval; } +gchar* +modest_account_mgr_get_server_account_string (ModestAccountMgr *self, const gchar *name, + const gchar *key, GError **err) +{ + return get_account_string (self, name, key, TRUE, err); +} -gint -modest_account_mgr_get_account_int (ModestAccountMgr *self, const gchar *name, +gchar* +modest_account_mgr_get_account_string (ModestAccountMgr *self, const gchar *name, const gchar *key, GError **err) { + return get_account_string (self, name, key, FALSE, err); +} + + + +static gint +get_account_int (ModestAccountMgr *self, const gchar *name, + const gchar *key, gboolean server_account, + GError **err) +{ ModestAccountMgrPrivate *priv; gchar *keyname; @@ -384,41 +425,85 @@ modest_account_mgr_get_account_int (ModestAccountMgr *self, const gchar *name, g_return_val_if_fail (name, -1); g_return_val_if_fail (key, -1); - keyname = get_account_keyname (name, key); + if (server_account) + keyname = get_server_account_keyname (name, key); + else + keyname = get_account_keyname (name, key); + priv = MODEST_ACCOUNT_MGR_GET_PRIVATE(self); retval = modest_conf_get_int (priv->modest_conf,keyname,err); - g_free (keyname); + return retval; } - -gboolean modest_account_mgr_get_account_bool (ModestAccountMgr *self, const gchar *name, - const gchar *key, GError **err) + +gint +modest_account_mgr_get_server_account_int (ModestAccountMgr *self, const gchar *name, + const gchar *key, GError **err) +{ + return get_account_int (self, name, key, TRUE, err); +} + +gint +modest_account_mgr_get_account_int (ModestAccountMgr *self, const gchar *name, + const gchar *key, GError **err) +{ + return get_account_int (self, name, key, FALSE, err); +} + + + +static gboolean +get_account_bool (ModestAccountMgr *self, const gchar *name, + const gchar *key, gboolean server_account, + GError **err) { ModestAccountMgrPrivate *priv; gchar *keyname; gboolean retval; - g_return_val_if_fail (self, FALSE); - g_return_val_if_fail (name, FALSE); - g_return_val_if_fail (key, FALSE); + g_return_val_if_fail (self, -1); + g_return_val_if_fail (name, -1); + g_return_val_if_fail (key, -1); - keyname = get_account_keyname (name, key); - priv = MODEST_ACCOUNT_MGR_GET_PRIVATE(self); - retval = modest_conf_get_bool (priv->modest_conf,keyname,err); + if (server_account) + keyname = get_server_account_keyname (name, key); + else + keyname = get_account_keyname (name, key); + priv = MODEST_ACCOUNT_MGR_GET_PRIVATE(self); + retval = modest_conf_get_int (priv->modest_conf,keyname,err); g_free (keyname); + return retval; } - -gboolean -modest_account_mgr_set_account_string (ModestAccountMgr *self, const gchar *name, - const gchar *key, const gchar* val, - GError **err) + +gint +modest_account_mgr_get_server_account_bool (ModestAccountMgr *self, const gchar *name, + const gchar *key, GError **err) +{ + return get_account_bool (self, name, key, TRUE, err); +} + +gint +modest_account_mgr_get_account_bool (ModestAccountMgr *self, const gchar *name, + const gchar *key, GError **err) +{ + return get_account_bool (self, name, key, FALSE, err); +} + + + + + +static gboolean +set_account_string (ModestAccountMgr *self, const gchar *name, + const gchar *key, const gchar* val, gboolean server_account, + GError **err) { ModestAccountMgrPrivate *priv; @@ -429,8 +514,13 @@ modest_account_mgr_set_account_string (ModestAccountMgr *self, const gchar *nam g_return_val_if_fail (name, FALSE); g_return_val_if_fail (key, FALSE); - keyname = get_account_keyname (name, key); + if (server_account) + keyname = get_server_account_keyname (name, key); + else + keyname = get_account_keyname (name, key); + priv = MODEST_ACCOUNT_MGR_GET_PRIVATE(self); + retval = modest_conf_set_string (priv->modest_conf,keyname,val,err); g_free (keyname); @@ -439,21 +529,48 @@ modest_account_mgr_set_account_string (ModestAccountMgr *self, const gchar *nam + + gboolean -modest_account_mgr_set_account_int (ModestAccountMgr *self, const gchar *name, - const gchar *key, gint val, GError **err) +modest_account_mgr_set_server_account_string (ModestAccountMgr *self, const gchar *name, + const gchar *key, const gchar* val, + GError **err) +{ + return set_account_string (self, name, key, val, TRUE, err); +} + + + +gboolean +modest_account_mgr_set_account_string (ModestAccountMgr *self, const gchar *name, + const gchar *key, const gchar* val, + GError **err) +{ + return set_account_string (self, name, key, val, FALSE, err); +} + + +static gboolean +set_account_int (ModestAccountMgr *self, const gchar *name, + const gchar *key, gboolean server_account, int val, + GError **err) { ModestAccountMgrPrivate *priv; - + gchar *keyname; gboolean retval; - g_return_val_if_fail (self, -1); - g_return_val_if_fail (name, -1); - g_return_val_if_fail (key, -1); + g_return_val_if_fail (self, FALSE); + g_return_val_if_fail (name, FALSE); + g_return_val_if_fail (key, FALSE); + + if (server_account) + keyname = get_server_account_keyname (name, key); + else + keyname = get_account_keyname (name, key); - keyname = get_account_keyname (name, key); priv = MODEST_ACCOUNT_MGR_GET_PRIVATE(self); + retval = modest_conf_set_int (priv->modest_conf,keyname,val,err); g_free (keyname); @@ -462,13 +579,33 @@ modest_account_mgr_set_account_int (ModestAccountMgr *self, const gchar *name, +gboolean +modest_account_mgr_set_server_account_int (ModestAccountMgr *self, const gchar *name, + const gchar *key, int val, + GError **err) +{ + return set_account_int (self, name, key, val, TRUE, err); +} + gboolean -modest_account_mgr_set_account_bool (ModestAccountMgr *self, const gchar *name, - const gchar *key, gboolean val, GError **err) +modest_account_mgr_set_account_int (ModestAccountMgr *self, const gchar *name, + const gchar *key, int val, + GError **err) +{ + return set_account_int (self, name, key, val, FALSE, err); +} + + + + +static gboolean +set_account_bool (ModestAccountMgr *self, const gchar *name, + const gchar *key, gboolean server_account, gboolean val, + GError **err) { ModestAccountMgrPrivate *priv; - + gchar *keyname; gboolean retval; @@ -476,8 +613,13 @@ modest_account_mgr_set_account_bool (ModestAccountMgr *self, const gchar *name, g_return_val_if_fail (name, FALSE); g_return_val_if_fail (key, FALSE); - keyname = get_account_keyname (name, key); + if (server_account) + keyname = get_server_account_keyname (name, key); + else + keyname = get_account_keyname (name, key); + priv = MODEST_ACCOUNT_MGR_GET_PRIVATE(self); + retval = modest_conf_set_bool (priv->modest_conf,keyname,val,err); g_free (keyname); @@ -486,19 +628,44 @@ modest_account_mgr_set_account_bool (ModestAccountMgr *self, const gchar *name, gboolean -modest_account_mgr_account_exists (ModestAccountMgr *self, const gchar *name, - GError **err) +modest_account_mgr_set_server_account_bool (ModestAccountMgr *self, const gchar *name, + const gchar *key, gboolean val, + GError **err) +{ + return set_account_bool (self, name, key, val, TRUE, err); +} + + + +gboolean +modest_account_mgr_set_account_bool (ModestAccountMgr *self, const gchar *name, + const gchar *key, gboolean val, + GError **err) +{ + return set_account_bool (self, name, key, val, FALSE, err); +} + + + + + +gboolean +account_exists (ModestAccountMgr *self, const gchar *name, gboolean server_account, + GError **err) { ModestAccountMgrPrivate *priv; - + gchar *keyname; gboolean retval; g_return_val_if_fail (self, FALSE); g_return_val_if_fail (name, FALSE); - - keyname = get_account_keyname (name, NULL); - + + if (server_account) + keyname = get_account_keyname (name, NULL); + else + keyname = get_server_account_keyname (name, NULL); + priv = MODEST_ACCOUNT_MGR_GET_PRIVATE(self); retval = modest_conf_key_exists (priv->modest_conf,keyname,err); @@ -507,6 +674,23 @@ modest_account_mgr_account_exists (ModestAccountMgr *self, const gchar *name, } +gboolean +modest_account_mgr_server_account_exists (ModestAccountMgr *self, const gchar *name, + GError **err) +{ + return account_exists (self, name, TRUE, err); +} + + + +gboolean +modest_account_mgr_account_exists (ModestAccountMgr *self, const gchar *name, + GError **err) +{ + return account_exists (self, name, FALSE, err); +} + + /* must be freed by caller */ static gchar* @@ -514,9 +698,25 @@ get_account_keyname (const gchar *accname, const gchar *name) { if (name) return g_strconcat - (accname, "/", name, NULL); + (MODEST_ACCOUNT_NAMESPACE, "/", + accname, "/", name, NULL); else - return g_strconcat - (accname, NULL); + return g_strconcat + (MODEST_ACCOUNT_NAMESPACE, "/", + accname, NULL); } + +/* must be freed by caller */ +static gchar* +get_server_account_keyname (const gchar *accname, const gchar *name) +{ + if (name) + return g_strconcat + (MODEST_SERVER_ACCOUNT_NAMESPACE, "/", + accname, "/", name, NULL); + else + return g_strconcat + (MODEST_SERVER_ACCOUNT_NAMESPACE, "/", + accname, NULL); +}