static gint procmsg_send_message_queue_full(const gchar *file, gboolean keep_session, gchar **errstr,
FolderItem *queue, gint msgnum, gboolean *queued_removed);
-
+static void procmsg_update_unread_children (MsgInfo *info,
+ gboolean newly_marked);
enum
{
Q_SENDER = 0,
Q_CLAWS_HDRS_OLD = 16,
};
-GHashTable *procmsg_msg_hash_table_create(GSList *mlist)
-{
- GHashTable *msg_table;
-
- if (mlist == NULL) return NULL;
-
- msg_table = g_hash_table_new(NULL, g_direct_equal);
- procmsg_msg_hash_table_append(msg_table, mlist);
-
- return msg_table;
-}
-
-void procmsg_msg_hash_table_append(GHashTable *msg_table, GSList *mlist)
-{
- GSList *cur;
- MsgInfo *msginfo;
-
- if (msg_table == NULL || mlist == NULL) return;
-
- for (cur = mlist; cur != NULL; cur = cur->next) {
- msginfo = (MsgInfo *)cur->data;
-
- g_hash_table_insert(msg_table,
- GUINT_TO_POINTER(msginfo->msgnum),
- msginfo);
- }
-}
-
-GHashTable *procmsg_to_folder_hash_table_create(GSList *mlist)
-{
- GHashTable *msg_table;
- GSList *cur;
- MsgInfo *msginfo;
-
- if (mlist == NULL) return NULL;
-
- msg_table = g_hash_table_new(NULL, g_direct_equal);
-
- for (cur = mlist; cur != NULL; cur = cur->next) {
- msginfo = (MsgInfo *)cur->data;
- g_hash_table_insert(msg_table, msginfo->to_folder, msginfo);
- }
-
- return msg_table;
-}
-
-gint procmsg_get_last_num_in_msg_list(GSList *mlist)
-{
- GSList *cur;
- MsgInfo *msginfo;
- gint last = 0;
-
- for (cur = mlist; cur != NULL; cur = cur->next) {
- msginfo = (MsgInfo *)cur->data;
- if (msginfo && msginfo->msgnum > last)
- last = msginfo->msgnum;
- }
-
- return last;
-}
-
void procmsg_msg_list_free(GSList *mlist)
{
GSList *cur;
}
}
-void procmsg_empty_trash(FolderItem *trash)
+static void procmsg_empty_trash(FolderItem *trash)
{
GNode *node, *next;
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);
return 0;
}
-gint procmsg_save_to_outbox(FolderItem *outbox, const gchar *file,
+static gint procmsg_save_to_outbox(FolderItem *outbox, const gchar *file,
gboolean is_queued)
{
gint num;
return memusage;
}
-gint procmsg_cmp_msgnum_for_sort(gconstpointer a, gconstpointer b)
-{
- const MsgInfo *msginfo1 = a;
- const MsgInfo *msginfo2 = b;
-
- if (!msginfo1)
- return -1;
- if (!msginfo2)
- return -1;
-
- return msginfo1->msgnum - msginfo2->msgnum;
-}
-
static gint procmsg_send_message_queue_full(const gchar *file, gboolean keep_session, gchar **errstr,
FolderItem *queue, gint msgnum, gboolean *queued_removed)
{
return children;
}
-GSList *procmsg_find_children (MsgInfo *info)
+static GSList *procmsg_find_children (MsgInfo *info)
{
GSList *children;
GSList *all, *cur;
return children;
}
-void procmsg_update_unread_children(MsgInfo *info, gboolean newly_marked)
+static void procmsg_update_unread_children(MsgInfo *info, gboolean newly_marked)
{
GSList *children = procmsg_find_children(info);
GSList *cur;
* \return TRUE if the message was moved and MsgInfo is now invalid,
* FALSE otherwise
*/
-gboolean procmsg_msginfo_filter(MsgInfo *msginfo, PrefsAccount* ac_prefs)
+static gboolean procmsg_msginfo_filter(MsgInfo *msginfo, PrefsAccount* ac_prefs)
{
MailFilteringData mail_filtering_data;
mail_filtering_data.msginfo = msginfo;
mail_filtering_data.msglist = NULL;
mail_filtering_data.filtered = NULL;
- mail_filtering_data.unfiltered = NULL;
+ mail_filtering_data.unfiltered = NULL;
+ mail_filtering_data.account = ac_prefs;
if (hooks_invoke(MAIL_FILTERING_HOOKLIST, &mail_filtering_data)) {
return TRUE;
}
mail_filtering_data.msglist = list;
mail_filtering_data.filtered = NULL;
mail_filtering_data.unfiltered = NULL;
+ mail_filtering_data.account = ac;
hooks_invoke(MAIL_LISTFILTERING_HOOKLIST, &mail_filtering_data);
}
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;
+}