Build fix
[modest] / src / modest-ui-actions.c
index 3d61f1c..598b5d5 100644 (file)
 #include <widgets/modest-header-window.h>
 #include <widgets/modest-folder-window.h>
 #include <widgets/modest-accounts-window.h>
+
 #ifdef MODEST_TOOLKIT_HILDON2
 #include <hildon/hildon-gtk.h>
 #include <modest-maemo-utils.h>
+#else
+#include <gtk/modest-shell-window.h>
 #endif
 #include "modest-utils.h"
 #include "widgets/modest-connection-specific-smtp-window.h"
@@ -2036,6 +2039,12 @@ reply_forward (ReplyForwardAction action, ModestWindow *win)
 void
 modest_ui_actions_reply_calendar (ModestWindow *win, TnyList *header_pairs)
 {
+       modest_ui_actions_reply_calendar_with_subject (win, NULL, header_pairs);
+}
+
+void
+modest_ui_actions_reply_calendar_with_subject (ModestWindow *win, const gchar *custom_subject, TnyList *header_pairs)
+{
        gchar *from;
        gchar *recipient;
        gchar *signature;
@@ -2083,6 +2092,14 @@ modest_ui_actions_reply_calendar (ModestWindow *win, TnyList *header_pairs)
                goto cleanup;
        }
 
+       if (custom_subject) {
+               TnyHeader *new_msg_header;
+
+               new_msg_header = tny_msg_get_header (new_msg);
+               tny_header_set_subject (new_msg_header, custom_subject);
+               g_object_unref (new_msg_header);
+       }
+
        msg_win = (GtkWidget *) modest_msg_edit_window_new (new_msg, account_name, mailbox, FALSE);
        mgr = modest_runtime_get_window_mgr ();
        modest_window_mgr_register_window (mgr, MODEST_WINDOW (msg_win), (ModestWindow *) win);
@@ -2833,11 +2850,10 @@ gboolean
 modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window)
 {
        TnyTransportAccount *transport_account = NULL;
-       gboolean had_error = FALSE, add_to_contacts;
+       gboolean result = TRUE, add_to_contacts;
        MsgData *data;
        ModestAccountMgr *account_mgr;
        gchar *account_name;
-       ModestMailOperation *mail_operation;
        gchar *recipients;
 
        g_return_val_if_fail (MODEST_IS_MSG_EDIT_WINDOW(edit_window), TRUE);
@@ -2899,6 +2915,90 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window)
                        return TRUE;
        }
 
+       result = modest_ui_actions_send_msg_with_transport (transport_account,
+                                                           data->draft_msg,
+                                                           data->from,
+                                                           data->to,
+                                                           data->cc,
+                                                           data->bcc,
+                                                           data->subject,
+                                                           data->plain_body,
+                                                           data->html_body,
+                                                           data->attachments,
+                                                           data->images,
+                                                           data->references,
+                                                           data->in_reply_to,
+                                                           data->priority_flags,
+                                                           data->custom_header_pairs);
+
+
+       /* Free data: */
+       g_free (account_name);
+       g_object_unref (G_OBJECT (transport_account));
+
+       modest_msg_edit_window_free_msg_data (edit_window, data);
+
+       if (result) {
+               modest_msg_edit_window_set_sent (edit_window, TRUE);
+
+               /* Save settings and close the window: */
+               modest_ui_actions_on_close_window (NULL, MODEST_WINDOW (edit_window));
+       }
+
+       return result;
+}
+
+/* For instance, when clicking the Send toolbar button when editing a message: */
+gboolean
+modest_ui_actions_on_send_custom_msg (const gchar *account_name, 
+                                     const gchar *from, const gchar *to, const gchar *cc, const gchar *bcc,
+                                     const gchar *subject,
+                                     const gchar *plain_body, const gchar *html_body,
+                                     const GList *attachments_list, const GList *images_list,
+                                     const gchar *references, const gchar *in_reply_to,
+                                     TnyHeaderFlags priority_flags, TnyList *header_pairs)
+{
+       TnyTransportAccount *transport_account = NULL;
+       gboolean result = FALSE;
+
+       g_return_val_if_fail (account_name, FALSE);
+
+       transport_account =
+         TNY_TRANSPORT_ACCOUNT(modest_tny_account_store_get_server_account
+                               (modest_runtime_get_account_store (),
+                                account_name, TNY_ACCOUNT_TYPE_TRANSPORT));
+
+       g_return_val_if_fail (transport_account, FALSE);
+
+       result = modest_ui_actions_send_msg_with_transport (transport_account,
+                                                           NULL /*draft msg*/,
+                                                           from, to, cc, bcc,
+                                                           subject,
+                                                           plain_body, html_body,
+                                                           attachments_list, images_list,
+                                                           references, in_reply_to,
+                                                           priority_flags, header_pairs);
+
+       /* Free data: */
+       g_object_unref (G_OBJECT (transport_account));
+
+       return result;
+}
+
+gboolean
+modest_ui_actions_send_msg_with_transport (TnyTransportAccount *transport_account, 
+                                          TnyMsg *draft_msg,
+                                          const gchar *from, const gchar *to, const gchar *cc, const gchar *bcc,
+                                          const gchar *subject,
+                                          const gchar *plain_body, const gchar *html_body,
+                                          const GList *attachments_list, const GList *images_list,
+                                          const gchar *references, const gchar *in_reply_to,
+                                          TnyHeaderFlags priority_flags, TnyList *header_pairs)
+{
+       gboolean had_error = FALSE;
+       ModestMailOperation *mail_operation;
+
+       g_return_val_if_fail (transport_account, FALSE);
 
        /* Create the mail operation */
        mail_operation = modest_mail_operation_new_with_error_handling (NULL, modest_ui_actions_disk_operations_error_handler, NULL, NULL);
@@ -2906,20 +3006,20 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window)
 
        modest_mail_operation_send_new_mail (mail_operation,
                                             transport_account,
-                                            data->draft_msg,
-                                            data->from,
-                                            data->to,
-                                            data->cc,
-                                            data->bcc,
-                                            data->subject,
-                                            data->plain_body,
-                                            data->html_body,
-                                            data->attachments,
-                                            data->images,
-                                            data->references,
-                                            data->in_reply_to,
-                                            data->priority_flags,
-                                            data->custom_header_pairs);
+                                            draft_msg,
+                                            from,
+                                            to,
+                                            cc,
+                                            bcc,
+                                            subject,
+                                            plain_body,
+                                            html_body,
+                                            attachments_list,
+                                            images_list,
+                                            references,
+                                            in_reply_to,
+                                            priority_flags,
+                                            header_pairs);
 
        if (modest_mail_operation_get_status (mail_operation) == MODEST_MAIL_OPERATION_STATUS_IN_PROGRESS)
                modest_platform_information_banner (NULL, NULL, _("mcen_ib_outbox_waiting_to_be_sent"));
