/* * Copyright (C) 2003 Marco Pesenti Gritti * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include "ephy-bookmarks-export.h" #include "ephy-node-common.h" #include "ephy-file-helpers.h" #include "ephy-debug.h" static void add_topics_list (EphyNode *topics, EphyNode *bmk, xmlNodePtr parent) { GPtrArray *children; int i; GList *bmks = NULL, *l; xmlNodePtr xml_node; children = ephy_node_get_children (topics); for (i = 0; i < children->len; i++) { EphyNode *kid; EphyNodePriority priority; kid = g_ptr_array_index (children, i); priority = ephy_node_get_property_int (kid, EPHY_NODE_KEYWORD_PROP_PRIORITY); if (priority == -1) priority = EPHY_NODE_NORMAL_PRIORITY; if (priority == EPHY_NODE_NORMAL_PRIORITY && ephy_node_has_child (kid, bmk)) { bmks = g_list_append (bmks, kid); } } ephy_node_thaw (topics); if (bmks == NULL) return; for (l = bmks; l != NULL; l = l->next) { const char *name; EphyNode *node = l->data; xml_node = xmlNewChild (parent, NULL, "dc:subject", NULL); name = ephy_node_get_property_string (node, EPHY_NODE_KEYWORD_PROP_NAME); xmlNodeSetContent (xml_node, name); } g_list_free (bmks); } void ephy_bookmarks_export_rdf (EphyBookmarks *bookmarks, const char *filename) { EphyNode *bmks; EphyNode *topics; xmlDocPtr doc; xmlNodePtr root, xml_node, channel_node, channel_seq_node; char *uri; GPtrArray *children; int i; LOG ("Exporting to rdf") xmlIndentTreeOutput = TRUE; doc = xmlNewDoc ("1.0"); root = xmlNewDocNode (doc, NULL, "rdf:RDF", NULL); xmlDocSetRootElement (doc, root); xmlSetProp (root, "xmlns:rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#"); xmlSetProp (root, "xmlns", "http://purl.org/rss/1.0/"); xmlSetProp (root, "xmlns:dc", "http://purl.org/dc/elements/1.1/"); channel_node = xmlNewChild (root, NULL, "channel", NULL); uri = gnome_vfs_get_uri_from_local_path (filename); xmlSetProp (channel_node, "rdf:about", uri); g_free (uri); xml_node = xmlNewChild (channel_node, NULL, "title", NULL); xmlNodeSetContent (xml_node, "Epiphany bookmarks"); xml_node = xmlNewChild (channel_node, NULL, "link", NULL); xmlNodeSetContent (xml_node, "http://epiphany.mozdev.org"); xml_node = xmlNewChild (channel_node, NULL, "items", NULL); channel_seq_node = xmlNewChild (xml_node, NULL, "rdf:Seq", NULL); bmks = ephy_bookmarks_get_bookmarks (bookmarks); topics = ephy_bookmarks_get_keywords (bookmarks); children = ephy_node_get_children (bmks); for (i = 0; i < children->len; i++) { EphyNode *kid; const char *url, *title; xmlNodePtr item_node; kid = g_ptr_array_index (children, i); url = ephy_node_get_property_string (kid, EPHY_NODE_BMK_PROP_LOCATION); title = ephy_node_get_property_string (kid, EPHY_NODE_BMK_PROP_TITLE); item_node = xmlNewChild (channel_seq_node, NULL, "rdf:li", NULL); xmlSetProp (item_node, "rdf:about", url); item_node = xmlNewChild (root, NULL, "item", NULL); xmlSetProp (item_node, "rdf:about", url); xml_node = xmlNewChild (item_node, NULL, "title", NULL); xmlNodeSetContent (xml_node, title); xml_node = xmlNewChild (item_node, NULL, "link", NULL); xmlNodeSetContent (xml_node, url); add_topics_list (topics, kid, item_node); } ephy_node_thaw (bmks); ephy_file_save_xml (filename, doc); xmlFreeDoc(doc); }