item->no_sub = FALSE;
item->no_select = FALSE;
item->collapsed = FALSE;
+ item->threaded = TRUE;
+ item->ret_rcpt = FALSE;
item->parent = NULL;
item->folder = NULL;
item->data = NULL;
{
GNode *node;
XMLNode *xmlnode;
+ gchar *path;
- node = xml_parse_file(folder_get_list_path());
+ path = folder_get_list_path();
+ if (!is_file_exist(path)) return -1;
+ node = xml_parse_file(path);
if (!node) return -1;
xmlnode = node->data;
gint folder_item_remove_msg(FolderItem *item, gint num)
{
Folder *folder;
- gint result;
+ gint ret;
g_return_val_if_fail(item != NULL, -1);
folder = item->folder;
+ if (item->last_num < 0) folder->scan(folder, item);
- g_return_val_if_fail(folder->scan != NULL, -1);
- g_return_val_if_fail(folder->remove_msg != NULL, -1);
+ ret = folder->remove_msg(folder, item, num);
+ if (ret == 0 && num == item->last_num)
+ folder->scan(folder, item);
- if (folder->finished_remove)
- folder->finished_remove(folder, item);
+ return ret;
+}
- result = folder->remove_msg(folder, item, num);
+gint folder_item_remove_msgs(FolderItem *item, GSList *msglist)
+{
+ gint ret = 0;
- if (item->last_num < 0) folder->scan(folder, item);
+ g_return_val_if_fail(item != NULL, -1);
- if (result == 0){
- if (folder->finished_remove)
- folder->finished_remove(folder, item);
+ while (msglist != NULL) {
+ MsgInfo *msginfo = (MsgInfo *)msglist->data;
+
+ ret = folder_item_remove_msg(item, msginfo->msgnum);
+ if (ret != 0) break;
+ msglist = msglist->next;
}
- return result;
+ return ret;
}
gint folder_item_remove_all_msg(FolderItem *item)
const gchar *name = NULL;
const gchar *path = NULL;
PrefsAccount *account = NULL;
- gboolean no_sub = FALSE, no_select = FALSE, collapsed = FALSE;
+ gboolean no_sub = FALSE, no_select = FALSE, collapsed = FALSE,
+ threaded = TRUE, ret_rcpt = FALSE;
gint mtime = 0, new = 0, unread = 0, total = 0;
g_return_val_if_fail(node->data != NULL, FALSE);
no_select = *attr->value == '1' ? TRUE : FALSE;
else if (!strcmp(attr->name, "collapsed"))
collapsed = *attr->value == '1' ? TRUE : FALSE;
+ else if (!strcmp(attr->name, "threaded"))
+ threaded = *attr->value == '1' ? TRUE : FALSE;
+ else if (!strcmp(attr->name, "reqretrcpt"))
+ ret_rcpt = *attr->value == '1' ? TRUE : FALSE;
}
item = folder_item_new(name, path);
item->no_sub = no_sub;
item->no_select = no_select;
item->collapsed = collapsed;
+ item->threaded = threaded;
+ item->ret_rcpt = ret_rcpt;
item->parent = FOLDER_ITEM(node->parent->data);
item->folder = folder;
switch (stype) {
const gchar *name = NULL;
const gchar *path = NULL;
PrefsAccount *account = NULL;
- gboolean collapsed = FALSE;
+ gboolean collapsed = FALSE, threaded = TRUE, ret_rcpt = FALSE;
if (g_node_depth(node) != 2) return FALSE;
g_return_val_if_fail(node->data != NULL, FALSE);
attr->value);
} else if (!strcmp(attr->name, "collapsed"))
collapsed = *attr->value == '1' ? TRUE : FALSE;
+ else if (!strcmp(attr->name, "threaded"))
+ threaded = *attr->value == '1' ? TRUE : FALSE;
+ else if (!strcmp(attr->name, "reqretrcpt"))
+ ret_rcpt = *attr->value == '1' ? TRUE : FALSE;
}
folder = folder_new(type, name, path);
folder->node = node;
folder_add(folder);
FOLDER_ITEM(node->data)->collapsed = collapsed;
+ FOLDER_ITEM(node->data)->threaded = threaded;
+ FOLDER_ITEM(node->data)->ret_rcpt = ret_rcpt;
g_node_traverse(node, G_PRE_ORDER, G_TRAVERSE_ALL, -1,
folder_build_tree, folder);
folder->account->account_id);
if (item->collapsed && node->children)
fputs(" collapsed=\"1\"", fp);
+ if (item->ret_rcpt)
+ fputs(" reqretrcpt=\"1\"", fp);
} else {
fprintf(fp, "<folderitem type=\"%s\"",
folder_item_stype_str[item->stype]);
fputs(" no_select=\"1\"", fp);
if (item->collapsed && node->children)
fputs(" collapsed=\"1\"", fp);
+ if (item->threaded)
+ fputs(" threaded=\"1\"", fp);
+ else
+ fputs(" threaded=\"0\"", fp);
+ if (item->ret_rcpt)
+ fputs(" reqretrcpt=\"1\"", fp);
fprintf(fp,
- " mtime=\"%ld\" new=\"%d\" unread=\"%d\" total=\"%d\"",
+ " mtime=\"%lu\" new=\"%d\" unread=\"%d\" total=\"%d\"",
item->mtime, item->new, item->unread, item->total);
}
gchar * folder_item_get_identifier(FolderItem * item)
{
- gchar * path;
gchar * id;
gchar * folder_str;
- folder_str = folder_get_identifier(item->folder);
-
- if (item->path == NULL) {
- g_free(folder_str);
- return NULL;
- }
+ g_return_if_fail(item->path != NULL);
+ folder_str = folder_get_identifier(item->folder);
id = g_strconcat(folder_str, "/", item->path, NULL);
+ g_free(folder_str);
return id;
}