#include <glib.h>
#include "modest-default-connection-policy.h"
+#include "modest-account-mgr.h"
#include "modest-account-mgr-helpers.h"
#include "modest-runtime.h"
+#include "modest-tny-account.h"
+#include "modest-ui-actions.h"
#include <tny-account.h>
#include <tny-store-account.h>
modest_default_connection_policy_on_connect (TnyConnectionPolicy *self, TnyAccount *account)
{
/* Set the username as succedded */
- if (TNY_IS_STORE_ACCOUNT (account))
- modest_account_mgr_set_server_account_username_has_succeeded (modest_runtime_get_account_mgr (),
- tny_account_get_id (account),
- TRUE);
+ if (TNY_IS_STORE_ACCOUNT (account)) {
+ gboolean first_time = FALSE;
+ const gchar *id;
+ ModestAccountMgr *acc_mgr;
+
+ acc_mgr = modest_runtime_get_account_mgr ();
+ id = tny_account_get_id (account);
+ first_time = !modest_account_mgr_get_server_account_username_has_succeeded (acc_mgr, id);
+
+ /* If it's the first connection then perform a send&receive */
+ if (first_time) {
+ const gchar *account_name;
+ ModestWindow *top_window;
+
+ modest_account_mgr_set_server_account_username_has_succeeded (acc_mgr, id, TRUE);
+
+ /* Perform a send receive */
+ account_name = modest_tny_account_get_parent_modest_account_name_for_server_account (account);
+ top_window = modest_window_mgr_get_current_top (modest_runtime_get_window_mgr ());
+ if (top_window)
+ modest_ui_actions_do_send_receive (account_name, FALSE, FALSE, TRUE, top_window);
+ }
+ }
return;
}
static void remove_connection_specific_transport_accounts (ModestTnyAccountStore *self);
-static void connection_status_changed (TnyAccount *account,
- TnyConnectionStatus status,
- gpointer data);
-
static inline gboolean only_local_accounts (ModestTnyAccountStore *self);
/* list my signals */
modest_account_mgr_free_account_names (account_names);
}
-static void
-connection_status_changed (TnyAccount *account,
- TnyConnectionStatus status,
- gpointer data)
-{
- /* We do this here and not in the connection policy because we
- don't want to do it for every account, just for the
- accounts that are interactively added when modest is
- runnning */
- if (status == TNY_CONNECTION_STATUS_CONNECTED) {
- const gchar *account_name;
- ModestWindow *top_window;
- ModestTnyAccountStorePrivate *priv = NULL;
-
- priv = MODEST_TNY_ACCOUNT_STORE_GET_PRIVATE (data);
-
- /* Remove this handler */
- priv->sighandlers = modest_signal_mgr_disconnect (priv->sighandlers,
- G_OBJECT (account),
- "connection_status_changed");
-
- /* Perform a send receive */
- account_name = modest_tny_account_get_parent_modest_account_name_for_server_account (account);
- top_window = modest_window_mgr_get_current_top (modest_runtime_get_window_mgr ());
- modest_ui_actions_do_send_receive (account_name, FALSE, FALSE, TRUE, top_window);
- }
-}
-
static TnyAccount*
create_tny_account (ModestTnyAccountStore *self,
const gchar *name,
{
TnyAccount *account = NULL;
ModestTnyAccountStorePrivate *priv = NULL;
-
+
priv = MODEST_TNY_ACCOUNT_STORE_GET_PRIVATE(self);
account = modest_tny_account_new_from_account (priv->account_mgr,
we use a new account if any */
forget_password_in_memory (self, tny_account_get_id (account));
- /* Install a signal handler that will refresh the
- account the first time it becomes online. Do this
- only if we're adding a new account while the
- program is running (we do not want to do this
- allways) */
- if (type == TNY_ACCOUNT_TYPE_STORE && notify)
- priv->sighandlers = modest_signal_mgr_connect (priv->sighandlers,
- G_OBJECT (account),
- "connection_status_changed",
- G_CALLBACK (connection_status_changed),
- self);
-
/* Set the account store */
g_object_set_data (G_OBJECT(account), "account_store", self);
} else {
self = MODEST_TNY_ACCOUNT_STORE (user_data);
priv = MODEST_TNY_ACCOUNT_STORE_GET_PRIVATE (self);
- /* Remove the connection-status-changed handler if it's still there */
- if (modest_signal_mgr_is_connected (priv->sighandlers,
- G_OBJECT (account),
- "connection_status_changed")) {
- priv->sighandlers = modest_signal_mgr_disconnect (priv->sighandlers,
- G_OBJECT (account),
- "connection_status_changed");
- }
-
/* Cancel all pending operations */
tny_account_cancel (TNY_ACCOUNT (account));