2005-08-10 [colin] 1.9.13cvs31
[claws.git] / src / procmsg.c
index 4b5c319a060792f19cc82caad3dd0cd21ea68fec..16ff841327c8d63196b89fabd80f3145cd8958c1 100644 (file)
@@ -595,14 +595,14 @@ void procmsg_get_filter_keyword(MsgInfo *msginfo, gchar **header, gchar **key,
                        SET_FILTER_KEY("header \"List-Id\"", H_LIST_ID);
                        extract_list_id_str(*key);
                } else if (hentry[H_X_SEQUENCE].body != NULL) {
-                       guchar *p;
+                       gchar *p;
 
                        SET_FILTER_KEY("X-Sequence", H_X_SEQUENCE);
                        p = *key;
                        while (*p != '\0') {
-                               while (*p != '\0' && !isspace(*p)) p++;
-                               while (isspace(*p)) p++;
-                               if (isdigit(*p)) {
+                               while (*p != '\0' && !g_ascii_isspace(*p)) p++;
+                               while (g_ascii_isspace(*p)) p++;
+                               if (g_ascii_isdigit(*p)) {
                                        *p = '\0';
                                        break;
                                }
@@ -659,7 +659,7 @@ void procmsg_empty_trash(FolderItem *trash)
 
                        procmsg_msginfo_free(msginfo);
                }
-
+               g_slist_free(mlist);
                folder_item_remove_all_msg(trash);
        }
 }
@@ -670,8 +670,13 @@ void procmsg_empty_all_trash(void)
        GList *cur;
 
        for (cur = folder_get_list(); cur != NULL; cur = cur->next) {
-               trash = FOLDER(cur->data)->trash;
+               Folder *folder = FOLDER(cur->data);
+               trash = folder->trash;
                procmsg_empty_trash(trash);
+               if (folder->account && folder->account->set_trash_folder && 
+                   folder_find_item_from_identifier(folder->account->trash_folder))
+                       procmsg_empty_trash(
+                               folder_find_item_from_identifier(folder->account->trash_folder));
        }
 }
 
@@ -868,6 +873,28 @@ gint procmsg_send_queue(FolderItem *queue, gboolean save_msgs)
        return (err != 0 ? -err : sent);
 }
 
+/*!
+ *\brief       Determine if a queue folder is empty
+ *
+ *\param       queue Queue folder to process
+ *
+ *\return      TRUE if the queue folder is empty, otherwise return FALSE
+ */
+gboolean procmsg_queue_is_empty(FolderItem *queue)
+{
+       GSList *list;
+       gboolean res = FALSE;
+       if (!queue)
+               queue = folder_get_default_queue();
+       g_return_val_if_fail(queue != NULL, TRUE);
+
+       folder_item_scan(queue);
+       list = folder_item_get_msg_list(queue);
+       res = (list == NULL);
+       procmsg_msg_list_free(list);
+       return res;
+}
+
 gint procmsg_remove_special_headers(const gchar *in, const gchar *out)
 {
        FILE *fp, *outfp;
@@ -956,7 +983,11 @@ void procmsg_print_message(MsgInfo *msginfo, const gchar *cmdline)
 
        g_return_if_fail(msginfo);
 
-       if ((tmpfp = procmime_get_first_text_content(msginfo)) == NULL) {
+       if (procmime_msginfo_is_encrypted(msginfo))
+               tmpfp = procmime_get_first_encrypted_text_content(msginfo);
+       else
+               tmpfp = procmime_get_first_text_content(msginfo);
+       if (tmpfp == NULL) {
                g_warning("Can't get text part\n");
                return;
        }
@@ -991,7 +1022,7 @@ void procmsg_print_message(MsgInfo *msginfo, const gchar *cmdline)
                g_snprintf(buf, sizeof(buf) - 1, cmdline, prtmp);
        else {
                if (cmdline)
-                       g_warning("Print command line is invalid: `%s'\n",
+                       g_warning("Print command line is invalid: '%s'\n",
                                  cmdline);
                g_snprintf(buf, sizeof(buf) - 1, def_cmd, prtmp);
        }
@@ -1559,10 +1590,12 @@ static void update_folder_msg_counts(FolderItem *item, MsgInfo *msginfo, MsgPerm
        /* MARK flag */
        if (!(old_flags & MSG_MARKED) && (new_flags & MSG_MARKED)) {
                procmsg_update_unread_children(msginfo, TRUE);
+               item->marked_msgs++;
        }
 
        if ((old_flags & MSG_MARKED) && !(new_flags & MSG_MARKED)) {
                procmsg_update_unread_children(msginfo, FALSE);
+               item->marked_msgs--;
        }
 }
 
@@ -1828,6 +1861,8 @@ gboolean procmsg_msginfo_filter(MsgInfo *msginfo)
        if((filtering_rules != NULL) &&
           filter_message_by_msginfo(filtering_rules, msginfo))
                return TRUE;
+               
+       hooks_invoke(MAIL_POSTFILTERING_HOOKLIST, msginfo);
 
        return FALSE;
 }
@@ -1851,16 +1886,31 @@ MsgInfo *procmsg_msginfo_new_from_mimeinfo(MsgInfo *src_msginfo, MimeInfo *mimei
                mimeinfo->content = MIMECONTENT_FILE;
                mimeinfo->data.filename = g_strdup(tmpfile);
                g_free(tmpfile);
-       }
-
-       tmp_msginfo = procheader_parse_file(mimeinfo->data.filename,
-                               flags, TRUE, FALSE);
-
-       if (tmp_msginfo != NULL) {
-               tmp_msginfo->folder = src_msginfo->folder;
-               tmp_msginfo->plaintext_file = g_strdup(mimeinfo->data.filename);
+               tmp_msginfo = procheader_parse_file(mimeinfo->data.filename,
+                                       flags, TRUE, FALSE);
+               if (tmp_msginfo != NULL) {
+                       tmp_msginfo->folder = src_msginfo->folder;
+                       tmp_msginfo->plaintext_file = g_strdup(mimeinfo->data.filename);
+               } else {
+                       g_warning("procmsg_msginfo_new_from_mimeinfo(): Can't generate new msginfo");
+               }
        } else {
-               g_warning("procmsg_msginfo_new_from_mimeinfo(): Can't generate new msginfo");
+               gchar *tmpfile = get_tmp_file();
+               FILE *fp = fopen(tmpfile, "wb");
+               if (fp && procmime_write_message_rfc822(mimeinfo, fp) >= 0) {
+                       tmp_msginfo = procheader_parse_file(
+                               tmpfile, flags, TRUE, FALSE);
+               }
+               if (fp)
+                       fclose(fp);
+               if (tmp_msginfo != NULL) {
+                       tmp_msginfo->folder = src_msginfo->folder;
+                       tmp_msginfo->plaintext_file = g_strdup(tmpfile);
+               } else {
+                       g_warning("procmsg_msginfo_new_from_mimeinfo(): Can't generate new msginfo");
+               }
+               g_free(tmpfile);
+               
        }
        
        return tmp_msginfo;