void folder_register_class(FolderClass *klass)
{
+ GSList *xmllist, *cur;
+
debug_print("registering folder class %s\n", klass->idstr);
+
class_list = g_slist_append(class_list, klass);
+
+ xmllist = g_slist_copy(folder_unloaded_list);
+ for (cur = xmllist; cur != NULL; cur = g_slist_next(cur)) {
+ GNode *node = (GNode *) cur->data;
+ XMLNode *xmlnode = (XMLNode *) node->data;
+ GList *cur = xmlnode->tag->attr;
+
+ for (; cur != NULL; cur = g_list_next(cur)) {
+ XMLAttr *attr = (XMLAttr *) cur->data;
+
+ if (!attr || !attr->name || !attr->value) continue;
+ if (!strcmp(attr->name, "type") && !strcmp(attr->value, klass->idstr)) {
+ Folder *folder;
+
+ folder = folder_get_from_xml(node);
+ folder_add(folder);
+ folder_unloaded_list = g_slist_remove(folder_unloaded_list, node);
+
+ cur = NULL;
+ continue;
+ }
+ }
+ }
+ g_slist_free(xmllist);
}
void folder_unregister_class(FolderClass *klass)
{
-/*
GList *folderlist, *cur;
-*/
+
debug_print("unregistering folder class %s\n", klass->idstr);
-/*
+
+ class_list = g_slist_remove(class_list, klass);
+
folderlist = g_list_copy(folder_get_list());
for (cur = folderlist; cur != NULL; cur = g_list_next(cur)) {
Folder *folder = (Folder *) cur->data;
if (folder->klass == klass) {
- GNode *xmlnode = folder_
+ GNode *xmlnode = folder_get_xml_node(folder);
+ folder_unloaded_list = g_slist_append(folder_unloaded_list, xmlnode);
+ folder_destroy(folder);
}
}
-*/
+ g_list_free(folderlist);
}
Folder *folder_new(FolderClass *klass, const gchar *name, const gchar *path)
g_free(folder->name);
g_free(folder);
-
- folder_write_list();
}
void folder_set_xml(Folder *folder, XMLTag *tag)
{
XMLTag *tag;
- tag = g_new0(XMLTag, 1);
- tag->tag = g_strdup("folder");
+ tag = xml_new_tag("folder");
if (folder->name)
xml_tag_add_attr(tag, "name", g_strdup(folder->name));
"locked"};
XMLTag *tag;
- tag = g_new0(XMLTag, 1);
- tag->tag = g_strdup("folderitem");
+ tag = xml_new_tag("folderitem");
xml_tag_add_attr(tag, "type", g_strdup(folder_item_stype_str[item->stype]));
if (item->name)
}
}
+ folder_list = g_list_insert(folder_list, folder, i);
+
hookdata.folder = folder;
hookdata.update_flags = FOLDER_NEW_FOLDER;
hookdata.item = NULL;
hooks_invoke(FOLDER_UPDATE_HOOKLIST, &hookdata);
-
- folder_list = g_list_insert(folder_list, folder, i);
}
GList *folder_get_list(void)
folder_add(folder);
else
folder_unloaded_list = g_slist_append(folder_unloaded_list,
- (gpointer) xml_tree_copy(cur));
+ (gpointer) xml_copy_tree(cur));
cur = cur->next;
}
fprintf(pfile->fp, "<?xml version=\"1.0\" encoding=\"%s\"?>\n",
conv_get_current_charset_str());
- tag = g_new0(XMLTag, 1);
- tag->tag = g_strdup("folderlist");
- tag->attr = NULL;
+ tag = xml_new_tag("folderlist");
xmlnode = g_new0(XMLNode, 1);
xmlnode->tag = tag;
for (slist = folder_unloaded_list; slist != NULL; slist = g_slist_next(slist)) {
GNode *node = (GNode *) slist->data;
- g_node_append(rootnode, xml_tree_copy(node));
+ g_node_append(rootnode, (gpointer) xml_copy_tree(node));
}
xml_write_tree(rootnode, pfile->fp);