+
+static void
+set_online_callback (TnyCamelAccount *account, gboolean canceled, GError *err, gpointer user_data)
+{
+ TnyAccountStore *account_store;
+
+ account_store = TNY_ACCOUNT_STORE(g_object_get_data (G_OBJECT(account),
+ "account_store"));
+ if (err && !canceled) {
+ /* It seems err is forgotten here ... if the disk is full ! */
+ if (account_store) {
+ tny_account_store_alert (
+ account_store,
+ TNY_ACCOUNT (account), TNY_ALERT_TYPE_ERROR, FALSE,
+ err);
+ }
+ g_debug ("err: %s", err->message);
+ }
+}
+
+gboolean
+modest_tny_account_update_from_account (TnyAccount *tny_account,
+ TnyGetPassFunc get_pass_func,
+ TnyForgetPassFunc forget_pass_func)
+{
+ ModestAccountSettings *settings = NULL;
+ ModestServerAccountSettings *server_settings = NULL;
+ ModestAccountMgr *account_mgr;
+ const gchar *account_name;
+ TnyAccountType type;
+ const gchar *display_name;
+ TnyConnectionStatus conn_status;
+ TnyConnectionPolicy *policy;
+
+ g_return_val_if_fail (tny_account, FALSE);
+
+ account_mgr = modest_runtime_get_account_mgr ();
+ account_name = modest_tny_account_get_parent_modest_account_name_for_server_account (tny_account);
+ type = tny_account_get_account_type (tny_account);
+ settings = modest_account_mgr_load_account_settings (account_mgr, account_name);
+ if (!settings) {
+ g_printerr ("modest: %s: cannot get account data for account %s\n",
+ __FUNCTION__, account_name);
+ return FALSE;
+ }
+
+ display_name = modest_account_settings_get_display_name (settings);
+
+ if (type == TNY_ACCOUNT_TYPE_STORE)
+ server_settings = modest_account_settings_get_store_settings (settings);
+ else if (type == TNY_ACCOUNT_TYPE_TRANSPORT)
+ server_settings = modest_account_settings_get_transport_settings (settings);
+
+ if (modest_server_account_settings_get_account_name (server_settings) == NULL) {
+ g_printerr ("modest: no %s account defined for '%s'\n",
+ type == TNY_ACCOUNT_TYPE_STORE ? "store" : "transport",
+ display_name);
+ g_object_unref (server_settings);
+ g_object_unref (settings);
+ return FALSE;
+ }
+
+ update_tny_account (tny_account, server_settings);
+
+ /* This name is what shows up in the folder view -- so for some POP/IMAP/... server
+ * account, we set its name to the account of which it is part. */
+
+ if (display_name)
+ tny_account_set_name (tny_account, display_name);
+
+ g_object_unref (server_settings);
+ g_object_unref (settings);
+
+ policy = modest_default_connection_policy_new ();
+ tny_account_set_connection_policy (tny_account, policy);
+ g_object_unref (policy);
+
+ /* The callback will have an error for you if the reconnect
+ * failed. Please handle it (this is TODO). */
+
+ conn_status = tny_account_get_connection_status (tny_account);
+ if (conn_status != TNY_CONNECTION_STATUS_DISCONNECTED) {
+ TnyAccountStore *account_store = NULL;
+
+ account_store = TNY_ACCOUNT_STORE(g_object_get_data (G_OBJECT(tny_account),
+ "account_store"));
+
+ if (account_store) {
+ modest_tny_account_store_forget_already_asked (MODEST_TNY_ACCOUNT_STORE (account_store),
+ tny_account);
+ }
+
+ tny_camel_account_set_online (TNY_CAMEL_ACCOUNT(tny_account), TRUE,
+ set_online_callback, "online");
+ }
+
+ return TRUE;
+}
+
+
+