* Partially fixes NB#63588, it works but we still need to find a proper solution...
authorSergio Villar Senin <svillar@igalia.com>
Tue, 28 Aug 2007 08:37:56 +0000 (08:37 +0000)
committerSergio Villar Senin <svillar@igalia.com>
Tue, 28 Aug 2007 08:37:56 +0000 (08:37 +0000)
* Fixes NB#66839, delete folders in cascade no longer crashes the application

pmo-trunk-r3102

src/modest-mail-operation.c
src/modest-tny-local-folders-account.c
src/modest-ui-actions.c
src/widgets/modest-folder-view.c

index 4f0f942..0a65cda 100644 (file)
@@ -1645,6 +1645,9 @@ modest_mail_operation_remove_folder (ModestMailOperation *self,
                tny_folder_store_remove_folder (parent, folder, &(priv->error));
                CHECK_EXCEPTION (priv, MODEST_MAIL_OPERATION_STATUS_FAILED);
 
+               if (!priv->error)
+                       priv->status = MODEST_MAIL_OPERATION_STATUS_SUCCESS;
+
                if (parent)
                        g_object_unref (G_OBJECT (parent));
        }
@@ -1777,8 +1780,8 @@ new_name_valid_if_local_account (ModestMailOperationPrivate *priv,
                                                                 new_name)) {
                priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED;
                g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR,
-                            MODEST_MAIL_OPERATION_ERROR_FOLDER_RULES,
-                            _("FIXME: folder name already in use"));
+                            MODEST_MAIL_OPERATION_ERROR_FOLDER_EXISTS,
+                            _("ckdg_ib_folder_already_exists"));
                return FALSE;
        } else
                return TRUE;
index 078183f..01202d0 100644 (file)
@@ -103,8 +103,7 @@ modest_tny_local_folders_account_query_passes (TnyFolderStoreQuery *query, TnyFo
 {
        gboolean retval = FALSE;
 
-       if (query && (tny_list_get_length (tny_folder_store_query_get_items (query)) > 0))
-       {
+       if (query && (tny_list_get_length (tny_folder_store_query_get_items (query)) > 0)) {
                TnyList *items = tny_folder_store_query_get_items (query);
                TnyIterator *iterator;
                iterator = tny_list_create_iterator (items);
@@ -138,7 +137,7 @@ modest_tny_local_folders_account_query_passes (TnyFolderStoreQuery *query, TnyFo
                        tny_iterator_next (iterator);
                }
                 
-               g_object_unref (G_OBJECT (iterator));    
+               g_object_unref (G_OBJECT (iterator));
                g_object_unref (G_OBJECT (items));
        } else
                retval = TRUE;
@@ -198,16 +197,26 @@ modest_tny_local_folders_account_folder_name_in_use (ModestTnyLocalFoldersAccoun
        gboolean retval;
        
        /* Check that we're not trying to create/rename any folder
-          with the same name that our OUTBOX */
+          with the same name that our OUTBOX, DRAFT, SENT */
        priv = TNY_LOCAL_FOLDERS_ACCOUNT_GET_PRIVATE (self);
        down_name = g_utf8_strdown (name, strlen (name));
 
        type_name = modest_local_folder_info_get_type_name (TNY_FOLDER_TYPE_OUTBOX);
-       if (!strcmp (type_name, down_name))
+       if (!strcmp (type_name, down_name)) {
                retval = TRUE;
-       else
-               retval = FALSE;
-
+       } else {
+               type_name = modest_local_folder_info_get_type_name (TNY_FOLDER_TYPE_DRAFTS);
+               if (!strcmp (type_name, down_name)) {
+                       retval = TRUE;
+               } else {
+                       type_name = modest_local_folder_info_get_type_name (TNY_FOLDER_TYPE_SENT);
+                       if (!strcmp (type_name, down_name)) {
+                               retval = TRUE;
+                       } else {
+                               retval = FALSE;
+                       }
+               }
+       }
        g_free (down_name);
 
        return retval;
index 066368d..1716441 100644 (file)
@@ -2408,14 +2408,18 @@ modest_ui_actions_rename_folder_error_handler (ModestMailOperation *mail_op,
        
        /* Get error message */
        error = modest_mail_operation_get_error (mail_op);
-       if (error != NULL && error->message != NULL) {
-               message = error->message;
-       } else {
-               message = _("!!! FIXME: Unable to rename");
+       if (!error)
+               g_return_if_reached ();
+
+       switch (error->code) {
+       case MODEST_MAIL_OPERATION_ERROR_FOLDER_EXISTS:
+               message = _CS("ckdg_ib_folder_already_exists");
+               break;
+       default:
+               g_return_if_reached ();
        }
-       
-       modest_platform_information_banner (GTK_WIDGET (window), NULL,
-                                           message);
+
+       modest_platform_information_banner (GTK_WIDGET (window), NULL, message);
 }
 
 void 
@@ -2465,6 +2469,7 @@ modest_ui_actions_on_rename_folder (GtkAction *action,
 
                if (response == GTK_RESPONSE_ACCEPT && strlen (folder_name) > 0) {
                        ModestMailOperation *mail_op;
+                       GtkTreeSelection *sel = NULL;
 
                        mail_op = 
                                modest_mail_operation_new_with_error_handling (MODEST_MAIL_OPERATION_TYPE_INFO,
@@ -2476,13 +2481,14 @@ modest_ui_actions_on_rename_folder (GtkAction *action,
                        modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
                                                         mail_op);
 
-                       modest_header_view_clear (MODEST_HEADER_VIEW (header_view));
-                       
+                       /* Clear the headers view */
+                       sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (folder_view));
+                       gtk_tree_selection_unselect_all (sel);
+
+                       /* Select *after* the changes */
                        modest_folder_view_select_folder (MODEST_FOLDER_VIEW(folder_view),
                                                          TNY_FOLDER(folder), TRUE);
 
-                       modest_header_view_clear ((ModestHeaderView *) header_view);
                        modest_mail_operation_rename_folder (mail_op,
                                                             TNY_FOLDER (folder),
                                                             (const gchar *) folder_name);
@@ -2544,7 +2550,15 @@ delete_folder (ModestMainWindow *main_window, gboolean move_to_trash)
        g_free (message);
 
        if (response == GTK_RESPONSE_OK) {
-               ModestMailOperation *mail_op = 
+               ModestMailOperation *mail_op;
+               GtkTreeSelection *sel;
+
+               /* Unselect the folder before deleting it to free the headers */
+               sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (folder_view));
+               gtk_tree_selection_unselect_all (sel);
+
+               /* Create the mail operation */
+               mail_op =
                        modest_mail_operation_new_with_error_handling (MODEST_MAIL_OPERATION_TYPE_DELETE, 
                                                                       G_OBJECT(main_window),
                                                                       modest_ui_actions_delete_folder_error_handler,
@@ -3926,7 +3940,6 @@ modest_ui_actions_on_main_window_move_to (GtkAction *action,
                        goto end;
                
                /* Clean folder on header view before moving it */
-/*             modest_header_view_clear (MODEST_HEADER_VIEW (header_view));  */
                sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (folder_view));
                gtk_tree_selection_unselect_all (sel);
 
index d5e9e94..709d70d 100644 (file)
@@ -1470,7 +1470,7 @@ on_progress_changed (ModestMailOperation *mail_op,
        gtk_drag_finish (helper->context, success, FALSE, helper->time);
 
        /* Free the helper */
-       gtk_tree_path_free (helper->source_row);        
+       gtk_tree_path_free (helper->source_row);
        g_slice_free (DndHelper, helper);
 }