+ return tny_account;
+}
+
+
+
+gboolean
+modest_tny_account_update_from_server_account_name (TnyAccount *tny_account,
+ ModestAccountMgr *account_mgr,
+ const gchar *server_account_name)
+{
+ ModestServerAccountData *account_data;
+ gboolean valid_account_type;
+
+ g_return_val_if_fail (tny_account, FALSE);
+ g_return_val_if_fail (server_account_name, FALSE);
+
+ account_data = modest_account_mgr_get_server_account_data (account_mgr,
+ server_account_name);
+ if (!account_data) {
+ g_warning ("%s: failed to get server account data for %s",
+ __FUNCTION__, server_account_name);
+ return FALSE;
+ }
+
+ valid_account_type = FALSE;
+
+ /* you cannot change the protocol type of an existing account;
+ * so double check we don't even try
+ */
+ switch (account_data->proto) {
+ case MODEST_PROTOCOL_TRANSPORT_SENDMAIL:
+ case MODEST_PROTOCOL_TRANSPORT_SMTP:
+ if (!TNY_IS_CAMEL_TRANSPORT_ACCOUNT(tny_account))
+ g_warning ("%s: expecting transport account", __FUNCTION__);
+ else
+ valid_account_type = TRUE;
+ break;
+ case MODEST_PROTOCOL_STORE_POP:
+ if (!TNY_IS_CAMEL_POP_STORE_ACCOUNT(tny_account))
+ g_warning ("%s: expecting pop account", __FUNCTION__);
+ else
+ valid_account_type = TRUE;
+ break;
+ case MODEST_PROTOCOL_STORE_IMAP:
+ if (!TNY_IS_CAMEL_IMAP_STORE_ACCOUNT(tny_account))
+ g_warning ("%s: expecting imap account", __FUNCTION__);
+ else
+ valid_account_type = TRUE;
+ break;
+ case MODEST_PROTOCOL_STORE_MAILDIR:
+ case MODEST_PROTOCOL_STORE_MBOX:
+ if (!TNY_IS_CAMEL_STORE_ACCOUNT(tny_account))
+ g_warning ("%s: expecting store account", __FUNCTION__);
+ else
+ valid_account_type = TRUE;
+ break;
+ default:
+ g_warning ("invalid account type");
+ }
+
+ if (!valid_account_type) {
+ g_warning ("%s: protocol type cannot be changed", __FUNCTION__);
+ modest_account_mgr_free_server_account_data (account_mgr, account_data);
+ return FALSE;
+ }
+
+ if (!update_tny_account (tny_account, account_mgr, account_data)) {
+ g_warning ("%s: failed to update account", __FUNCTION__);
+ modest_account_mgr_free_server_account_data (account_mgr, account_data);
+ return FALSE;
+ }
+
+ modest_account_mgr_free_server_account_data (account_mgr, account_data);
+ return TRUE;