* some crash fixes - in some cases, modest core'd because of errors when copying...
[modest] / src / modest-tny-account-store.c
index a41cf72..6af53da 100644 (file)
@@ -317,16 +317,29 @@ on_vfs_volume_unmounted(GnomeVFSVolumeMonitor *volume_monitor,
 }
 
 static void
-on_account_removed (ModestAccountMgr *acc_mgr, const gchar *account, gboolean server_account,
+on_account_removed (ModestAccountMgr *acc_mgr, 
+                   const gchar *account,
+                   gboolean server_account,
                    gpointer user_data)
 {
        ModestTnyAccountStore *self = MODEST_TNY_ACCOUNT_STORE(user_data);
-       
-       /* FIXME: make this more finegrained; changes do not really affect _all_
-        * accounts, and some do not affect tny accounts at all (such as 'last_update')
+       TnyAccount *store_account;
+
+       /* Clear the account cache */
+       store_account =
+               modest_tny_account_store_get_server_account (self,
+                                                            account,
+                                                            TNY_ACCOUNT_TYPE_STORE);
+       if (store_account) {
+               tny_store_account_delete_cache (TNY_STORE_ACCOUNT (store_account));
+               g_object_unref (store_account);
+       }
+
+       /* FIXME: make this more finegrained; changes do not
+        * really affect _all_ accounts, and some do not
+        * affect tny accounts at all (such as 'last_update')
         */
-       if (server_account)
-               recreate_all_accounts (self);
+       recreate_all_accounts (self);
        
        g_signal_emit (G_OBJECT(self), signals[ACCOUNT_UPDATE_SIGNAL], 0,
                       account);
@@ -334,13 +347,14 @@ on_account_removed (ModestAccountMgr *acc_mgr, const gchar *account, gboolean se
 
 static void
 on_account_changed (ModestAccountMgr *acc_mgr, const gchar *account,
-                   const gchar *key, gboolean server_account, gpointer user_data)
+                   const GSList *keys, gboolean server_account, gpointer user_data)
 
 {
        ModestTnyAccountStore *self = MODEST_TNY_ACCOUNT_STORE(user_data);
        
        /* Ignore the change if it's a change in the last_updated value */
-       if (g_str_has_suffix (key, MODEST_ACCOUNT_LAST_UPDATED))
+       if (g_slist_length ((GSList *)keys) == 1 &&
+           g_str_has_suffix ((const gchar *) keys->data, MODEST_ACCOUNT_LAST_UPDATED))
                return;
 
        /* FIXME: make this more finegrained; changes do not really affect _all_
@@ -923,6 +937,8 @@ static gboolean
 modest_tny_account_store_alert (TnyAccountStore *self, TnyAlertType type,
                                gboolean question, const GError *error)
 {
+       /* TODO: It would be nice to know what account caused this error. */
+       
        g_return_val_if_fail (error, FALSE);
 
        if ((error->domain != TNY_ACCOUNT_ERROR) 
@@ -942,7 +958,10 @@ modest_tny_account_store_alert (TnyAccountStore *self, TnyAlertType type,
                /* The tinymail camel implementation just sends us this for almost 
                 * everything, so we have to guess at the cause.
                 * It could be a wrong password, or inability to resolve a hostname, 
-                * or lack of network, or something entirely different: */
+                * or lack of network, or incorrect authentication method, or something entirely different: */
+               /* TODO: Fix camel to provide specific error codes, and then use the 
+                * specific dialog messages from Chapter 12 of the UI spec.
+                */
                case TNY_ACCOUNT_STORE_ERROR_UNKNOWN_ALERT: 
                    g_debug ("%s: Handling GError domain=%d, code=%d, message=%s", 
                                __FUNCTION__, error->domain, error->code, error->message);
@@ -950,7 +969,9 @@ modest_tny_account_store_alert (TnyAccountStore *self, TnyAlertType type,
                        /* TODO: Remove the internal error message for the real release.
                         * This is just so the testers can give us more information: */
                        /* prompt = _("Modest account not yet fully configured."); */
-                       prompt = g_strdup_printf(_("Modest account not yet fully configured. Error=%s"), 
+                       prompt = g_strdup_printf(
+                               "%s\n (Internal error message, often very misleading):\n%s", 
+                               _("Incorrect Account Settings"), 
                                error->message);
                                
                        /* TODO: If we can ever determine that the problem is a wrong password:
@@ -986,7 +1007,7 @@ modest_tny_account_store_alert (TnyAccountStore *self, TnyAlertType type,
                        break;
                        
                //TODO: We have started receiving errors of 
-               //domain=TNY_ACCOUNT_ERROR, code=TNY_ACCOUNT_ERROR_TRY_CONNECT, messagae="Canceled".
+               //domain=TNY_ACCOUNT_ERROR, code=TNY_ACCOUNT_ERROR_TRY_CONNECT, message="Canceled".
                //If this is really a result of us cancelling our own operation then 
                //a) this probably shouldn't be an error, and
                //b) should have its own error code.