* Manages the first refresh in the connection policy
authorSergio Villar Senin <svillar@igalia.com>
Fri, 6 Mar 2009 10:26:19 +0000 (10:26 +0000)
committerSergio Villar Senin <svillar@igalia.com>
Fri, 6 Mar 2009 10:26:19 +0000 (10:26 +0000)
* Fixes NB#101311, refresh accounts just after setting them up. Needs
* tinymail >= r3857

pmo-trunk-r7810

src/modest-default-connection-policy.c
src/modest-tny-account-store.c

index 778ca0e..67a8b4f 100644 (file)
 #include <glib.h>
 
 #include "modest-default-connection-policy.h"
 #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-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>
 
 #include <tny-account.h>
 #include <tny-store-account.h>
 
@@ -48,10 +51,29 @@ static void
 modest_default_connection_policy_on_connect (TnyConnectionPolicy *self, TnyAccount *account)
 {
        /* Set the username as succedded */
 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;
 }
 
        return;
 }
index 20d1851..9c34512 100644 (file)
@@ -112,10 +112,6 @@ static void    add_connection_specific_transport_accounts         (ModestTnyAcco
 
 static void    remove_connection_specific_transport_accounts      (ModestTnyAccountStore *self);
 
 
 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 */
 static inline gboolean only_local_accounts        (ModestTnyAccountStore *self);
 
 /* list my signals */
@@ -1502,34 +1498,6 @@ add_existing_accounts (ModestTnyAccountStore *self)
        modest_account_mgr_free_account_names (account_names);
 }
 
        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,
 static TnyAccount*
 create_tny_account (ModestTnyAccountStore *self,
                    const gchar *name,
@@ -1538,7 +1506,7 @@ create_tny_account (ModestTnyAccountStore *self,
 {
        TnyAccount *account = NULL;
        ModestTnyAccountStorePrivate *priv = NULL;
 {
        TnyAccount *account = NULL;
        ModestTnyAccountStorePrivate *priv = NULL;
-       
+
        priv = MODEST_TNY_ACCOUNT_STORE_GET_PRIVATE(self);
 
        account = modest_tny_account_new_from_account (priv->account_mgr,
        priv = MODEST_TNY_ACCOUNT_STORE_GET_PRIVATE(self);
 
        account = modest_tny_account_new_from_account (priv->account_mgr,
@@ -1552,18 +1520,6 @@ create_tny_account (ModestTnyAccountStore *self,
                   we use a new account if any */
                forget_password_in_memory (self, tny_account_get_id (account));
 
                   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 {
                /* Set the account store */
                g_object_set_data (G_OBJECT(account), "account_store", self);
        } else {
@@ -1756,15 +1712,6 @@ on_account_disconnect_when_removing (TnyCamelAccount *account,
        self = MODEST_TNY_ACCOUNT_STORE (user_data);
        priv = MODEST_TNY_ACCOUNT_STORE_GET_PRIVATE (self);
 
        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));
        
        /* Cancel all pending operations */
        tny_account_cancel (TNY_ACCOUNT (account));