void filteringaction_free(FilteringAction * action)
{
g_return_if_fail(action);
- if (action->destination)
- g_free(action->destination);
+ g_free(action->destination);
g_free(action);
}
g_free(prop);
}
+void filtering_move_and_copy_msg(MsgInfo *msginfo)
+{
+ GSList *list = g_slist_append(NULL, msginfo);
+ filtering_move_and_copy_msgs(list);
+ g_slist_free(list);
+}
+
/* move and copy messages by batches to be faster on IMAP */
void filtering_move_and_copy_msgs(GSList *msgs)
{
for (cur = messages; cur; cur = cur->next) {
MsgInfo *info = (MsgInfo *)cur->data;
if (last_item == NULL) {
- last_item = info->to_folder;
+ last_item = info->to_filter_folder;
}
if (last_item == NULL)
continue;
is_move = TRUE;
}
found++;
- if (info->to_folder == last_item
+ if (info->to_filter_folder == last_item
&& info->is_copy == is_copy
&& info->is_move == is_move) {
batch = g_slist_append(batch, info);
messages = g_slist_remove(messages, info);
}
if (g_slist_length(batch)) {
+ MsgInfo *info = (MsgInfo *)batch->data;
debug_print("%s %d messages to %s\n",
is_copy?"copying":"moving",
g_slist_length(batch),
folder_item_get_path(last_item));
- if (is_copy) {
+ if (is_copy && last_item != info->folder) {
folder_item_copy_msgs(last_item, batch);
- } else if (is_move) {
+ } else if (is_move && last_item != info->folder) {
if (folder_item_move_msgs(last_item, batch) < 0)
folder_item_move_msgs(
folder_get_default_inbox(),
/* mark message to be moved */
info->is_move = TRUE;
- info->to_folder = dest_folder;
+ info->to_filter_folder = dest_folder;
debug_print("set to move to %s\n", folder_item_get_path(dest_folder));
return TRUE;
/* mark message to be copied */
info->is_copy = TRUE;
- info->to_folder = dest_folder;
+ info->to_filter_folder = dest_folder;
debug_print("set to copy to %s\n", folder_item_get_path(dest_folder));
return TRUE;
account = account_find_from_id(action->account_id);
compose = compose_forward(account, info,
action->type == MATCHACTION_FORWARD ? FALSE : TRUE,
- NULL, TRUE);
+ NULL, TRUE, TRUE);
compose_entry_append(compose, action->destination,
compose->account->protocol == A_NNTP
? COMPOSE_NEWSGROUPS
case MATCHACTION_REDIRECT:
account = account_find_from_id(action->account_id);
- compose = compose_redirect(account, info);
+ compose = compose_redirect(account, info, TRUE);
if (compose->account->protocol == A_NNTP)
break;
else
info->hidden = TRUE;
return TRUE;
+ case MATCHACTION_IGNORE:
+ procmsg_msginfo_set_flags(info, MSG_IGNORE_THREAD, 0);
+ return TRUE;
+
default:
break;
}
case MATCHACTION_MARK_AS_UNREAD:
case MATCHACTION_STOP:
case MATCHACTION_HIDE:
+ case MATCHACTION_IGNORE:
g_snprintf(dest, destlen, "%s", command_str);
return dest;