diff options
author | Ivaylo Dimitrov <ivo.g.dimitrov.75@gmail.com> | 2017-02-05 17:05:01 +0200 |
---|---|---|
committer | Ivaylo Dimitrov <ivo.g.dimitrov.75@gmail.com> | 2017-02-05 17:05:01 +0200 |
commit | b9492bd5b5b212c2a1df05579240961c3ad63154 (patch) | |
tree | 830cb9f04ce24931eda5976b92fe0d1ad6ab3a40 | |
parent | 66ee8ffd3179b6cbf306c87b46ac2f3c7b569398 (diff) |
add more functions
Signed-off-by: Ivaylo Dimitrov <ivo.g.dimitrov.75@gmail.com>
-rw-r--r-- | src/bookmark_parser.c | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/src/bookmark_parser.c b/src/bookmark_parser.c index 6dcd031..e7b8204 100644 --- a/src/bookmark_parser.c +++ b/src/bookmark_parser.c @@ -1896,6 +1896,141 @@ bookmark_add_child(BookmarkItem *parent, BookmarkItem *bm_item, gint position, return BM_OK; } +gboolean +bm_engine_add_folder(BookmarkItem *parent, BookmarkItem *bm_item, + const gchar *file_name) +{ + gchar *bm_file; + xmlDoc *doc; + gboolean rv = FALSE; + + (void)parent; + (void)file_name; + + bm_file = file_path_with_home_dir(MYBOOKMARKS); + doc = xmlParseFile(bm_file); + + if (doc) + { + xmlAddChild(xmlDocGetRootElement(doc), add_bookmark_item(bm_item)); + set_lock("/.bookmarks/.lock"); + rv = dump_xml_doc_and_fsync(doc, bm_file); + del_lock("/.bookmarks/.lock"); + xmlFreeDoc(doc); + } + + g_free(bm_file); + + return rv; +} + +gboolean +bookmark_remove(BookmarkItem *bm_item, gchar *file_name) +{ + gboolean rv = FALSE; + gchar *bm_file; + xmlDoc *doc; + + (void)file_name; + + if (!bm_item) + return FALSE; + + bm_file = file_path_with_home_dir("/.bookmarks/MyBookmarks.xml"); + doc = xmlReadFile(bm_file, 0, XML_PARSE_SAX1 | XML_PARSE_RECOVER); + + if (doc) + { + xmlNode *node = xmlDocGetRootElement(doc); + GSList *list = g_slist_reverse(get_complete_path(bm_item)); + + nodeptriter = 1; + + if (node) + { + node = get_parent_nodeptr(list, node, g_slist_length(list)); + + if (node) + { + xmlUnlinkNode(node); + xmlFreeNodeList(node); + + set_lock("/.bookmarks/.lock"); + rv = dump_xml_doc_and_fsync(doc, bm_file); + del_lock("/.bookmarks/.lock"); + } + } + + g_slist_free(list); + xmlFreeDoc(doc); + } + + g_free(bm_file); + + return rv; +} + +gboolean +bookmark_remove_list(GSList *item_list) +{ + gchar *bm_file; + xmlDoc *doc; + xmlNode *node; + gboolean rv; + + g_return_val_if_fail("item_list", FALSE); + + bm_file = file_path_with_home_dir("/.bookmarks/MyBookmarks.xml"); + doc = xmlReadFile(bm_file, 0, 513); + + if (!doc) + { + g_free(bm_file); + return FALSE; + } + + node = xmlDocGetRootElement(doc); + if (!node) + goto out; + + while (item_list) + { + xmlNode *n; + + if (((BookmarkItem *)item_list->data)->isOperatorBookmark) + { + bookmark_set_operator_bookmark_as_deleted(item_list->data, MYBOOKMARKS, + doc, node); + } + else + { + GSList *list = g_slist_reverse(get_complete_path(item_list->data)); + + nodeptriter = 1; + n = get_parent_nodeptr(list, node, g_slist_length(list)); + g_slist_free(list); + + if (n) + { + xmlUnlinkNode(n); + xmlFreeNodeList(n); + } + } + + item_list = item_list->next; + } + + set_lock("/.bookmarks/.lock"); + rv = dump_xml_doc_and_fsync(doc, bm_file); + del_lock("/.bookmarks/.lock"); + +out: + xmlFreeDoc(doc); + g_free(bm_file); + + return rv; +} + #ifdef BOOKMARK_PARSER_TEST #include <assert.h> |