* Fixes NB#83555 do not let the user to delete an account twice
authorSergio Villar Senin <svillar@igalia.com>
Wed, 2 Apr 2008 16:36:50 +0000 (16:36 +0000)
committerSergio Villar Senin <svillar@igalia.com>
Wed, 2 Apr 2008 16:36:50 +0000 (16:36 +0000)
* Added some useful extra checks

pmo-trunk-r4363

src/maemo/modest-account-view-window.c

index b9ea58c..f981b5b 100644 (file)
@@ -163,11 +163,24 @@ check_for_active_account (ModestAccountViewWindow *self, const gchar* account_na
                modest_tny_account_store_get_server_account (acc_store,
                                                             account_name,
                                                             TNY_ACCOUNT_TYPE_STORE);
+
+       /* This could happen if the account was deleted before the
+          call to this function */
+       if (!store_account)
+               return FALSE;
+
        transport_account = 
                modest_tny_account_store_get_server_account (acc_store,
                                                             account_name,
                                                             TNY_ACCOUNT_TYPE_TRANSPORT);
 
+       /* This could happen if the account was deleted before the
+          call to this function */
+       if (!transport_account) {
+               g_object_unref (store_account);
+               return FALSE;
+       }
+
        store_conn_status = tny_account_get_connection_status (store_account);
        transport_conn_status = tny_account_get_connection_status (transport_account);
 
@@ -217,54 +230,55 @@ on_delete_button_clicked (GtkWidget *button, ModestAccountViewWindow *self)
 {
        ModestAccountViewWindowPrivate *priv;
        ModestAccountMgr *account_mgr;
-       
+       gchar *account_title = NULL, *account_name = NULL;
        
        priv = MODEST_ACCOUNT_VIEW_WINDOW_GET_PRIVATE(self);
 
        account_mgr = modest_runtime_get_account_mgr(); 
-       gchar *account_name = modest_account_view_get_selected_account (priv->account_view);
+       account_name = modest_account_view_get_selected_account (priv->account_view);
        if(!account_name)
                return;
-               
-       if (account_name) {
-               gchar *account_title = modest_account_mgr_get_display_name(account_mgr, account_name);
-               
-               if (check_for_active_account (self, account_name)) {
-                       /* The warning text depends on the account type: */
-                       gchar *txt = NULL;      
-                       gint response;
 
-                       if (modest_account_mgr_get_store_protocol (account_mgr, account_name) 
-                               == MODEST_PROTOCOL_STORE_POP) {
+       account_title = modest_account_mgr_get_display_name(account_mgr, account_name);
+       /* This could happen if the account is being deleted */
+       if (!account_title)
+               return;
+       
+       if (check_for_active_account (self, account_name)) {
+               /* The warning text depends on the account type: */
+               gchar *txt = NULL;      
+               gint response;
+               
+               if (modest_account_mgr_get_store_protocol (account_mgr, account_name) 
+                   == MODEST_PROTOCOL_STORE_POP) {
                                txt = g_strdup_printf (_("emev_nc_delete_mailbox"), 
-                                       account_title);
-                       } else {
-                               txt = g_strdup_printf (_("emev_nc_delete_mailboximap"), 
-                                       account_title);
-                       }
+                                                      account_title);
+               } else {
+                       txt = g_strdup_printf (_("emev_nc_delete_mailboximap"), 
+                                              account_title);
+               }
+               
+               response = modest_platform_run_confirmation_dialog (GTK_WINDOW (self), txt);
+               g_free (txt);
+               txt = NULL;
+               
+               if (response == GTK_RESPONSE_OK) {
+                       /* Remove account. If it succeeds then it also removes
+                          the account from the ModestAccountView: */                             
+                       gboolean is_default = FALSE;
+                       gchar *default_account_name = modest_account_mgr_get_default_account (account_mgr);
+                       if (default_account_name && (strcmp (default_account_name, account_name) == 0))
+                               is_default = TRUE;
+                       g_free (default_account_name);
                        
-                       response = modest_platform_run_confirmation_dialog (GTK_WINDOW (self), txt);
-                       g_free (txt);
-                       txt = NULL;
-
-                       if (response == GTK_RESPONSE_OK) {
-                               /* Remove account. If it succeeds then it also removes
-                                  the account from the ModestAccountView: */                             
-                               gboolean is_default = FALSE;
-                               gchar *default_account_name = modest_account_mgr_get_default_account (account_mgr);
-                               if (default_account_name && (strcmp (default_account_name, account_name) == 0))
-                                       is_default = TRUE;
-                               g_free (default_account_name);
-                                       
                                gboolean removed = modest_account_mgr_remove_account (account_mgr, account_name);
                                if (!removed) {
                                        g_warning ("%s: modest_account_mgr_remove_account() failed.\n", __FUNCTION__);
                                }
-                       }
-                       g_free (account_title);
-               }               
-               g_free (account_name);
-       }
+               }
+               g_free (account_title);
+       }               
+       g_free (account_name);
 }
 
 static void