item->threaded = *attr->value == '1' ? TRUE : FALSE;
else if (!strcmp(attr->name, "hidereadmsgs"))
item->hide_read_msgs = *attr->value == '1' ? TRUE : FALSE;
+ else if (!strcmp(attr->name, "hidedelmsgs"))
+ item->hide_del_msgs = *attr->value == '1' ? TRUE : FALSE;
else if (!strcmp(attr->name, "reqretrcpt"))
item->ret_rcpt = *attr->value == '1' ? TRUE : FALSE;
else if (!strcmp(attr->name, "sort_key")) {
xml_tag_add_attr(tag, xml_attr_new("thread_collapsed", item->thread_collapsed ? "1" : "0"));
xml_tag_add_attr(tag, xml_attr_new("threaded", item->threaded ? "1" : "0"));
xml_tag_add_attr(tag, xml_attr_new("hidereadmsgs", item->hide_read_msgs ? "1" : "0"));
+ xml_tag_add_attr(tag, xml_attr_new("hidedelmsgs", item->hide_del_msgs ? "1" : "0"));
if (item->ret_rcpt)
xml_tag_add_attr(tag, xml_attr_new("reqretrcpt", "1"));
FolderUpdateData hookdata;
new_item->cache = msgcache_new();
+ new_item->cache_dirty = TRUE;
+ new_item->mark_dirty = TRUE;
+ new_item->tags_dirty = TRUE;
hookdata.folder = new_item->folder;
hookdata.update_flags = FOLDER_TREE_CHANGED | FOLDER_ADD_FOLDERITEM;
if (item->cache)
msgcache_destroy(item->cache);
item->cache = msgcache_new();
+ item->cache_dirty = TRUE;
+ item->mark_dirty = TRUE;
+ item->tags_dirty = TRUE;
cache_list = NULL;
}
mark_file = folder_item_get_mark_file(item);
tags_file = folder_item_get_tags_file(item);
item->cache = msgcache_read_cache(item, cache_file);
+ item->cache_dirty = FALSE;
+ item->mark_dirty = FALSE;
+ item->tags_dirty = FALSE;
if (!item->cache) {
MsgInfoList *list, *cur;
guint newcnt = 0, unreadcnt = 0;
MsgInfo *msginfo;
item->cache = msgcache_new();
+ item->cache_dirty = TRUE;
+ item->mark_dirty = TRUE;
+ item->tags_dirty = TRUE;
folder_item_scan_full(item, TRUE);
msgcache_read_mark(item->cache, mark_file);
g_free(tags_file);
} else {
item->cache = msgcache_new();
+ item->cache_dirty = TRUE;
+ item->mark_dirty = TRUE;
+ item->tags_dirty = TRUE;
}
- item->cache_dirty = FALSE;
- item->mark_dirty = FALSE;
- item->tags_dirty = FALSE;
END_TIMING();
folder_clean_cache_memory(item);
new_item->threaded = src->threaded;
new_item->ret_rcpt = src->ret_rcpt;
new_item->hide_read_msgs = src->hide_read_msgs;
+ new_item->hide_del_msgs = src->hide_del_msgs;
new_item->sort_key = src->sort_key;
new_item->sort_type = src->sort_type;
item->folder->klass->remove_msg(item->folder,
msginfo->folder,
msginfo->msgnum);
- remove_msginfo_from_cache(item, msginfo);
+ if (!item->folder->account || item->folder->account->imap_use_trash) {
+ remove_msginfo_from_cache(item, msginfo);
+ }
}
}
}
}
ret = folder->klass->remove_msg(folder, item, num);
- if (msginfo != NULL) {
- remove_msginfo_from_cache(item, msginfo);
- procmsg_msginfo_free(msginfo);
+ if (!item->folder->account || item->folder->account->imap_use_trash) {
+ if (msginfo != NULL) {
+ remove_msginfo_from_cache(item, msginfo);
+ procmsg_msginfo_free(msginfo);
+ }
}
return ret;
return ret;
}
+gint folder_item_expunge(FolderItem *item)
+{
+ Folder *folder = item->folder;
+ gint result = 0;
+ if (folder == NULL)
+ return -1;
+ if (folder->klass->expunge) {
+ GSList *msglist = folder_item_get_msg_list(item);
+ GSList *cur;
+ result = folder->klass->expunge(folder, item);
+ if (result == 0) {
+ for (cur = msglist; cur; cur = cur->next) {
+ MsgInfo *msginfo = (MsgInfo *)cur->data;
+ if (MSG_IS_DELETED(msginfo->flags)) {
+ remove_msginfo_from_cache(item, msginfo);
+ }
+ }
+ }
+ procmsg_msg_list_free(msglist);
+ }
+ return result;
+}
+
gint folder_item_remove_all_msg(FolderItem *item)
{
Folder *folder;
if (result == 0) {
folder_item_free_cache(item, TRUE);
item->cache = msgcache_new();
+ item->cache_dirty = TRUE;
+ item->mark_dirty = TRUE;
+ item->tags_dirty = TRUE;
}
} else {
MsgInfoList *msglist;
item->threaded = pp->threaded;
item->ret_rcpt = pp->ret_rcpt;
item->hide_read_msgs = pp->hide_read_msgs;
+ item->hide_del_msgs = pp->hide_del_msgs;
item->sort_key = pp->sort_key;
item->sort_type = pp->sort_type;
}
pp->threaded = item->threaded;
pp->ret_rcpt = item->ret_rcpt;
pp->hide_read_msgs = item->hide_read_msgs;
+ pp->hide_del_msgs = item->hide_del_msgs;
pp->sort_key = item->sort_key;
pp->sort_type = item->sort_type;
g_hash_table_insert(pptable, id, pp);