ignore threads
[claws.git] / src / procmsg.c
index 969a0e8f3fbb9713b88dc7abb019d9a0a692a695..3a3b0e32b693f680b3a6ff16a60b9f6ec78a9051 100644 (file)
@@ -229,10 +229,12 @@ GSList *procmsg_read_cache(FolderItem *item, gboolean scan_file)
                READ_CACHE_DATA(msginfo->date, fp);
                READ_CACHE_DATA(msginfo->from, fp);
                READ_CACHE_DATA(msginfo->to, fp);
+               READ_CACHE_DATA(msginfo->cc, fp);
                READ_CACHE_DATA(msginfo->newsgroups, fp);
                READ_CACHE_DATA(msginfo->subject, fp);
                READ_CACHE_DATA(msginfo->msgid, fp);
                READ_CACHE_DATA(msginfo->inreplyto, fp);
+               READ_CACHE_DATA(msginfo->references, fp);
 
                MSG_SET_FLAGS(msginfo->flags, default_flags);
 
@@ -279,6 +281,9 @@ void procmsg_set_flags(GSList *mlist, FolderItem *item)
        debug_print(_("\tMarking the messages..."));
 
        markdir = folder_item_get_path(item);
+       if (!is_dir_exist(markdir))
+               make_dir_hier(markdir);
+
        mark_table = procmsg_read_mark_file(markdir);
        g_free(markdir);
 
@@ -342,6 +347,18 @@ gint procmsg_get_last_num_in_cache(GSList *mlist)
        return last;
 }
 
+void procmsg_msg_list_free(GSList *mlist)
+{
+       GSList *cur;
+       MsgInfo *msginfo;
+
+       for (cur = mlist; cur != NULL; cur = cur->next) {
+               msginfo = (MsgInfo *)cur->data;
+               procmsg_msginfo_free(msginfo);
+       }
+       g_slist_free(mlist);
+}
+
 void procmsg_write_cache(MsgInfo *msginfo, FILE *fp)
 {
        MsgFlags flags = msginfo->flags & MSG_CACHED_FLAG_MASK;
@@ -357,10 +374,12 @@ void procmsg_write_cache(MsgInfo *msginfo, FILE *fp)
        WRITE_CACHE_DATA(msginfo->date, fp);
        WRITE_CACHE_DATA(msginfo->from, fp);
        WRITE_CACHE_DATA(msginfo->to, fp);
+       WRITE_CACHE_DATA(msginfo->cc, fp);
        WRITE_CACHE_DATA(msginfo->newsgroups, fp);
        WRITE_CACHE_DATA(msginfo->subject, fp);
        WRITE_CACHE_DATA(msginfo->msgid, fp);
        WRITE_CACHE_DATA(msginfo->inreplyto, fp);
+       WRITE_CACHE_DATA(msginfo->references, fp);
 }
 
 void procmsg_write_flags(MsgInfo *msginfo, FILE *fp)
@@ -384,8 +403,8 @@ static void mark_sum_func(gpointer key, gpointer value, gpointer data)
        MsgFlags flags = GPOINTER_TO_UINT(value);
        struct MarkSum *marksum = data;
 
-       if (MSG_IS_NEW(flags)) (*marksum->new)++;
-       if (MSG_IS_UNREAD(flags)) (*marksum->unread)++;
+       if (MSG_IS_NEW(flags) && !MSG_IS_IGNORE_THREAD(flags)) (*marksum->new)++;
+       if (MSG_IS_UNREAD(flags) && !MSG_IS_IGNORE_THREAD(flags)) (*marksum->unread)++;
        (*marksum->total)++;
 }
 
@@ -556,6 +575,7 @@ gchar *procmsg_get_message_file_path(MsgInfo *msginfo)
                file = g_strdup(msginfo->plaintext_file);
        else {
                path = folder_item_get_path(msginfo->folder);
+
                file = g_strconcat(path, G_DIR_SEPARATOR_S,
                                   itos(msginfo->msgnum), NULL);
                g_free(path);
@@ -689,6 +709,7 @@ void procmsg_print_message(MsgInfo *msginfo, const gchar *cmdline)
        if (msginfo->date) fprintf(prfp, "Date: %s\n", msginfo->date);
        if (msginfo->from) fprintf(prfp, "From: %s\n", msginfo->from);
        if (msginfo->to)   fprintf(prfp, "To: %s\n", msginfo->to);
+       if (msginfo->cc)   fprintf(prfp, "Cc: %s\n", msginfo->cc);
        if (msginfo->newsgroups)
                fprintf(prfp, "Newsgroups: %s\n", msginfo->newsgroups);
        if (msginfo->subject) fprintf(prfp, "Subject: %s\n", msginfo->subject);
@@ -740,6 +761,7 @@ MsgInfo *procmsg_msginfo_copy(MsgInfo *msginfo)
        MEMBDUP(date);
        MEMBDUP(from);
        MEMBDUP(to);
+       MEMBDUP(cc);
        MEMBDUP(newsgroups);
        MEMBDUP(subject);
        MEMBDUP(msgid);
@@ -750,6 +772,11 @@ MsgInfo *procmsg_msginfo_copy(MsgInfo *msginfo)
 
        MEMBDUP(xface);
        MEMBDUP(dispositionnotificationto);
+       MEMBDUP(returnreceiptto);
+       MEMBDUP(references);
+
+       MEMBCOPY(score);
+       MEMBCOPY(threadscore);
 
        return newmsginfo;
 }
@@ -758,6 +785,9 @@ void procmsg_msginfo_free(MsgInfo *msginfo)
 {
        if (msginfo == NULL) return;
 
+       g_free(msginfo->fromspace);
+       g_free(msginfo->references);
+       g_free(msginfo->returnreceiptto);
        g_free(msginfo->dispositionnotificationto);
        g_free(msginfo->xface);
 
@@ -766,6 +796,7 @@ void procmsg_msginfo_free(MsgInfo *msginfo)
        g_free(msginfo->date);
        g_free(msginfo->from);
        g_free(msginfo->to);
+       g_free(msginfo->cc);
        g_free(msginfo->newsgroups);
        g_free(msginfo->subject);
        g_free(msginfo->msgid);