* Removed the password_selected signal
[modest] / src / modest-mail-operation.c
index e0068b3..5ea906b 100644 (file)
@@ -75,15 +75,15 @@ static TnyMimePart *         add_body_part    (TnyMsg *msg,
                                               gboolean has_attachments);
 
 
-static void modest_mail_operation_xfer_folder (ModestMailOperation *self,
-                                              TnyFolder *folder,
-                                              TnyFolderStore *parent,
-                                              gboolean delete_original);
+static void        modest_mail_operation_xfer_folder       (ModestMailOperation *self,
+                                                           TnyFolder *folder,
+                                                           TnyFolderStore *parent,
+                                                           gboolean delete_original);
 
-static void modest_mail_operation_xfer_msg    (ModestMailOperation *self,
-                                              TnyHeader *header, 
-                                              TnyFolder *folder, 
-                                              gboolean delete_original);
+static gboolean    modest_mail_operation_xfer_msg          (ModestMailOperation *self,
+                                                           TnyHeader *header, 
+                                                           TnyFolder *folder, 
+                                                           gboolean delete_original);
 
 static TnyFolder * modest_mail_operation_find_trash_folder (ModestMailOperation *self,
                                                            TnyStoreAccount *store_account);
@@ -309,9 +309,10 @@ create_reply_forward_mail (TnyMsg *msg, const gchar *from, gboolean is_reply, gu
        TnyMimePart *body;
        ModestFormatter *formatter;
 
-       /* Get body from original msg */
+       /* Get body from original msg. Always look for the text/plain
+          part of the message to create the reply/forwarded mail */
        header = tny_msg_get_header (msg);
-       body   = modest_tny_msg_actions_find_body_part (msg, TRUE);
+       body   = modest_tny_msg_actions_find_body_part (msg, FALSE);
 
        /* TODO: select the formatter from account prefs */
        formatter = modest_formatter_new ("text/plain");
@@ -394,6 +395,9 @@ modest_mail_operation_create_reply_mail (TnyMsg *msg,
        TnyMsg *new_msg;
        TnyHeader *new_header, *header;
        const gchar* reply_to;
+       gchar *new_cc = NULL;
+       const gchar *cc = NULL, *bcc = NULL;
+       GString *tmp = NULL;
 
        new_msg = create_reply_forward_mail (msg, from, TRUE, reply_type);
 
@@ -407,10 +411,6 @@ modest_mail_operation_create_reply_mail (TnyMsg *msg,
                tny_header_set_to (new_header, tny_header_get_from (header));
 
        switch (reply_mode) {
-               gchar *new_cc = NULL;
-               const gchar *cc = NULL, *bcc = NULL;
-               GString *tmp = NULL;
-
        case MODEST_MAIL_OPERATION_REPLY_MODE_SENDER:
                /* Do not fill neither cc nor bcc */
                break;
@@ -480,14 +480,14 @@ folder_refresh_cb (TnyFolder *folder, gboolean canceled, GError **err, gpointer
 
        if (priv->done == priv->total)
                priv->status = MODEST_MAIL_OPERATION_STATUS_SUCCESS;
-       else if ((priv->done + helper->canceled + helper->failed) == priv->total)
+       else if ((priv->done + helper->canceled + helper->failed) == priv->total) {
                if (helper->failed == priv->total)
                        priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED;
                else if (helper->failed == priv->total)
                        priv->status = MODEST_MAIL_OPERATION_STATUS_CANCELED;
                else
                        priv->status = MODEST_MAIL_OPERATION_STATUS_FINISHED_WITH_ERRORS;
-
+       }
        tny_iterator_next (helper->iter);
        if (tny_iterator_is_done (helper->iter)) {
                TnyList *list;
@@ -510,7 +510,6 @@ update_folders_cb (TnyFolderStore *folder_store, TnyList *list, GError **err, gp
 {
        ModestMailOperation *self;
        ModestMailOperationPrivate *priv;
-       TnyList *folders;
        RefreshFolderAsyncHelper *helper;
 
        self  = MODEST_MAIL_OPERATION (user_data);
@@ -839,26 +838,26 @@ modest_mail_operation_find_trash_folder (ModestMailOperation *self,
 /* **************************  MSG  ACTIONS  ************************* */
 /* ******************************************************************* */
 
-void 
+gboolean 
 modest_mail_operation_copy_msg (ModestMailOperation *self,
                                TnyHeader *header, 
                                TnyFolder *folder)
 {
-       g_return_if_fail (TNY_IS_HEADER (header));
-       g_return_if_fail (TNY_IS_FOLDER (folder));
+       g_return_val_if_fail (TNY_IS_HEADER (header), FALSE);
+       g_return_val_if_fail (TNY_IS_FOLDER (folder), FALSE);
 
-       modest_mail_operation_xfer_msg (self, header, folder, FALSE);
+       return modest_mail_operation_xfer_msg (self, header, folder, FALSE);
 }
 
-void 
+gboolean 
 modest_mail_operation_move_msg (ModestMailOperation *self,
                                TnyHeader *header, 
                                TnyFolder *folder)
 {
-       g_return_if_fail (TNY_IS_HEADER (header));
-       g_return_if_fail (TNY_IS_FOLDER (folder));
+       g_return_val_if_fail (TNY_IS_HEADER (header), FALSE);
+       g_return_val_if_fail (TNY_IS_FOLDER (folder), FALSE);
 
-       modest_mail_operation_xfer_msg (self, header, folder, TRUE);
+       return modest_mail_operation_xfer_msg (self, header, folder, TRUE);
 }
 
 void 
@@ -880,7 +879,19 @@ modest_mail_operation_remove_msg (ModestMailOperation *self,
                store_account = TNY_STORE_ACCOUNT (tny_folder_get_account (folder));
                trash_folder = modest_mail_operation_find_trash_folder (self, store_account);
 
-               modest_mail_operation_move_msg (self, header, trash_folder);
+               if (trash_folder) {
+                       modest_mail_operation_move_msg (self, header, trash_folder);
+/*                     g_object_unref (trash_folder); */
+               } else {
+                       ModestMailOperationPrivate *priv;
+
+                       /* Set status failed and set an error */
+                       priv = MODEST_MAIL_OPERATION_GET_PRIVATE(self);
+                       priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED;
+                       g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR,
+                                    MODEST_MAIL_OPERATION_ERROR_ITEM_NOT_FOUND,
+                                    _("Error trying to delete a message. Trash folder not found"));
+               }
 
                g_object_unref (G_OBJECT (store_account));
        } else {
@@ -893,24 +904,44 @@ modest_mail_operation_remove_msg (ModestMailOperation *self,
 }
 
 static void
+transfer_msgs_cb (TnyFolder *folder, GError **err, gpointer user_data)
+{
+       ModestMailOperationPrivate *priv;
+
+       priv = MODEST_MAIL_OPERATION_GET_PRIVATE(user_data);
+       priv->done = 1;
+       priv->status = MODEST_MAIL_OPERATION_STATUS_SUCCESS;
+
+       g_signal_emit (G_OBJECT (user_data), signals[PROGRESS_CHANGED_SIGNAL], 0, NULL);
+}
+
+static gboolean
 modest_mail_operation_xfer_msg (ModestMailOperation *self,
                                TnyHeader *header, 
                                TnyFolder *folder, 
                                gboolean delete_original)
 {
+       ModestMailOperationPrivate *priv;
        TnyFolder *src_folder;
        TnyList *headers;
 
        src_folder = tny_header_get_folder (header);
        headers = tny_simple_list_new ();
 
-       /* Move */
+       priv = MODEST_MAIL_OPERATION_GET_PRIVATE(self);
+       priv->total = 1;
+       priv->done = 0;
+       priv->status = MODEST_MAIL_OPERATION_STATUS_IN_PROGRESS;
+
        tny_list_prepend (headers, G_OBJECT (header));
-       tny_folder_transfer_msgs (src_folder, headers, folder, delete_original, NULL); /* FIXME */
+       tny_folder_transfer_msgs_async (src_folder, headers, folder, 
+                                       delete_original, transfer_msgs_cb, self);
 
        /* Free */
        g_object_unref (headers);
        g_object_unref (folder);
+
+       return TRUE;
 }
 
 
@@ -946,17 +977,6 @@ get_content_type(const gchar *s)
        return g_string_free(type, FALSE);
 }
 
-static GQuark 
-modest_error_quark (void)
-{
-       static GQuark err_q = 0;
-       
-       if (err_q == 0)
-               err_q = g_quark_from_static_string ("modest-error-quark");
-       
-       return err_q;
-}
-
 static void
 add_attachments (TnyMsg *msg, GList *attachments_list)
 {