* src/procmsg.[ch]
[claws.git] / src / procmsg.c
index 075318e530a50d08bce16d2fad8163c430c41e3c..958024287ed02d952134e1cbc6bebfeb77a9f638 100644 (file)
@@ -382,27 +382,32 @@ gchar *procmsg_get_message_file(MsgInfo *msginfo)
        return filename;
 }
 
-GSList *procmsg_get_message_file_list(MsgInfoList *mlist)
+GSList *procmsg_get_message_file_list(GSList *mlist)
 {
-       GSList *file_list = NULL;
-       MsgInfo *msginfo;
-       gchar *file;
-
-       while (mlist != NULL) {
-               msginfo = (MsgInfo *)mlist->data;
-               file = procmsg_get_message_file(msginfo);
-               if (!file) {
-                       slist_free_strings(file_list);
-                       g_slist_free(file_list);
-                       return NULL;
-               }
-               file_list = g_slist_prepend(file_list, file);
-               mlist = mlist->next;
-       }
-
-       file_list = g_slist_reverse(file_list);
-
-       return file_list;
+        GSList *file_list = NULL;
+        MsgInfo *msginfo;
+        MsgFileInfo *fileinfo;
+        gchar *file;
+
+        while (mlist != NULL) {
+                msginfo = (MsgInfo *)mlist->data;
+                file = procmsg_get_message_file(msginfo);
+                if (!file) {
+                        procmsg_message_file_list_free(file_list);
+                        return NULL;
+                }
+                fileinfo = g_new(MsgFileInfo, 1);
+               fileinfo->msginfo = procmsg_msginfo_new_ref(msginfo);
+                fileinfo->file = file;
+                fileinfo->flags = g_new(MsgFlags, 1);
+                *fileinfo->flags = msginfo->flags;
+                file_list = g_slist_prepend(file_list, fileinfo);
+                mlist = mlist->next;
+        }
+
+        file_list = g_slist_reverse(file_list);
+
+        return file_list;
 }
 
 void procmsg_message_file_list_free(MsgInfoList *file_list)
@@ -412,6 +417,7 @@ void procmsg_message_file_list_free(MsgInfoList *file_list)
 
        for (cur = file_list; cur != NULL; cur = cur->next) {
                fileinfo = (MsgFileInfo *)cur->data;
+               procmsg_msginfo_free(fileinfo->msginfo);
                g_free(fileinfo->file);
                g_free(fileinfo->flags);
                g_free(fileinfo);
@@ -724,7 +730,7 @@ gint procmsg_save_to_outbox(FolderItem *outbox, const gchar *file,
                            gboolean is_queued)
 {
        gint num;
-       MsgInfo *msginfo;
+       MsgInfo *msginfo, *tmp_msginfo;
 
        debug_print("saving sent message...\n");
 
@@ -756,10 +762,17 @@ gint procmsg_save_to_outbox(FolderItem *outbox, const gchar *file,
                }
                return -1;
        }
-       msginfo = folder_item_get_msginfo(outbox, num);
+       msginfo = folder_item_get_msginfo(outbox, num);         /* refcnt++ */
+       tmp_msginfo = procmsg_msginfo_get_full_info(msginfo);   /* refcnt++ */ 
        if (msginfo != NULL) {
-           procmsg_msginfo_unset_flags(msginfo, ~0, 0);
-           procmsg_msginfo_free(msginfo);
+               procmsg_msginfo_unset_flags(msginfo, ~0, 0);
+               procmsg_msginfo_free(msginfo);                  /* refcnt-- */
+               /* tmp_msginfo == msginfo */
+               if (tmp_msginfo && (msginfo->dispositionnotificationto || 
+                   msginfo->returnreceiptto)) {
+                       procmsg_msginfo_set_flags(msginfo, MSG_RETRCPT_SENT, 0); 
+                       procmsg_msginfo_free(msginfo);          /* refcnt-- */
+               }       
        }
        folder_item_update(outbox, TRUE);