MsgInfo *msginfo;
FolderItem *dest = NULL;
gint retval = 0;
-
+ gboolean finished = TRUE;
if (!mlist) return 0;
folder_item_update_freeze();
+next_folder:
for (cur = mlist; cur != NULL; cur = cur->next) {
msginfo = (MsgInfo *)cur->data;
+ if (!msginfo->to_folder) {
+ continue;
+ } else {
+ finished = FALSE;
+ }
if (!dest) {
dest = msginfo->to_folder;
movelist = g_slist_append(movelist, msginfo);
} else if (dest == msginfo->to_folder) {
movelist = g_slist_append(movelist, msginfo);
} else {
- folder_item_move_msgs(dest, movelist);
- g_slist_free(movelist);
- movelist = NULL;
- dest = msginfo->to_folder;
- movelist = g_slist_append(movelist, msginfo);
+ continue;
}
procmsg_msginfo_set_to_folder(msginfo, NULL);
}
-
if (movelist) {
- retval = folder_item_move_msgs(dest, movelist);
+ retval |= folder_item_move_msgs(dest, movelist);
g_slist_free(movelist);
+ movelist = NULL;
+ }
+ if (finished == FALSE) {
+ finished = TRUE;
+ dest = NULL;
+ goto next_folder;
}
folder_item_update_thaw();
GSList *cur, *copylist = NULL;
MsgInfo *msginfo;
FolderItem *dest = NULL;
-
+ gboolean finished = TRUE;
if (!mlist) return;
folder_item_update_freeze();
+next_folder:
for (cur = mlist; cur != NULL; cur = cur->next) {
msginfo = (MsgInfo *)cur->data;
+ if (!msginfo->to_folder) {
+ continue;
+ } else {
+ finished = FALSE;
+ }
if (!dest) {
dest = msginfo->to_folder;
copylist = g_slist_append(copylist, msginfo);
} else if (dest == msginfo->to_folder) {
copylist = g_slist_append(copylist, msginfo);
} else {
- folder_item_copy_msgs(dest, copylist);
- g_slist_free(copylist);
- copylist = NULL;
- dest = msginfo->to_folder;
- copylist = g_slist_append(copylist, msginfo);
+ continue;
}
procmsg_msginfo_set_to_folder(msginfo, NULL);
}
-
if (copylist) {
folder_item_copy_msgs(dest, copylist);
g_slist_free(copylist);
+ copylist = NULL;
+ }
+ if (finished == FALSE) {
+ finished = TRUE;
+ dest = NULL;
+ goto next_folder;
}
folder_item_update_thaw();
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)
{
FolderItem *item;
if (replymessageid != NULL)
- tokens = g_strsplit(replymessageid, "\x7f", 0);
+ tokens = g_strsplit(replymessageid, "\t", 0);
else
- tokens = g_strsplit(fwdmessageid, "\x7f", 0);
+ tokens = g_strsplit(fwdmessageid, "\t", 0);
item = folder_find_item_from_identifier(tokens[0]);
/* check if queued message has valid folder and message id */
mail_filtering_data.msginfo = msginfo;
if (hooks_invoke(MAIL_FILTERING_HOOKLIST, &mail_filtering_data)) {
- hooks_invoke(MAIL_POSTFILTERING_HOOKLIST, msginfo);
return TRUE;
}
/* filter if enabled in prefs or move to inbox if not */
if((filtering_rules != NULL) &&
filter_message_by_msginfo(filtering_rules, msginfo)) {
- hooks_invoke(MAIL_POSTFILTERING_HOOKLIST, msginfo);
return TRUE;
}
- hooks_invoke(MAIL_POSTFILTERING_HOOKLIST, msginfo);
return FALSE;
}
static GSList *spam_learners = NULL;
-void procmsg_register_spam_learner (void (*learn_func)(MsgInfo *info, GSList *list, gboolean spam))
+void procmsg_register_spam_learner (int (*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);
main_window_set_menu_sensitive(mainwindow_get_mainwindow());
summary_set_menu_sensitive(
mainwindow_get_mainwindow()->summaryview);
+ toolbar_main_set_sensitive(mainwindow_get_mainwindow());
}
}
-void procmsg_unregister_spam_learner (void (*learn_func)(MsgInfo *info, GSList *list, gboolean spam))
+void procmsg_unregister_spam_learner (int (*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);
+ toolbar_main_set_sensitive(mainwindow_get_mainwindow());
}
}
return g_slist_length(spam_learners) > 0;
}
-void procmsg_spam_learner_learn (MsgInfo *info, GSList *list, gboolean spam)
+int procmsg_spam_learner_learn (MsgInfo *info, GSList *list, gboolean spam)
{
GSList *cur = spam_learners;
+ int ret = 0;
for (; cur; cur = cur->next) {
- void ((*func)(MsgInfo *info, GSList *list, gboolean spam)) = cur->data;
- func(info, list, spam);
+ int ((*func)(MsgInfo *info, GSList *list, gboolean spam)) = cur->data;
+ ret |= func(info, list, spam);
}
+ return ret;
}
static gchar *spam_folder_item = NULL;