@@ -2935,19 +3035,61 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window)
        }
 
        /* Free data: */
-       g_free (account_name);
-       g_object_unref (G_OBJECT (transport_account));
        g_object_unref (G_OBJECT (mail_operation));
 
-       modest_msg_edit_window_free_msg_data (edit_window, data);
+       return !had_error;
+}
 
-       if (!had_error) {
-               modest_msg_edit_window_set_sent (edit_window, TRUE);
+gboolean
+modest_ui_actions_on_send_msg (ModestWindow *window,
+                              TnyMsg *msg)
+{
+       TnyTransportAccount *transport_account = NULL;
+       gboolean had_error = FALSE;
+       ModestAccountMgr *account_mgr;
+       gchar *account_name;
+       ModestMailOperation *mail_operation;
 
-               /* Save settings and close the window: */
-               modest_ui_actions_on_close_window (NULL, MODEST_WINDOW (edit_window));
+       account_mgr = modest_runtime_get_account_mgr();
+       account_name = g_strdup(modest_window_get_active_account (MODEST_WINDOW(window)));
+
+       if (!account_name)
+               account_name = modest_account_mgr_get_default_account (account_mgr);
+
+       /* Get the currently-active transport account for this modest account: */
+       if (account_name && strcmp (account_name, MODEST_LOCAL_FOLDERS_ACCOUNT_ID) != 0) {
+               transport_account =
+                       TNY_TRANSPORT_ACCOUNT(modest_tny_account_store_get_server_account
+                                             (modest_runtime_get_account_store (),
+                                              account_name, TNY_ACCOUNT_TYPE_TRANSPORT));
        }
 
+       /* Create the mail operation */
+       mail_operation = modest_mail_operation_new_with_error_handling (NULL, modest_ui_actions_disk_operations_error_handler, NULL, NULL);
+       modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_operation);
+
+       modest_mail_operation_send_mail (mail_operation,
+                                        transport_account,
+                                        msg);
+
+       if (modest_mail_operation_get_status (mail_operation) == MODEST_MAIL_OPERATION_STATUS_IN_PROGRESS)
+               modest_platform_information_banner (NULL, NULL, _("mcen_ib_outbox_waiting_to_be_sent"));
+
+       if (modest_mail_operation_get_error (mail_operation) != NULL) {
+               const GError *error = modest_mail_operation_get_error (mail_operation);
+               if (error->domain == MODEST_MAIL_OPERATION_ERROR &&
+                   error->code == MODEST_MAIL_OPERATION_ERROR_INSTANCE_CREATION_FAILED) {
+                       g_warning ("%s failed: %s\n", __FUNCTION__, (modest_mail_operation_get_error (mail_operation))->message);
+                       modest_platform_information_banner (NULL, NULL, _CS("sfil_ni_not_enough_memory"));
+                       had_error = TRUE;
+               }
+       }
+
+       /* Free data: */
+       g_free (account_name);
+       g_object_unref (G_OBJECT (transport_account));
+       g_object_unref (G_OBJECT (mail_operation));
+
        return !had_error;
 }
 
@@ -4598,11 +4740,17 @@ create_move_to_dialog (GtkWindow *win,
                ModestAccountMgr *mgr = NULL;
                ModestAccountSettings *settings = NULL;
                ModestServerAccountSettings *store_settings = NULL;
+               ModestWindow *modest_window;
 
                modest_folder_view_set_style (MODEST_FOLDER_VIEW (tree_view),
                                              MODEST_FOLDER_VIEW_STYLE_SHOW_ALL);
 
-               active_account_name = modest_window_get_active_account (MODEST_WINDOW (win));
+#ifdef MODEST_TOOLKIT_HILDON2
+               modest_window = (ModestWindow *) win;
+#else
+               modest_window = modest_shell_peek_window (MODEST_SHELL (win));
+#endif
+               active_account_name = modest_window_get_active_account (modest_window);
                mgr = modest_runtime_get_account_mgr ();
                settings = modest_account_mgr_load_account_settings (mgr, active_account_name);