2004-11-17 [colin] 0.9.12cvs156.1
[claws.git] / src / procmsg.c
index e4f70dd17de12fd85635071c3c4f618616f8af07..dd7ad649c18f39c035559c9d9dcd9c3bbe6346f3 100644 (file)
@@ -639,7 +639,7 @@ void procmsg_empty_all_trash(void)
  */
 gint procmsg_send_queue(FolderItem *queue, gboolean save_msgs)
 {
-       gint ret = 1, count = 0;
+       gint sent = 0, err = 0;
        GSList *list, *elem;
 
        if (!queue)
@@ -660,7 +660,7 @@ gint procmsg_send_queue(FolderItem *queue, gboolean save_msgs)
                                if (procmsg_send_message_queue(file) < 0) {
                                        g_warning("Sending queued message %d failed.\n", 
                                                  msginfo->msgnum);
-                                       ret = -1;
+                                       err++;
                                } else {
                                        /* CLAWS: 
                                         * We save in procmsg_send_message_queue because
@@ -672,7 +672,7 @@ gint procmsg_send_queue(FolderItem *queue, gboolean save_msgs)
                                                        (queue->folder->outbox,
                                                         file, TRUE);
                                         */
-                                       count++; 
+                                       sent++; 
                                        folder_item_remove_msg(queue, msginfo->msgnum);
                                }
                                g_free(file);
@@ -684,7 +684,7 @@ gint procmsg_send_queue(FolderItem *queue, gboolean save_msgs)
                procmsg_msginfo_free(msginfo);
        }
 
-       return ret * count;
+       return (err != 0 ? -err : sent);
 }
 
 gint procmsg_remove_special_headers(const gchar *in, const gchar *out)
@@ -1067,6 +1067,9 @@ gint procmsg_send_message_queue(const gchar *file)
        gchar buf[BUFFSIZE];
        gint hnum;
        PrefsAccount *mailac = NULL, *newsac = NULL;
+       gboolean save_clear_text = TRUE;
+       gchar *tmp_enc_file = NULL;
+
        int local = 0;
 
        g_return_val_if_fail(file != NULL, -1);
@@ -1132,8 +1135,11 @@ gint procmsg_send_message_queue(const gchar *file)
        if (encrypt) {
                MimeInfo *mimeinfo;
 
+               save_clear_text = (mailac != NULL && mailac->save_encrypted_as_clear_text);
+
                fclose(fp);
-               
+               fp = NULL;
+
                mimeinfo = procmime_scan_queue_file(file);
                if (!privacy_encrypt(privacy_system, mimeinfo, encrypt_data)
                || (fp = my_tmpfile()) == NULL
@@ -1154,9 +1160,27 @@ gint procmsg_send_message_queue(const gchar *file)
                        g_free(encrypt_data);
                        return -1;
                }
-
-               procmime_mimeinfo_free_all(mimeinfo);
+               
                rewind(fp);
+               if (!save_clear_text) {
+                       gchar *content = NULL;
+                       FILE *tmpfp = get_tmpfile_in_dir(get_mime_tmp_dir(), &tmp_enc_file);
+                       if (tmpfp) {
+                               fclose(tmpfp);
+
+                               content = file_read_stream_to_str(fp);
+                               rewind(fp);
+
+                               get_tmpfile_in_dir(get_mime_tmp_dir(), &tmp_enc_file);
+                               str_write_to_file(content, tmp_enc_file);
+                               g_free(content);
+                       } else {
+                               g_warning("couldn't get tempfile\n");
+                       }
+               } 
+               
+               procmime_mimeinfo_free_all(mimeinfo);
+               
                filepos = 0;
        }
 
@@ -1250,8 +1274,14 @@ gint procmsg_send_message_queue(const gchar *file)
                outbox = folder_find_item_from_identifier(savecopyfolder);
                if (!outbox)
                        outbox = folder_get_default_outbox();
-
-               procmsg_save_to_outbox(outbox, file, TRUE);
+                       
+               if (save_clear_text || tmp_enc_file == NULL) {
+                       procmsg_save_to_outbox(outbox, file, TRUE);
+               } else {
+                       procmsg_save_to_outbox(outbox, tmp_enc_file, FALSE);
+                       unlink(tmp_enc_file);
+                       free(tmp_enc_file);
+               }
        }
 
        if (replymessageid != NULL || fwdmessageid != NULL) {