Patch to compile Modest with the most recent changes
[modest] / src / modest-ui-actions.c
index 48bbf65..fd84c02 100644 (file)
@@ -1020,16 +1020,10 @@ modest_ui_actions_get_msgs_full_error_handler (ModestMailOperation *mail_op,
 {
        const GError *error;
        GObject *win = NULL;
-       const gchar *err_msg;
+       const gchar *err_msg = (const gchar *) user_data;
 
        win = modest_mail_operation_get_source (mail_op);
        error = modest_mail_operation_get_error (mail_op);
-       /* Select error message */
-       if (error->code == MODEST_MAIL_OPERATION_ERROR_MESSAGE_SIZE_LIMIT)
-               err_msg = _("emev_ni_ui_imap_msg_size_exceed_error");
-       else
-               err_msg = (const gchar *) user_data;
 
        /* Show error */
        modest_platform_run_information_dialog ((GtkWindow *) win, err_msg);
@@ -1059,6 +1053,16 @@ get_account_from_header_list (TnyList *headers)
        return account;
 }
 
+static void 
+foreach_unregister_headers (gpointer data,
+                           gpointer user_data)
+{
+       ModestWindowMgr *mgr = (ModestWindowMgr *) user_data;
+       TnyHeader *header = TNY_HEADER (data);
+
+       modest_window_mgr_unregister_header (mgr, header);
+}
+
 static void
 open_msgs_performer(gboolean canceled, 
                    GError *err,
@@ -1077,6 +1081,9 @@ open_msgs_performer(gboolean canceled,
 
        status = tny_account_get_connection_status (account);
        if (err || canceled) {
+               /* Unregister the already registered headers */
+               tny_list_foreach (not_opened_headers, foreach_unregister_headers, 
+                                 modest_runtime_get_window_mgr ());
                goto clean;
        }
 
@@ -4489,8 +4496,8 @@ modest_ui_actions_on_main_window_remove_attachments (GtkAction *action,
  */
 static void
 xfer_messages_from_move_to_cb  (gboolean canceled, GError *err,
-               GtkWindow *parent_window, 
-               TnyAccount *account, gpointer user_data)
+                               GtkWindow *parent_window, 
+                               TnyAccount *account, gpointer user_data)
 {
        TnyFolderStore *dst_folder = TNY_FOLDER_STORE (user_data);
        ModestWindow *win = MODEST_WINDOW (parent_window);
@@ -4503,13 +4510,6 @@ xfer_messages_from_move_to_cb  (gboolean canceled, GError *err,
                g_object_unref (dst_folder);
                return;
        }
-       
-       if (!TNY_IS_FOLDER (dst_folder)) {
-               modest_platform_information_banner (GTK_WIDGET (win),
-                                                   NULL,
-                                                   _CS("ckdg_ib_unable_to_move_to_current_location"));
-               return;
-       }
 
        dst_account = tny_folder_get_account (TNY_FOLDER (dst_folder));
        proto_str = tny_account_get_proto (dst_account);
@@ -4574,6 +4574,36 @@ xfer_messages_from_move_to_cb  (gboolean canceled, GError *err,
 }
 
 typedef struct {
+       TnyAccount *dst_account;
+       ModestConnectedPerformer callback;
+       gpointer data;
+} DoubleConnectionInfo;
+
+static void
+src_account_connect_performer (gboolean canceled, 
+                              GError *err,
+                              GtkWindow *parent_window, 
+                              TnyAccount *src_account, 
+                              gpointer user_data)
+{
+       DoubleConnectionInfo *info = (DoubleConnectionInfo *) user_data;
+
+       if (canceled || err) {
+               /* If there was any error call the user callback */
+               info->callback (canceled, err, parent_window, src_account, info->data);
+       } else {
+               /* Connect the destination account */
+               modest_platform_connect_if_remote_and_perform (parent_window, TRUE, 
+                                                              TNY_FOLDER_STORE (info->dst_account),
+                                                              info->callback, info->data);
+       }
+
+       /* Free the info object */
+       g_object_unref (info->dst_account);
+       g_slice_free (DoubleConnectionInfo, info);
+}
+
+typedef struct {
        TnyFolder *src_folder;
        TnyFolderStore *dst_folder;
        gboolean delete_original;
@@ -4674,8 +4704,8 @@ modest_ui_actions_on_main_window_move_to (GtkAction *action,
 
                /* Allow only to transfer folders to the local root folder */
                if (TNY_IS_ACCOUNT (dst_folder) && 
-                               !MODEST_IS_TNY_LOCAL_FOLDERS_ACCOUNT (dst_folder)) {
-                                       do_xfer = FALSE;
+                   !MODEST_IS_TNY_LOCAL_FOLDERS_ACCOUNT (dst_folder)) {
+                       do_xfer = FALSE;
                } else if (!TNY_IS_FOLDER (src_folder)) {
                        g_warning ("%s: src_folder is not a TnyFolder.\n", __FUNCTION__);
                        do_xfer = FALSE;
@@ -4700,25 +4730,48 @@ modest_ui_actions_on_main_window_move_to (GtkAction *action,
                }
        } else if (gtk_widget_is_focus (GTK_WIDGET(header_view))) {
                gboolean do_xfer = TRUE;
+
+               /* Show an error when trying to move msgs to an account */      
+               if (!TNY_IS_FOLDER (dst_folder)) {
+                       modest_platform_information_banner (GTK_WIDGET (win),
+                                                           NULL,
+                                                           _CS("ckdg_ib_unable_to_move_to_current_location"));
+                       goto free;
+               }
+
                /* Ask for confirmation if the source folder is remote and we're not connected */
                if (!online && modest_tny_folder_store_is_remote(src_folder)) {
                        TnyList *headers = modest_header_view_get_selected_headers(header_view);
                        if (!msgs_already_deleted_from_server(headers, src_folder)) {
                                guint num_headers = tny_list_get_length(headers);
                                TnyAccount *account = get_account_from_header_list (headers);
-                               if (!connect_to_get_msg(MODEST_WINDOW (win), num_headers, account))
+                               GtkResponseType response;
+
+                               response = modest_platform_run_confirmation_dialog (GTK_WINDOW (win),
+                                                                                   ngettext("mcen_nc_get_msg",
+                                                                                            "mcen_nc_get_msgs",
+                                                                                            num_headers));
+                               if (response == GTK_RESPONSE_CANCEL)
                                        do_xfer = FALSE;
+                               
                                g_object_unref (account);
                        }
                        g_object_unref(headers);
                }
                if (do_xfer) /* Transfer messages */ {
-                       g_object_ref (dst_folder);
+                       DoubleConnectionInfo *info = g_slice_new (DoubleConnectionInfo);
+                       info->callback = xfer_messages_from_move_to_cb;
+                       info->dst_account = tny_folder_get_account (TNY_FOLDER (dst_folder));
+                       info->data = g_object_ref (dst_folder);
+
                        modest_platform_connect_if_remote_and_perform(GTK_WINDOW (win), TRUE,
-                                       TNY_FOLDER_STORE (dst_folder), xfer_messages_from_move_to_cb, dst_folder);
+                                                                     TNY_FOLDER_STORE (src_folder), 
+                                                                     src_account_connect_performer, 
+                                                                     info);
                }
        }
 
+ free:
        if (src_folder)
                g_object_unref (src_folder);
 }
@@ -5198,7 +5251,7 @@ modest_ui_actions_on_send_queue_error_happened (TnySendQueue *self,
        gchar *message = NULL;
 
        /* Don't show anything if the user cancelled something */
-       if (err->code == TNY_TRANSPORT_ACCOUNT_ERROR_SEND_USER_CANCEL)
+       if (err->code == TNY_SYSTEM_ERROR_CANCEL)
                return;
 
        /* Get the server name: */
@@ -5215,20 +5268,17 @@ modest_ui_actions_on_send_queue_error_happened (TnySendQueue *self,
 
        /* Show the appropriate message text for the GError: */
        switch (err->code) {
-       case TNY_TRANSPORT_ACCOUNT_ERROR_SEND_HOST_LOOKUP_FAILED:
-               message = g_strdup_printf (_("emev_ib_ui_smtp_server_invalid"), server_name);
-               break;
-       case TNY_TRANSPORT_ACCOUNT_ERROR_SEND_SERVICE_UNAVAILABLE:
+       case TNY_SERVICE_ERROR_CONNECT:
                message = g_strdup_printf (_("emev_ib_ui_smtp_server_invalid"), server_name);
                break;
-       case TNY_TRANSPORT_ACCOUNT_ERROR_SEND_AUTHENTICATION_NOT_SUPPORTED:
+       case TNY_SERVICE_ERROR_AUTHENTICATE:
                message = g_strdup_printf (_("emev_ni_ui_smtp_authentication_fail_error"), server_name);
                break;
-       case TNY_TRANSPORT_ACCOUNT_ERROR_SEND:
+       case TNY_SERVICE_ERROR_SEND:
                message = g_strdup (_("emev_ib_ui_smtp_send_error"));
                break;
        default:
-               g_warning ("%s: unexpected TNY_TRANSPORT_ACCOUNT_ERROR %d",
+               g_warning ("%s: unexpected ERROR %d",
                           __FUNCTION__, err->code);
                message = g_strdup (_("emev_ib_ui_smtp_send_error"));
                break;