X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-account-mgr-helpers.c;h=9ff28f37ead617a7dd54d81dd9c00ba528141942;hp=587239763983eea3c9ef13ae356cf203117567c6;hb=46f5f01a6cf826f2a76914f770daea7c87b9e7d7;hpb=a723c1089de35ccf9e01c54e016528e8984b0389 diff --git a/src/modest-account-mgr-helpers.c b/src/modest-account-mgr-helpers.c index 5872397..9ff28f3 100644 --- a/src/modest-account-mgr-helpers.c +++ b/src/modest-account-mgr-helpers.c @@ -57,14 +57,6 @@ gboolean modest_account_mgr_set_signature (ModestAccountMgr *self, const gchar* return result; } -gchar* modest_account_mgr_get_display_name (ModestAccountMgr *self, - const gchar* name) -{ - return modest_account_mgr_get_string (self, name, MODEST_ACCOUNT_DISPLAY_NAME, FALSE); -} - - - gchar* modest_account_mgr_get_signature (ModestAccountMgr *self, const gchar* name, gboolean* use_signature) { @@ -75,31 +67,63 @@ gchar* modest_account_mgr_get_signature (ModestAccountMgr *self, const gchar* na return modest_account_mgr_get_string (self, name, MODEST_ACCOUNT_SIGNATURE, FALSE); } + + +ModestTransportStoreProtocol modest_account_mgr_get_store_protocol (ModestAccountMgr *self, const gchar* name) +{ + ModestTransportStoreProtocol result = MODEST_PROTOCOL_STORE_POP; /* Arbitrary default */ + + gchar *server_account_name = modest_account_mgr_get_string (self, name, + MODEST_ACCOUNT_STORE_ACCOUNT, + FALSE); + if (server_account_name) { + ModestServerAccountData* server_data = + modest_account_mgr_get_server_account_data (self, server_account_name); + result = server_data->proto; + + modest_account_mgr_free_server_account_data (self, server_data); + + g_free (server_account_name); + } + return result; +} gboolean modest_account_mgr_set_connection_specific_smtp (ModestAccountMgr *self, - const gchar* account_name, const gchar* connection_name, const gchar* server_account_name) { - modest_account_mgr_remove_connection_specific_smtp (self, account_name, connection_name); + modest_account_mgr_remove_connection_specific_smtp (self, connection_name); - GSList *list = modest_account_mgr_get_list (self, account_name, - MODEST_ACCOUNT_CONNECTION_SPECIFIC_SMTP_LIST, - MODEST_CONF_VALUE_STRING, FALSE); - - /* The server account is in the item after the connection name: */ - GSList *list_connection = g_slist_append (list, (gpointer)connection_name); - list_connection = g_slist_append (list_connection, (gpointer)server_account_name); - - /* Reset the changed list: */ - modest_account_mgr_set_list (self, account_name, - MODEST_ACCOUNT_CONNECTION_SPECIFIC_SMTP_LIST, list_connection, - MODEST_CONF_VALUE_STRING, FALSE); + ModestConf *conf = MODEST_ACCOUNT_MGR_GET_PRIVATE (self)->modest_conf; + + gboolean result = TRUE; + GError *err = NULL; + GSList *list = modest_conf_get_list (conf, MODEST_CONF_CONNECTION_SPECIFIC_SMTP_LIST, + MODEST_CONF_VALUE_STRING, &err); + if (err) { + g_printerr ("modest: %s: error getting list: %s.\n", __FUNCTION__, err->message); + g_error_free (err); + err = NULL; + result = FALSE; + } else { + /* The server account is in the item after the connection name: */ + list = g_slist_append (list, (gpointer)connection_name); + list = g_slist_append (list, (gpointer)server_account_name); + + /* Reset the changed list: */ + modest_conf_set_list (conf, MODEST_CONF_CONNECTION_SPECIFIC_SMTP_LIST, list, + MODEST_CONF_VALUE_STRING, &err); + if (err) { + g_printerr ("modest: %s: error setting list: %s.\n", __FUNCTION__, err->message); + g_error_free (err); + result = FALSE; + } + } /* TODO: Should we free the items too, or just the list? */ g_slist_free (list); - return TRUE; + return result; } /** @@ -113,65 +137,87 @@ gboolean modest_account_mgr_set_connection_specific_smtp (ModestAccountMgr *self * Returns: TRUE if it worked, FALSE otherwise */ gboolean modest_account_mgr_remove_connection_specific_smtp (ModestAccountMgr *self, - const gchar* account_name, const gchar* connection_name) + const gchar* connection_name) { - GSList *list = modest_account_mgr_get_list (self, account_name, - MODEST_ACCOUNT_CONNECTION_SPECIFIC_SMTP_LIST, - MODEST_CONF_VALUE_STRING, FALSE); + ModestAccountMgrPrivate *priv = MODEST_ACCOUNT_MGR_GET_PRIVATE (self); + + gboolean result = TRUE; + GError *err = NULL; + GSList *list = modest_conf_get_list (priv->modest_conf, + MODEST_CONF_CONNECTION_SPECIFIC_SMTP_LIST, + MODEST_CONF_VALUE_STRING, &err); + if (err) { + g_printerr ("modest: %s: error getting list: %s.\n", __FUNCTION__, err->message); + g_error_free (err); + err = NULL; + result = FALSE; + } + if (!list) return FALSE; /* The server account is in the item after the connection name: */ GSList *list_connection = g_slist_find_custom (list, connection_name, (GCompareFunc)strcmp); if (list_connection) { + GSList *account_node = g_slist_next (list_connection); /* remove both items: */ - GSList *temp = g_slist_delete_link(list_connection, list_connection); - temp = g_slist_delete_link(temp, g_slist_next(temp)); + list = g_slist_delete_link(list, list_connection); + list = g_slist_delete_link(list, account_node); } /* Reset the changed list: */ - modest_account_mgr_set_list (self, account_name, - MODEST_ACCOUNT_CONNECTION_SPECIFIC_SMTP_LIST, list, - MODEST_CONF_VALUE_STRING, FALSE); + modest_conf_set_list (priv->modest_conf, MODEST_CONF_CONNECTION_SPECIFIC_SMTP_LIST, list, + MODEST_CONF_VALUE_STRING, &err); + if (err) { + g_printerr ("modest: %s: error setting list: %s.\n", __FUNCTION__, err->message); + g_error_free (err); + result = FALSE; + } /* TODO: Should we free the items too, or just the list? */ g_slist_free (list); - return TRUE; + return result; } -gboolean modest_account_mgr_get_has_connection_specific_smtp (ModestAccountMgr *self, const gchar* account_name) + +gboolean modest_account_mgr_get_use_connection_specific_smtp (ModestAccountMgr *self, const gchar* account_name) { - GSList *list = modest_account_mgr_get_list (self, account_name, - MODEST_ACCOUNT_CONNECTION_SPECIFIC_SMTP_LIST, - MODEST_CONF_VALUE_STRING, FALSE); - if (!list) - return FALSE; - - /* TODO: Should we free the items too, or just the list? */ - g_slist_free (list); - - return TRUE; + return modest_account_mgr_get_bool (self, account_name, + MODEST_ACCOUNT_USE_CONNECTION_SPECIFIC_SMTP, FALSE); +} + +gboolean modest_account_mgr_set_use_connection_specific_smtp (ModestAccountMgr *self, const gchar* account_name, + gboolean new_value) +{ + return modest_account_mgr_set_bool (self, account_name, MODEST_ACCOUNT_USE_CONNECTION_SPECIFIC_SMTP, + new_value, FALSE); } /** * modest_account_mgr_get_connection_specific_smtp * @self: a ModestAccountMgr instance - * @name: the account name * @connection_name: A libconic IAP connection name * * Retrieve a server account to use with this specific connection for this account. * * Returns: a server account name to use for this connection, or NULL if none is specified. */ -gchar* modest_account_mgr_get_connection_specific_smtp (ModestAccountMgr *self, const gchar* account_name, - const gchar* connection_name) +gchar* modest_account_mgr_get_connection_specific_smtp (ModestAccountMgr *self, const gchar* connection_name) { gchar *result = NULL; - GSList *list = modest_account_mgr_get_list (self, account_name, - MODEST_ACCOUNT_CONNECTION_SPECIFIC_SMTP_LIST, - MODEST_CONF_VALUE_STRING, FALSE); + ModestAccountMgrPrivate *priv = MODEST_ACCOUNT_MGR_GET_PRIVATE (self); + + GError *err = NULL; + GSList *list = modest_conf_get_list (priv->modest_conf, MODEST_CONF_CONNECTION_SPECIFIC_SMTP_LIST, + MODEST_CONF_VALUE_STRING, &err); + if (err) { + g_printerr ("modest: %s: error getting list: %s.\n", __FUNCTION__, err->message); + g_error_free (err); + err = NULL; + } + if (!list) return NULL; @@ -210,19 +256,19 @@ gchar* modest_account_mgr_get_connection_specific_smtp (ModestAccountMgr *self, } gchar* -modest_server_account_get_username (ModestAccountMgr *self, const gchar* account_name) +modest_account_mgr_get_server_account_username (ModestAccountMgr *self, const gchar* account_name) { return modest_account_mgr_get_string (self, account_name, MODEST_ACCOUNT_USERNAME, TRUE /* server account */); } void -modest_server_account_set_username (ModestAccountMgr *self, const gchar* account_name, +modest_account_mgr_set_server_account_username (ModestAccountMgr *self, const gchar* account_name, const gchar* username) { /* Note that this won't work properly as long as the gconf cache is broken * in Maemo Bora: */ - gchar *existing_username = modest_server_account_get_username(self, + gchar *existing_username = modest_account_mgr_get_server_account_username(self, account_name); modest_account_mgr_set_string (self, account_name, MODEST_ACCOUNT_USERNAME, @@ -230,42 +276,80 @@ modest_server_account_set_username (ModestAccountMgr *self, const gchar* account /* We don't know anything about new usernames: */ if (strcmp (existing_username, username) != 0) - modest_server_account_set_username_has_succeeded (self, - account_name, FALSE); + modest_account_mgr_get_server_account_username_has_succeeded (self, account_name); g_free (existing_username); } gboolean -modest_server_account_get_username_has_succeeded (ModestAccountMgr *self, const gchar* account_name) +modest_account_mgr_get_server_account_username_has_succeeded (ModestAccountMgr *self, const gchar* account_name) { return modest_account_mgr_get_bool (self, account_name, MODEST_ACCOUNT_USERNAME_HAS_SUCCEEDED, TRUE /* server account */); } void -modest_server_account_set_username_has_succeeded (ModestAccountMgr *self, const gchar* account_name, - gboolean succeeded) +modest_account_mgr_set_server_account_username_has_succeeded (ModestAccountMgr *self, + const gchar* account_name, + gboolean succeeded) { modest_account_mgr_set_bool (self, account_name, MODEST_ACCOUNT_USERNAME_HAS_SUCCEEDED, succeeded, TRUE /* server account */); } void -modest_server_account_set_password (ModestAccountMgr *self, const gchar* account_name, +modest_account_mgr_set_server_account_password (ModestAccountMgr *self, const gchar* account_name, const gchar* password) { modest_account_mgr_set_string (self, account_name, MODEST_ACCOUNT_PASSWORD, password, TRUE /* server account */); } + gchar* -modest_server_account_get_hostname (ModestAccountMgr *self, const gchar* account_name) +modest_account_mgr_get_server_account_password (ModestAccountMgr *self, const gchar* account_name) +{ + return modest_account_mgr_get_string (self, account_name, MODEST_ACCOUNT_PASSWORD, + TRUE /* server account */); +} + +gboolean +modest_account_mgr_get_server_account_has_password (ModestAccountMgr *self, const gchar* account_name) { - return modest_account_mgr_get_string (self, account_name, MODEST_ACCOUNT_HOSTNAME, + gboolean result = FALSE; + gchar *password = modest_account_mgr_get_string (self, account_name, MODEST_ACCOUNT_PASSWORD, TRUE /* server account */); + if (password && strlen (password)) { + result = TRUE; + } + + g_free (password); + return result; +} + + +gchar* +modest_account_mgr_get_server_account_hostname (ModestAccountMgr *self, + const gchar* account_name) +{ + return modest_account_mgr_get_string (self, + account_name, + MODEST_ACCOUNT_HOSTNAME, + TRUE /* server account */); } +void +modest_account_mgr_set_server_account_hostname (ModestAccountMgr *self, + const gchar *server_account_name, + const gchar *hostname) +{ + modest_account_mgr_set_string (self, + server_account_name, + MODEST_ACCOUNT_HOSTNAME, + hostname, + TRUE /* server account */); +} + static ModestAuthProtocol get_secure_auth_for_conf_string(const gchar* value) @@ -284,7 +368,7 @@ get_secure_auth_for_conf_string(const gchar* value) } ModestAuthProtocol -modest_server_account_get_secure_auth (ModestAccountMgr *self, +modest_account_mgr_get_server_account_secure_auth (ModestAccountMgr *self, const gchar* account_name) { ModestAuthProtocol result = MODEST_PROTOCOL_AUTH_NONE; @@ -301,7 +385,7 @@ modest_server_account_get_secure_auth (ModestAccountMgr *self, void -modest_server_account_set_secure_auth (ModestAccountMgr *self, +modest_account_mgr_set_server_account_secure_auth (ModestAccountMgr *self, const gchar* account_name, ModestAuthProtocol secure_auth) { /* Get the conf string for the enum value: */ @@ -335,7 +419,7 @@ get_security_for_conf_string(const gchar* value) } ModestConnectionProtocol -modest_server_account_get_security (ModestAccountMgr *self, +modest_account_mgr_get_server_account_security (ModestAccountMgr *self, const gchar* account_name) { ModestConnectionProtocol result = MODEST_PROTOCOL_CONNECTION_NORMAL; @@ -351,7 +435,7 @@ modest_server_account_get_security (ModestAccountMgr *self, } void -modest_server_account_set_security (ModestAccountMgr *self, +modest_account_mgr_set_server_account_security (ModestAccountMgr *self, const gchar* account_name, ModestConnectionProtocol security) { /* Get the conf string for the enum value: */ @@ -428,8 +512,9 @@ modest_account_mgr_free_server_account_data (ModestAccountMgr *self, /** You must use modest_account_mgr_free_account_data() on the result. */ -ModestAccountData* -modest_account_mgr_get_account_data (ModestAccountMgr *self, const gchar* name) +ModestAccountData * +modest_account_mgr_get_account_data (ModestAccountMgr *self, + const gchar* name) { ModestAccountData *data; gchar *server_account; @@ -506,98 +591,62 @@ modest_account_mgr_free_account_data (ModestAccountMgr *self, ModestAccountData g_slice_free (ModestAccountData, data); } - -gchar* -modest_account_mgr_get_default_account (ModestAccountMgr *self) +gint +on_accounts_list_sort_by_title(gconstpointer a, gconstpointer b) { - gchar *account; - ModestConf *conf; - GError *err = NULL; - - g_return_val_if_fail (self, NULL); - - conf = MODEST_ACCOUNT_MGR_GET_PRIVATE (self)->modest_conf; - account = modest_conf_get_string (conf, MODEST_CONF_DEFAULT_ACCOUNT, &err); - - if (err) { - g_printerr ("modest: failed to get '%s': %s\n", - MODEST_CONF_DEFAULT_ACCOUNT, err->message); - g_error_free (err); - g_free (account); - return NULL; - } - - /* sanity check */ - if (account && !modest_account_mgr_account_exists (self, account, FALSE)) { - g_printerr ("modest: default account does not exist\n"); - g_free (account); - return NULL; - } - - return account; + return g_utf8_collate((const gchar*)a, (const gchar*)b); } - -gboolean -modest_account_mgr_set_default_account (ModestAccountMgr *self, const gchar* account) +/** Get the first one, alphabetically, by title. */ +gchar* +modest_account_mgr_get_first_account_name (ModestAccountMgr *self) { - ModestConf *conf; - - g_return_val_if_fail (self, FALSE); - g_return_val_if_fail (account, FALSE); - g_return_val_if_fail (modest_account_mgr_account_exists (self, account, FALSE), - FALSE); - - conf = MODEST_ACCOUNT_MGR_GET_PRIVATE (self)->modest_conf; - - return modest_conf_set_string (conf, MODEST_CONF_DEFAULT_ACCOUNT, - account, NULL); + const gchar* account_name = NULL; + GSList *account_names = modest_account_mgr_account_names (self, TRUE /* only enabled */); -} + /* Return TRUE if there is no account */ + if (!account_names) + return NULL; -gboolean -modest_account_mgr_unset_default_account (ModestAccountMgr *self) -{ - ModestConf *conf; - - g_return_val_if_fail (self, FALSE); + /* Get the first one, alphabetically, by title: */ + /* gchar *old_default = modest_account_mgr_get_default_account (self); */ + GSList* list_sorted = g_slist_sort (account_names, on_accounts_list_sort_by_title); - conf = MODEST_ACCOUNT_MGR_GET_PRIVATE (self)->modest_conf; - - return modest_conf_remove_key (conf, MODEST_CONF_DEFAULT_ACCOUNT, NULL /* err */); + GSList* iter = list_sorted; + gboolean found = FALSE; + while (iter && !found) { + account_name = (const gchar*)list_sorted->data; -} + if (account_name) + found = TRUE; -gint on_accounts_list_sort_by_title(gconstpointer a, gconstpointer b) -{ - return g_utf8_collate((const gchar*)a, (const gchar*)b); -} + if (!found) + iter = g_slist_next (iter); + } + gchar* result = NULL; + if (account_name) + result = g_strdup (account_name); + + modest_account_mgr_free_account_names (account_names); + account_names = NULL; -static void -free_element (gpointer data, gpointer user_data) -{ - g_free (data); + return result; } gboolean -modest_account_mgr_set_first_account_as_default (ModestAccountMgr *self) +modest_account_mgr_set_first_account_as_default (ModestAccountMgr *self) { gboolean result = FALSE; - GSList *account_names = modest_account_mgr_account_names (self, TRUE /* only enabled */); - - /* Get the first one, alphabetically, by title: */ - GSList* list_sorted = g_slist_sort (account_names, - on_accounts_list_sort_by_title); - if(list_sorted) { - const gchar* account_name = (const gchar*)list_sorted->data; - if (account_name) - result = modest_account_mgr_set_default_account (self, account_name); - } - - g_slist_foreach (account_names, free_element, NULL); - g_slist_free (account_names); + gchar* account_name = modest_account_mgr_get_first_account_name(self); + if (account_name) { + result = modest_account_mgr_set_default_account (self, account_name); + g_free (account_name); + } + else + result = TRUE; /* If there are no accounts then it's not a failure. */ + return result; } @@ -709,3 +758,152 @@ modest_account_mgr_get_unused_account_display_name (ModestAccountMgr *self, cons return account_name; } + +void +modest_account_mgr_set_leave_on_server (ModestAccountMgr *self, + const gchar *account_name, + gboolean leave_on_server) +{ + modest_account_mgr_set_bool (self, + account_name, + MODEST_ACCOUNT_LEAVE_ON_SERVER, + leave_on_server, + FALSE); +} + +gboolean +modest_account_mgr_get_leave_on_server (ModestAccountMgr *self, + const gchar* account_name) +{ + return modest_account_mgr_get_bool (self, + account_name, + MODEST_ACCOUNT_LEAVE_ON_SERVER, + FALSE); +} + +gint +modest_account_mgr_get_last_updated (ModestAccountMgr *self, + const gchar* account_name) +{ + return modest_account_mgr_get_int (modest_runtime_get_account_mgr (), + account_name, + MODEST_ACCOUNT_LAST_UPDATED, + TRUE); +} + +void +modest_account_mgr_set_last_updated (ModestAccountMgr *self, + const gchar* account_name, + gint time) +{ + modest_account_mgr_set_int (self, + account_name, + MODEST_ACCOUNT_LAST_UPDATED, + time, + TRUE); + + /* TODO: notify about changes */ +} + +gint +modest_account_mgr_get_retrieve_limit (ModestAccountMgr *self, + const gchar* account_name) +{ + return modest_account_mgr_get_int (self, + account_name, + MODEST_ACCOUNT_LIMIT_RETRIEVE, + FALSE); +} + +void +modest_account_mgr_set_retrieve_limit (ModestAccountMgr *self, + const gchar* account_name, + gint limit_retrieve) +{ + modest_account_mgr_set_int (self, + account_name, + MODEST_ACCOUNT_LIMIT_RETRIEVE, + limit_retrieve, + FALSE /* not server account */); +} + +gint +modest_account_mgr_get_server_account_port (ModestAccountMgr *self, + const gchar* account_name) +{ + return modest_account_mgr_get_int (self, + account_name, + MODEST_ACCOUNT_PORT, + TRUE); +} + +void +modest_account_mgr_set_server_account_port (ModestAccountMgr *self, + const gchar *account_name, + gint port_num) +{ + modest_account_mgr_set_int (self, + account_name, + MODEST_ACCOUNT_PORT, + port_num, TRUE /* server account */); +} + +gchar* +modest_account_mgr_get_server_account_name (ModestAccountMgr *self, + const gchar *account_name, + TnyAccountType account_type) +{ + return modest_account_mgr_get_string (self, + account_name, + (account_type == TNY_ACCOUNT_TYPE_STORE) ? + MODEST_ACCOUNT_STORE_ACCOUNT : + MODEST_ACCOUNT_TRANSPORT_ACCOUNT, + FALSE); +} + +gchar* +modest_account_mgr_get_retrieve_type (ModestAccountMgr *self, + const gchar *account_name) +{ + return modest_account_mgr_get_string (self, + account_name, + MODEST_ACCOUNT_RETRIEVE, + FALSE /* not server account */); +} + +void +modest_account_mgr_set_retrieve_type (ModestAccountMgr *self, + const gchar *account_name, + const gchar *retrieve_type) +{ + modest_account_mgr_set_string (self, + account_name, + MODEST_ACCOUNT_RETRIEVE, + retrieve_type, + FALSE /* not server account */); +} + + +void +modest_account_mgr_set_user_fullname (ModestAccountMgr *self, + const gchar *account_name, + const gchar *fullname) +{ + modest_account_mgr_set_string (self, + account_name, + MODEST_ACCOUNT_FULLNAME, + fullname, + FALSE /* not server account */); +} + +void +modest_account_mgr_set_user_email (ModestAccountMgr *self, + const gchar *account_name, + const gchar *email) +{ + modest_account_mgr_set_string (self, + account_name, + MODEST_ACCOUNT_EMAIL, + email, + FALSE /* not server account */); +}