Better setting the initial signature
[modest] / src / modest-ui-actions.c
index 417a11e..8076dd9 100644 (file)
@@ -109,6 +109,7 @@ typedef struct _ReplyForwardHelper {
        guint reply_forward_type;
        ReplyForwardAction action;
        gchar *account_name;
+       gchar *mailbox;
        GtkWidget *parent_window;
        TnyHeader *header;
 } ReplyForwardHelper;
@@ -729,7 +730,9 @@ void
 modest_ui_actions_on_new_account (GtkAction *action,
                                  ModestWindow *window)
 {
-       modest_ui_actions_run_account_setup_wizard (window);
+       if (!modest_ui_actions_run_account_setup_wizard (window)) {
+               g_debug ("%s: wizard was already running", __FUNCTION__);
+       }
 }
 
 void
@@ -785,10 +788,12 @@ modest_ui_actions_compose_msg(ModestWindow *win,
                              gboolean set_as_modified)
 {
        gchar *account_name = NULL;
+       const gchar *mailbox;
        TnyMsg *msg = NULL;
        TnyAccount *account = NULL;
        TnyFolder *folder = NULL;
        gchar *from_str = NULL, *signature = NULL, *body = NULL;
+       gchar *recipient = NULL;
        gboolean use_signature = FALSE;
        ModestWindow *msg_win = NULL;
        ModestAccountMgr *mgr = modest_runtime_get_account_mgr();
@@ -809,6 +814,8 @@ modest_ui_actions_compose_msg(ModestWindow *win,
                g_printerr ("modest: no account found\n");
                goto cleanup;
        }
+
+       mailbox = modest_window_get_active_mailbox (win);
        account = modest_tny_account_store_get_server_account (store, account_name, TNY_ACCOUNT_TYPE_STORE);
        if (!account) {
                g_printerr ("modest: failed to get tnyaccount for '%s'\n", account_name);
@@ -819,13 +826,15 @@ modest_ui_actions_compose_msg(ModestWindow *win,
                g_printerr ("modest: failed to find Drafts folder\n");
                goto cleanup;
        }
-       from_str = modest_account_mgr_get_from_string (mgr, account_name);
+       from_str = modest_account_mgr_get_from_string (mgr, account_name, mailbox);
        if (!from_str) {
                g_printerr ("modest: failed get from string for '%s'\n", account_name);
                goto cleanup;
        }
 
-       signature = modest_account_mgr_get_signature (mgr, account_name, &use_signature);
+       recipient = modest_text_utils_get_email_address (from_str);
+       signature = modest_account_mgr_get_signature_from_recipient (mgr, recipient, &use_signature);
+       g_free (recipient);
        if (body_str != NULL) {
                body = use_signature ? g_strconcat(body_str, "\n--\n", signature, NULL) : g_strdup(body_str);
        } else {
@@ -842,7 +851,7 @@ modest_ui_actions_compose_msg(ModestWindow *win,
        /* This is destroyed by TODO. */
        total_size = 0;
        allowed_size = MODEST_MAX_ATTACHMENT_SIZE;
-       msg_win = modest_msg_edit_window_new (msg, account_name, FALSE);
+       msg_win = modest_msg_edit_window_new (msg, account_name, mailbox, FALSE);
 
        if (!modest_window_mgr_register_window (modest_runtime_get_window_mgr(), msg_win, win)) {
                gtk_widget_destroy (GTK_WIDGET (msg_win));
@@ -1108,6 +1117,7 @@ open_msg_cb (ModestMailOperation *mail_op,
        if (open_in_editor) {
                ModestAccountMgr *mgr = modest_runtime_get_account_mgr ();
                gchar *from_header = NULL, *acc_name;
+               gchar *mailbox = NULL;
 
                from_header = tny_header_dup_from (header);
 
@@ -1121,22 +1131,28 @@ open_msg_cb (ModestMailOperation *mail_op,
                        }
                }
 
-               acc_name = modest_utils_get_account_name_from_recipient (from_header);
+               acc_name = modest_utils_get_account_name_from_recipient (from_header, &mailbox);
                g_free (from_header);
                if (acc_name) {
                        g_free (account);
                        account = acc_name;
                }
 
-               win = modest_msg_edit_window_new (msg, account, TRUE);
+               win = modest_msg_edit_window_new (msg, account, mailbox, TRUE);
+               if (mailbox)
+                       g_free (mailbox);
        } else {
                gchar *uid = modest_tny_folder_get_header_unique_id (header);
+               const gchar *mailbox = NULL;
+
+               if (parent_win && MODEST_IS_WINDOW (parent_win))
+                       mailbox = modest_window_get_active_mailbox (MODEST_WINDOW (parent_win));
 
                if (helper->rowref && helper->model) {
-                       win = modest_msg_view_window_new_with_header_model (msg, account, (const gchar*) uid,
+                       win = modest_msg_view_window_new_with_header_model (msg, account, mailbox, (const gchar*) uid,
                                                                            helper->model, helper->rowref);
                } else {
-                       win = modest_msg_view_window_new_for_attachment (msg, account, (const gchar*) uid);
+                       win = modest_msg_view_window_new_for_attachment (msg, account, mailbox, (const gchar*) uid);
                }
                g_free (uid);
        }
@@ -1432,8 +1448,10 @@ open_msg_performer(gboolean canceled,
                header_view = get_header_view_from_window (MODEST_WINDOW (parent_window));
                uid = modest_tny_folder_get_header_unique_id (helper->header);
                if (header_view) {
-                       window = modest_msg_view_window_new_from_header_view
-                               (MODEST_HEADER_VIEW (header_view), account_name, uid, helper->rowref);
+                       const gchar *mailbox = NULL;
+                       mailbox = modest_window_get_active_mailbox (MODEST_WINDOW (parent_window));
+                       window = modest_msg_view_window_new_from_header_view 
+                               (MODEST_HEADER_VIEW (header_view), account_name, mailbox, uid, helper->rowref);
                        if (window != NULL) {
                                if (!modest_window_mgr_register_window (modest_runtime_get_window_mgr (),
                                                                        window, NULL)) {
@@ -1642,6 +1660,7 @@ create_reply_forward_helper (ReplyForwardAction action,
 {
        ReplyForwardHelper *rf_helper = NULL;
        const gchar *active_acc = modest_window_get_active_account (win);
+       const gchar *active_mailbox = modest_window_get_active_mailbox (win);
 
        rf_helper = g_slice_new0 (ReplyForwardHelper);
        rf_helper->reply_forward_type = reply_forward_type;
@@ -1651,6 +1670,7 @@ create_reply_forward_helper (ReplyForwardAction action,
        rf_helper->account_name = (active_acc) ?
                g_strdup (active_acc) :
                modest_account_mgr_get_default_account (modest_runtime_get_account_mgr());
+       rf_helper->mailbox = g_strdup (active_mailbox);
 
        /* Note that window could be destroyed just AFTER calling
           register_window so we must ensure that this pointer does
@@ -1669,6 +1689,7 @@ free_reply_forward_helper (gpointer data)
 
        helper = (ReplyForwardHelper *) data;
        g_free (helper->account_name);
+       g_free (helper->mailbox);
        if (helper->header)
                g_object_unref (helper->header);
        if (helper->parent_window)
@@ -1694,6 +1715,7 @@ reply_forward_cb (ModestMailOperation *mail_op,
        ModestWindowMgr *mgr = NULL;
        gchar *signature = NULL;
        gboolean use_signature;
+       gchar *recipient;
 
        /* If there was any error. The mail operation could be NULL,
           this means that we already have the message downloaded and
@@ -1703,10 +1725,12 @@ reply_forward_cb (ModestMailOperation *mail_op,
                goto cleanup;
 
        from = modest_account_mgr_get_from_string (modest_runtime_get_account_mgr(),
-                                                  rf_helper->account_name);
-       signature = modest_account_mgr_get_signature (modest_runtime_get_account_mgr(),
-                                                     rf_helper->account_name,
-                                                     &use_signature);
+                                                  rf_helper->account_name, rf_helper->mailbox);
+       recipient = modest_text_utils_get_email_address (from);
+       signature = modest_account_mgr_get_signature_from_recipient (modest_runtime_get_account_mgr(), 
+                                                                    recipient, 
+                                                                    &use_signature);
+       g_free (recipient);
 
        /* Create reply mail */
        switch (rf_helper->action) {
@@ -1755,7 +1779,7 @@ reply_forward_cb (ModestMailOperation *mail_op,
        }
 
        /* Create and register the windows */
-       msg_win = modest_msg_edit_window_new (new_msg, rf_helper->account_name, FALSE);
+       msg_win = modest_msg_edit_window_new (new_msg, rf_helper->account_name, rf_helper->mailbox, FALSE);
        mgr = modest_runtime_get_window_mgr ();
        modest_window_mgr_register_window (mgr, msg_win, (ModestWindow *) rf_helper->parent_window);
 
@@ -2522,7 +2546,7 @@ set_active_account_from_tny_account (TnyAccount *account,
        /* We need the TnyAccount provided by the
           account store because that is the one that
           knows the name of the Modest account */
-       TnyAccount *modest_server_account = modest_server_account =
+       TnyAccount *modest_server_account =
                modest_tny_account_store_get_tny_account_by (modest_runtime_get_account_store (),
                                                             MODEST_TNY_ACCOUNT_STORE_QUERY_ID,
                                                             server_acc_name);
@@ -2858,7 +2882,7 @@ modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edi
        TnyTransportAccount *transport_account;
        ModestMailOperation *mail_operation;
        MsgData *data;
-       gchar *account_name, *from;
+       gchar *account_name;
        ModestAccountMgr *account_mgr;
        gboolean had_error = FALSE;
        ModestMainWindow *win = NULL;
@@ -2900,7 +2924,6 @@ modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edi
                modest_msg_edit_window_free_msg_data (edit_window, data);
                return FALSE;
        }
-       from = modest_account_mgr_get_from_string (account_mgr, account_name);
 
        /* Create the mail operation */
        mail_operation = modest_mail_operation_new_with_error_handling (NULL, modest_ui_actions_disk_operations_error_handler,
@@ -2910,9 +2933,9 @@ modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edi
        modest_mail_operation_save_to_drafts (mail_operation,
                                              transport_account,
                                              data->draft_msg,
-                                             from,
-                                             data->to,
-                                             data->cc,
+                                             data->from,
+                                             data->to, 
+                                             data->cc, 
                                              data->bcc,
                                              data->subject,
                                              data->plain_body,
@@ -2949,7 +2972,6 @@ modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edi
        modest_msg_edit_window_set_modified (edit_window, FALSE);
 
        /* Frees */
-       g_free (from);
        g_free (account_name);
        g_object_unref (G_OBJECT (transport_account));
        g_object_unref (G_OBJECT (mail_operation));
@@ -3003,7 +3025,6 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window)
        MsgData *data;
        ModestAccountMgr *account_mgr;
        gchar *account_name;
-       gchar *from;
        ModestMailOperation *mail_operation;
 
        g_return_val_if_fail (MODEST_IS_MSG_EDIT_WINDOW(edit_window), TRUE);
@@ -3052,14 +3073,13 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window)
 
 
        /* Create the mail operation */
-       from = modest_account_mgr_get_from_string (account_mgr, account_name);
        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_new_mail (mail_operation,
                                             transport_account,
                                             data->draft_msg,
-                                            from,
+                                            data->from,
                                             data->to,
                                             data->cc,
                                             data->bcc,
@@ -3086,7 +3106,6 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window)
        }
 
        /* Free data: */
-       g_free (from);
        g_free (account_name);
        g_object_unref (G_OBJECT (transport_account));
        g_object_unref (G_OBJECT (mail_operation));
@@ -6073,7 +6092,9 @@ retrieve_contents_cb (ModestMailOperation *mail_op,
 {
        /* We only need this callback to show an error in case of
           memory low condition */
-       modest_ui_actions_msg_retrieval_check (mail_op, header, msg);
+       if (!modest_ui_actions_msg_retrieval_check (mail_op, header, msg)) {
+               g_debug ("%s: message failed to retrieve. Memory low?", __FUNCTION__);
+       }
 }
 
 static void
@@ -6554,7 +6575,11 @@ modest_ui_actions_get_msg_already_deleted_error_msg (ModestWindow *win)
                }
                iter = tny_list_create_iterator (headers);
                header = TNY_HEADER (tny_iterator_get_current (iter));
-               folder = TNY_FOLDER_STORE (tny_header_get_folder (header));
+               if (header) {
+                       folder = TNY_FOLDER_STORE (tny_header_get_folder (header));
+               } else {
+                       g_warning ("List should contain headers");
+               }
                g_object_unref (iter);
                g_object_unref (headers);
 #endif