Enable live search in accounts window
[modest] / src / modest-ui-actions.c
index fd8c43a..5a9bb0f 100644 (file)
@@ -398,12 +398,16 @@ headers_action_mark_as_read (TnyHeader *header,
                             gpointer user_data)
 {
        TnyHeaderFlags flags;
+       gchar *uid;
 
        g_return_if_fail (TNY_IS_HEADER(header));
 
        flags = tny_header_get_flags (header);
        if (flags & TNY_HEADER_FLAG_SEEN) return;
        tny_header_set_flag (header, TNY_HEADER_FLAG_SEEN);
+       uid = modest_tny_folder_get_header_unique_id (header);
+       modest_platform_emit_msg_read_changed_signal (uid, TRUE);
+       g_free (uid);
 }
 
 static void
@@ -417,7 +421,10 @@ headers_action_mark_as_unread (TnyHeader *header,
 
        flags = tny_header_get_flags (header);
        if (flags & TNY_HEADER_FLAG_SEEN)  {
+               gchar *uid;
+               uid = modest_tny_folder_get_header_unique_id (header);
                tny_header_unset_flag (header, TNY_HEADER_FLAG_SEEN);
+               modest_platform_emit_msg_read_changed_signal (uid, FALSE);
        }
 }
 
@@ -827,8 +834,7 @@ modest_ui_actions_compose_msg(ModestWindow *win,
        TnyMsg *msg = NULL;
        TnyAccount *account = NULL;
        TnyFolder *folder = NULL;
-       gchar *from_str = NULL, *signature = NULL, *body = NULL;
-       gchar *recipient = NULL;
+       gchar *from_str = NULL, *signature = NULL, *body = NULL, *recipient = NULL, *tmp = NULL;
        gboolean use_signature = FALSE;
        ModestWindow *msg_win = NULL;
        ModestAccountMgr *mgr = modest_runtime_get_account_mgr();
@@ -836,6 +842,7 @@ modest_ui_actions_compose_msg(ModestWindow *win,
        GnomeVFSFileSize total_size, allowed_size;
        guint64 available_disk, expected_size, parts_size;
        guint parts_count;
+       TnyList *header_pairs;
 
        /* we check for low-mem */
        if (modest_platform_check_memory_low (win, TRUE))
@@ -897,37 +904,23 @@ modest_ui_actions_compose_msg(ModestWindow *win,
                goto cleanup;
        }
 
+
        recipient = modest_text_utils_get_email_address (from_str);
-       signature = modest_account_mgr_get_signature_from_recipient (mgr, recipient, &use_signature);
+       tmp = modest_account_mgr_get_signature_from_recipient (modest_runtime_get_account_mgr (),
+                                                              recipient,
+                                                              &use_signature);
+       signature = modest_text_utils_create_colored_signature (tmp);
+       g_free (tmp);
        g_free (recipient);
-       if (body_str != NULL) {
-               body = use_signature ? g_strconcat(body_str, "\n",
-                                                  MODEST_TEXT_UTILS_SIGNATURE_MARKER,
-                                                  "\n", signature, NULL) : g_strdup(body_str);
-       } else {
-
-               gchar *gray_color_markup = NULL, *color_begin = NULL, *color_end = NULL;
-               GdkColor color;
 
-               if (win && gtk_style_lookup_color (gtk_widget_get_style ((GtkWidget *) win),
-                                                  "SecondaryTextColor", &color))
-                       gray_color_markup = modest_text_utils_get_color_string (&color);
-               if (!gray_color_markup)
-                       gray_color_markup = g_strdup ("#babababababa");
-
-               color_begin = g_strdup_printf ("<font color=\"%s\">", gray_color_markup);
-               color_end = "</font>";
-
-               body = use_signature ? g_strconcat("<br/>\n", color_begin,
-                                               MODEST_TEXT_UTILS_SIGNATURE_MARKER, "<br/>\n",
-                                               signature, color_end, NULL) : g_strdup("");
-
-               g_free (gray_color_markup);
-               g_free (color_begin);
-       }
+       body = use_signature ? g_strconcat ((body_str) ? body_str : "", signature, NULL) :
+               g_strdup(body_str);
 
+       header_pairs = TNY_LIST (tny_simple_list_new ());
        msg = modest_tny_msg_new_html_plain (to_str, from_str, cc_str, bcc_str, subject_str,
-                                       NULL, NULL, body, NULL, NULL, NULL, NULL, NULL);
+                                            NULL, NULL, body, NULL, NULL, NULL, NULL, header_pairs, NULL);
+       g_object_unref (header_pairs);
+
        if (!msg) {
                g_printerr ("modest: failed to create new msg\n");
                goto cleanup;
@@ -1792,9 +1785,8 @@ reply_forward_cb (ModestMailOperation *mail_op,
        gchar *from = NULL;
        TnyAccount *account = NULL;
        ModestWindowMgr *mgr = NULL;
-       gchar *signature = NULL;
+       gchar *signature = NULL, *recipient = 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
@@ -1805,9 +1797,10 @@ reply_forward_cb (ModestMailOperation *mail_op,
 
        from = modest_account_mgr_get_from_string (modest_runtime_get_account_mgr(),
                                                   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, 
+       signature = modest_account_mgr_get_signature_from_recipient (modest_runtime_get_account_mgr (),
+                                                                    recipient,
                                                                     &use_signature);
        g_free (recipient);
 
@@ -2233,6 +2226,68 @@ reply_forward (ReplyForwardAction action, ModestWindow *win)
 }
 
 void
+modest_ui_actions_reply_calendar (ModestWindow *win, TnyList *header_pairs)
+{
+       gchar *from;
+       gchar *recipient;
+       gchar *signature;
+       gboolean use_signature;
+       TnyMsg *new_msg;
+       GtkWidget *msg_win;
+       const gchar *account_name;
+       const gchar *mailbox;
+       TnyHeader *msg_header;
+       ModestWindowMgr *mgr;
+       TnyMsg *msg;
+
+       g_return_if_fail (MODEST_IS_MSG_VIEW_WINDOW(win));
+
+       /* we check for low-mem; in that case, show a warning, and don't allow
+        * reply/forward (because it could potentially require a lot of memory */
+       if (modest_platform_check_memory_low (MODEST_WINDOW(win), TRUE))
+               return;
+
+       account_name = modest_window_get_active_account (MODEST_WINDOW (win));
+       mailbox = modest_window_get_active_mailbox (MODEST_WINDOW (win));
+       from = modest_account_mgr_get_from_string (modest_runtime_get_account_mgr(),
+                                                  account_name, 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);
+
+       msg = modest_msg_view_window_get_message(MODEST_MSG_VIEW_WINDOW(win));
+       g_return_if_fail(msg);
+
+       msg_header = tny_msg_get_header (msg);
+       new_msg =
+               modest_tny_msg_create_reply_calendar_msg (msg, msg_header, from,
+                                                         (use_signature) ? signature : NULL,
+                                                         header_pairs);
+       g_object_unref (msg_header);
+
+       g_free (from);
+       g_free (signature);
+
+       if (!new_msg) {
+               g_warning ("%s: failed to create message\n", __FUNCTION__);
+               goto cleanup;
+       }
+
+       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);
+
+       /* Show edit window */
+       gtk_widget_show_all (GTK_WIDGET (msg_win));
+
+cleanup:
+       if (new_msg)
+               g_object_unref (G_OBJECT (new_msg));
+}
+
+void
 modest_ui_actions_on_reply (GtkAction *action, ModestWindow *win)
 {
        g_return_if_fail (MODEST_IS_WINDOW(win));
@@ -3251,6 +3306,7 @@ modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edi
                                              data->priority_flags,
                                              data->references,
                                              data->in_reply_to,
+                                             data->custom_header_pairs,
                                              on_save_to_drafts_cb,
                                              g_object_ref(edit_window));
 
@@ -3412,7 +3468,8 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window)
                                             data->images,
                                             data->references,
                                             data->in_reply_to,
-                                            data->priority_flags);
+                                            data->priority_flags,
+                                            data->custom_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"));
@@ -3444,6 +3501,59 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window)
        return !had_error;
 }
 
+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;
+
+       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;
+}
+
 void
 modest_ui_actions_on_toggle_bold (GtkToggleAction *action,
                                  ModestMsgEditWindow *window)
@@ -7103,7 +7213,7 @@ modest_ui_actions_on_delete_account (GtkWindow *parent_window,
                           distinguish if the notification belongs to
                           this account or not, so for safety reasons
                           we remove them all */
-                       modest_platform_remove_new_mail_notifications (FALSE);
+                       modest_platform_remove_new_mail_notifications (FALSE, account_name);
                } else {
                        g_warning ("%s: modest_account_mgr_remove_account() failed.\n", __FUNCTION__);
                }