GSList *cur;
for (cur = mlist ; cur != NULL ; cur = cur->next) {
MsgInfo * msginfo = (MsgInfo *) cur->data;
- if (MSG_IS_LOCKED(msginfo->flags))
+ if (MSG_IS_LOCKED(msginfo->flags)) {
+ procmsg_msginfo_free(msginfo);
continue;
+ }
if (msginfo->total_size != 0 &&
msginfo->size != (off_t)msginfo->total_size)
partial_mark_for_delete(msginfo);
if (send_queue_lock) {
/* Avoid having to translate two similar strings */
- log_warning("%s\n", _("Already trying to send."));
+ log_warning(LOG_PROTOCOL, "%s\n", _("Already trying to send."));
if (errstr) {
if (*errstr) g_free(*errstr);
*errstr = g_strdup_printf(_("Already trying to send."));
while (node != NULL) {
int res = 0;
next = node->next;
+ send_queue_lock = FALSE;
res = procmsg_send_queue(FOLDER_ITEM(node->data), save_msgs, errstr);
+ send_queue_lock = TRUE;
if (res < 0)
err = -res;
else
}
if (msginfo != NULL) {
+ MsgPermFlags to_unset = 0;
+
+ if (prefs_common.mark_as_read_on_new_window)
+ to_unset = (MSG_NEW|MSG_UNREAD);
+
if (replymessageid != NULL) {
- procmsg_msginfo_unset_flags(msginfo, MSG_FORWARDED, 0);
+ procmsg_msginfo_unset_flags(msginfo, to_unset|MSG_FORWARDED, 0);
procmsg_msginfo_set_flags(msginfo, MSG_REPLIED, 0);
} else {
procmsg_msginfo_unset_flags(msginfo, MSG_REPLIED, 0);
mail_filtering_data.filtered = NULL;
mail_filtering_data.unfiltered = NULL;
mail_filtering_data.account = ac_prefs;
- if (hooks_invoke(MAIL_FILTERING_HOOKLIST, &mail_filtering_data)) {
+
+ if (!ac_prefs || ac_prefs->filterhook_on_recv)
+ if (hooks_invoke(MAIL_FILTERING_HOOKLIST, &mail_filtering_data))
return TRUE;
- }
/* filter if enabled in prefs or move to inbox if not */
if((filtering_rules != NULL) &&
- filter_message_by_msginfo(filtering_rules, msginfo, ac_prefs)) {
+ filter_message_by_msginfo(filtering_rules, msginfo, ac_prefs,
+ FILTERING_INCORPORATION, NULL)) {
return TRUE;
}
mail_filtering_data.unfiltered = NULL;
mail_filtering_data.account = ac;
+ if (!ac || ac->filterhook_on_recv)
hooks_invoke(MAIL_LISTFILTERING_HOOKLIST, &mail_filtering_data);
if (mail_filtering_data.filtered == NULL &&
}
static gchar *spam_folder_item = NULL;
-void procmsg_spam_set_folder (const char *item_identifier)
+static FolderItem * (*procmsg_spam_get_folder_func)(MsgInfo *msginfo) = NULL;
+void procmsg_spam_set_folder (const char *item_identifier, FolderItem *(*spam_get_folder_func)(MsgInfo *info))
{
g_free(spam_folder_item);
if (item_identifier)
spam_folder_item = g_strdup(item_identifier);
else
spam_folder_item = NULL;
+ if (spam_get_folder_func != NULL)
+ procmsg_spam_get_folder_func = spam_get_folder_func;
+ else
+ procmsg_spam_get_folder_func = NULL;
}
-FolderItem *procmsg_spam_get_folder (void)
+FolderItem *procmsg_spam_get_folder (MsgInfo *msginfo)
{
- FolderItem *item = spam_folder_item ? folder_find_item_from_identifier(spam_folder_item) : NULL;
- return item ? item : folder_get_default_trash();
+ FolderItem *item = NULL;
+
+ if (procmsg_spam_get_folder_func)
+ item = procmsg_spam_get_folder_func(msginfo);
+ if (item == NULL && spam_folder_item)
+ item = folder_find_item_from_identifier(spam_folder_item);
+ if (item == NULL)
+ item = folder_get_default_trash();
+ return item;
}
static void item_has_queued_mails(FolderItem *item, gpointer data)
folder_func_to_all_folders(item_has_queued_mails, &result);
return result;
}
+
+static void item_has_trashed_mails(FolderItem *item, gpointer data)
+{
+ gboolean *result = (gboolean *)data;
+ if (*result == TRUE)
+ return;
+ if (folder_has_parent_of_type(item, F_TRASH) && item->total_msgs > 0)
+ *result = TRUE;
+}
+
+gboolean procmsg_have_trashed_mails_fast (void)
+{
+ gboolean result = FALSE;
+ folder_func_to_all_folders(item_has_trashed_mails, &result);
+ return result;
+}