X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-account-mgr.c;h=bc6d51b9317d8e2c0b0e3f7f39f66eb68007631c;hp=93d7b20652745d899624bfc5e12550903f48d2fb;hb=118aa5e8529157fb47b0db7241c7c29b7306cb8a;hpb=ba5187c9230d966f02ddc196f3cbb626ce672cde diff --git a/src/modest-account-mgr.c b/src/modest-account-mgr.c index 93d7b20..bc6d51b 100644 --- a/src/modest-account-mgr.c +++ b/src/modest-account-mgr.c @@ -721,6 +721,26 @@ modest_account_mgr_remove_account (ModestAccountMgr * self, return TRUE; } +gboolean +modest_account_mgr_remove_server_account (ModestAccountMgr * self, + const gchar* name) +{ + ModestAccountMgrPrivate *priv; + + g_return_val_if_fail (MODEST_IS_ACCOUNT_MGR(self), FALSE); + g_return_val_if_fail (name, FALSE); + + if (!modest_account_mgr_account_exists (self, name, TRUE)) { + g_printerr ("modest: %s: server account '%s' does not exist\n", __FUNCTION__, name); + return FALSE; + } + + priv = MODEST_ACCOUNT_MGR_GET_PRIVATE (self); + real_remove_account (priv->modest_conf, name, TRUE); + + return TRUE; +} + /* strip the first /n/ character from each element @@ -746,7 +766,8 @@ modest_account_mgr_account_names (ModestAccountMgr * self, gboolean only_enabled ModestAccountMgrPrivate *priv; GError *err = NULL; - const size_t prefix_len = strlen (MODEST_ACCOUNT_NAMESPACE "/"); + /* we add 1 for the trailing "/" */ + const size_t prefix_len = strlen (MODEST_ACCOUNT_NAMESPACE) + 1; g_return_val_if_fail (self, NULL); @@ -768,9 +789,11 @@ modest_account_mgr_account_names (ModestAccountMgr * self, gboolean only_enabled /* Unescape the keys to get the account names: */ GSList *iter = accounts; while (iter) { - if (!(iter->data)) + if (!(iter->data)) { + iter = iter->next; continue; - + } + const gchar* account_name_key = (const gchar*)iter->data; gchar* unescaped_name = account_name_key ? modest_conf_key_unescape (account_name_key) @@ -1132,6 +1155,7 @@ modest_account_mgr_account_with_display_name_exists (ModestAccountMgr *self, ModestAccountSettings *settings = modest_account_mgr_load_account_settings (self, account_name); if (!settings) { g_printerr ("modest: failed to get account data for %s\n", account_name); + cursor = cursor->next; continue; } @@ -1210,6 +1234,7 @@ modest_account_mgr_check_already_configured_account (ModestAccountMgr *self, from_mgr_settings = modest_account_mgr_load_account_settings (self, account_name); if (!settings) { g_printerr ("modest: failed to get account data for %s\n", account_name); + cursor = cursor->next; continue; } @@ -1273,8 +1298,8 @@ _modest_account_mgr_account_from_key (const gchar *key, gboolean *is_account_key if (is_server_account) *is_server_account = FALSE; - const gchar* account_ns = MODEST_ACCOUNT_NAMESPACE "/"; - const gchar* server_account_ns = MODEST_SERVER_ACCOUNT_NAMESPACE "/"; + const gchar* account_ns = modest_defs_namespace (MODEST_ACCOUNT_SUBNAMESPACE "/"); + const gchar* server_account_ns = modest_defs_namespace (MODEST_SERVER_ACCOUNT_SUBNAMESPACE "/"); gchar *cursor; gchar *account = NULL; @@ -1345,7 +1370,7 @@ _modest_account_mgr_get_account_keyname (const gchar *account_name, const gchar* gboolean server_account) { gchar *retval = NULL; - gchar *namespace = server_account ? MODEST_SERVER_ACCOUNT_NAMESPACE : MODEST_ACCOUNT_NAMESPACE; + gchar *namespace = server_account ? (gchar *) MODEST_SERVER_ACCOUNT_NAMESPACE : (gchar *) MODEST_ACCOUNT_NAMESPACE; gchar *escaped_account_name, *escaped_name; if (!account_name) @@ -1529,8 +1554,8 @@ modest_account_mgr_notify_account_update (ModestAccountMgr* self, proto_name = modest_account_mgr_get_string (self, server_account_name, MODEST_ACCOUNT_PROTO, TRUE); if (!proto_name) { - g_free (proto_name); g_return_if_reached (); + return; } proto = modest_protocol_get_type_id (modest_protocol_registry_get_protocol_by_name (protocol_registry, MODEST_PROTOCOL_REGISTRY_TRANSPORT_STORE_PROTOCOLS, @@ -1591,7 +1616,6 @@ modest_account_mgr_get_default_account (ModestAccountMgr *self) g_printerr ("modest: failed to get '%s': %s\n", MODEST_CONF_DEFAULT_ACCOUNT, err->message); g_error_free (err); - g_free (account); return NULL; } @@ -1651,3 +1675,28 @@ modest_account_mgr_set_display_name (ModestAccountMgr *self, if (notify) g_signal_emit (self, signals[DISPLAY_NAME_CHANGED_SIGNAL], 0, account_name); } + +gboolean +modest_account_mgr_singleton_protocol_exists (ModestAccountMgr *mgr, + ModestProtocolType protocol_type) +{ + GSList *account_names, *node; + gboolean found = FALSE; + + g_return_val_if_fail (MODEST_IS_ACCOUNT_MGR (mgr), FALSE); + account_names = modest_account_mgr_account_names (mgr, TRUE); + + for (node = account_names; node != NULL; node = g_slist_next (node)) { + ModestProtocolType current_protocol; + + current_protocol = modest_account_mgr_get_store_protocol (mgr, (gchar *) node->data); + if (current_protocol == protocol_type) { + found = TRUE; + break; + } + } + + modest_account_mgr_free_account_names (account_names); + + return found; +}