/*
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2005 Hiroyuki Yamamoto
+ * Copyright (C) 1999-2006 Hiroyuki Yamamoto and the Sylpheed-Claws team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
#include "hooks.h"
#include "msgcache.h"
#include "partial_download.h"
+#include "mainwindow.h"
+#include "summaryview.h"
static gint procmsg_send_message_queue_full(const gchar *file, gboolean keep_session);
fclose(outfp);
fclose(fp);
return 0;
+}
+#if 0
+gchar *procmsg_add_special_headers(const gchar *in, FolderItem *item)
+{
+ gchar *out = get_tmp_file();
+ FILE *fp = NULL;
+ PrefsAccount *account = NULL;
+ if (out == NULL)
+ return NULL;
+
+ fp = fopen(out, "wb");
+ if (fp == NULL) {
+ g_free(out);
+ return NULL;
+ }
+
+ if (item && item->prefs && item->prefs->enable_default_account)
+ account = account_find_from_id(item->prefs->default_account);
+
+ if (!account) account = cur_account;
+
+ if (!account) {
+ fclose(fp);
+ g_free(out);
+ return NULL;
+ }
+
+ fprintf(fp, "X-Sylpheed-Account-Id:%d\n", account->account_id);
+ fprintf(fp, "S:%s\n", account->address);
+ if (item && item->prefs && item->prefs->save_copy_to_folder) {
+ gchar *folderidentifier;
+
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(compose->savemsg_checkbtn), prefs_common.savemsg);
+ folderidentifier = folder_item_get_identifier(item);
+ fprintf(fp, "SCF:%s\n", folderidentifier);
+ g_free(folderidentifier);
+ } else if (account_get_special_folder(account, F_OUTBOX)) {
+ gchar *folderidentifier = folder_item_get_identifier(account_get_special_folder
+ (compose->account, F_OUTBOX));
+ fprintf(fp, "SCF:%s\n", folderidentifier);
+ g_free(folderidentifier);
+ }
+ fprintf(fp, "\n");
+ fclose(fp);
+ return out;
}
+#endif
gint procmsg_save_to_outbox(FolderItem *outbox, const gchar *file,
gboolean is_queued)
{
MEMBCOPY(folder);
MEMBCOPY(to_folder);
+ MEMBDUP(face);
MEMBDUP(xface);
MEMBDUP(dispositionnotificationto);
MEMBDUP(returnreceiptto);
* procheader.c::procheader_get_headernames() */
if (!msginfo->xface)
msginfo->xface = g_strdup(full_msginfo->xface);
+ if (!msginfo->face)
+ msginfo->face = g_strdup(full_msginfo->face);
if (!msginfo->dispositionnotificationto)
msginfo->dispositionnotificationto =
g_strdup(full_msginfo->dispositionnotificationto);
g_free(msginfo->returnreceiptto);
g_free(msginfo->dispositionnotificationto);
g_free(msginfo->xface);
+ g_free(msginfo->face);
g_free(msginfo->fromname);
memusage += strlen(msginfo->inreplyto);
if (msginfo->xface)
memusage += strlen(msginfo->xface);
+ if (msginfo->face)
+ memusage += strlen(msginfo->face);
if (msginfo->dispositionnotificationto)
memusage += strlen(msginfo->dispositionnotificationto);
if (msginfo->returnreceiptto)
fclose(fp);
if (tmp_msginfo != NULL) {
- tmp_msginfo->folder = src_msginfo->folder;
+ if (src_msginfo)
+ 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");
return tmp_msginfo;
}
+
+static GSList *spam_learners = NULL;
+
+void procmsg_register_spam_learner (void (*learn_func)(MsgInfo *info, GSList *list, gboolean spam))
+{
+ if (!g_slist_find(spam_learners, learn_func))
+ spam_learners = g_slist_append(spam_learners, learn_func);
+ if (mainwindow_get_mainwindow()) {
+ main_window_set_menu_sensitive(mainwindow_get_mainwindow());
+ summary_set_menu_sensitive(
+ mainwindow_get_mainwindow()->summaryview);
+ }
+}
+
+void procmsg_unregister_spam_learner (void (*learn_func)(MsgInfo *info, GSList *list, gboolean spam))
+{
+ spam_learners = g_slist_remove(spam_learners, learn_func);
+ if (mainwindow_get_mainwindow()) {
+ main_window_set_menu_sensitive(mainwindow_get_mainwindow());
+ summary_set_menu_sensitive(
+ mainwindow_get_mainwindow()->summaryview);
+ }
+}
+
+gboolean procmsg_spam_can_learn(void)
+{
+ return g_slist_length(spam_learners) > 0;
+}
+
+void procmsg_spam_learner_learn (MsgInfo *info, GSList *list, gboolean spam)
+{
+ GSList *cur = spam_learners;
+ for (; cur; cur = cur->next) {
+ void ((*func)(MsgInfo *info, GSList *list, gboolean spam)) = cur->data;
+ func(info, list, spam);
+ }
+}
+
+static gchar *spam_folder_item = NULL;
+void procmsg_spam_set_folder (const char *item_identifier)
+{
+ if (spam_folder_item)
+ g_free(spam_folder_item);
+ if (item_identifier)
+ spam_folder_item = g_strdup(item_identifier);
+ else
+ spam_folder_item = NULL;
+}
+
+FolderItem *procmsg_spam_get_folder (void)
+{
+ FolderItem *item = spam_folder_item ? folder_find_item_from_identifier(spam_folder_item) : NULL;
+ return item ? item : folder_get_default_trash();
+}