Add a function to save a cache file (it makes the directory as needed etc).
authorDana Jansens <danakj@orodu.net>
Mon, 8 Aug 2011 21:38:47 +0000 (17:38 -0400)
committerDana Jansens <danakj@orodu.net>
Sun, 16 Oct 2011 22:56:02 +0000 (18:56 -0400)
obt/xml.c
obt/xml.h

index 1b86a8884a510cb32edbbba2442c429c96534c8b..0d5420ed4a0f30db25749416cb5c2502f5f8e29e 100644 (file)
--- a/obt/xml.c
+++ b/obt/xml.c
@@ -325,6 +325,26 @@ gboolean obt_xml_save_file(ObtXmlInst *inst,
     return xmlSaveFormatFile(path, inst->doc, pretty) != -1;
 }
 
+gboolean obt_xml_save_cache_file(ObtXmlInst *inst,
+                                 const gchar *domain,
+                                 const gchar *filename,
+                                 gboolean pretty)
+{
+    gchar *dpath, *fpath;
+    gboolean ok;
+
+    dpath = g_build_filename(obt_paths_cache_home(inst->xdg_paths),
+                             domain, NULL);
+    fpath = g_build_filename(dpath, filename, NULL);
+
+    ok = obt_paths_mkdir_path(dpath, 0700);
+    ok = ok && obt_xml_save_file(inst, fpath, pretty);
+
+    g_free(fpath);
+    g_free(dpath);
+    return ok;
+}
+
 void obt_xml_close(ObtXmlInst *i)
 {
     if (i && i->doc) {
@@ -607,3 +627,31 @@ void obt_xml_path_delete_node(xmlNodePtr subtree, const gchar *path)
     xmlUnlinkNode(n);
     xmlFreeNode(n);
 }
+
+gchar* obt_xml_path_string(xmlNodePtr subtree, const gchar *path,
+                          const gchar *default_value)
+{
+    xmlNodePtr n;
+
+    n = obt_xml_path_get_node(subtree, path, default_value);
+    return n ? obt_xml_node_string(n) : NULL;
+}
+
+int obt_xml_path_int(xmlNodePtr subtree, const gchar *path,
+                     const gchar *default_value)
+{
+    xmlNodePtr n;
+
+    n = obt_xml_path_get_node(subtree, path, default_value);
+    return n ? obt_xml_node_int(n) : 0;
+}
+
+gboolean obt_xml_path_bool(xmlNodePtr subtree, const gchar *path,
+                           const gchar *default_value)
+{
+    xmlNodePtr n;
+
+    n = obt_xml_path_get_node(subtree, path, default_value);
+    return n ? obt_xml_node_bool(n) : FALSE;
+}
+
index 25bce69d1a68fee2204c7de365db4e7246e50dbc..cee36fc000da0d9a6156bd5a51bcc1e918100773 100644 (file)
--- a/obt/xml.h
+++ b/obt/xml.h
@@ -61,6 +61,10 @@ gboolean obt_xml_load_mem(ObtXmlInst *inst,
 gboolean obt_xml_save_file(ObtXmlInst *inst,
                            const gchar *path,
                            gboolean pretty);
+gboolean obt_xml_save_cache_file(ObtXmlInst *inst,
+                                 const gchar *domain,
+                                 const gchar *filename,
+                                 gboolean pretty);
 
 xmlDocPtr obt_xml_doc(ObtXmlInst *inst);
 xmlNodePtr obt_xml_root(ObtXmlInst *inst);
@@ -124,6 +128,13 @@ GList* obt_xml_path_get_list(xmlNodePtr subtree, const gchar *path);
 /*! Removes a specified node from the tree. */
 void obt_xml_path_delete_node(xmlNodePtr subtree, const gchar *path);
 
+gchar* obt_xml_path_string(xmlNodePtr subtree, const gchar *path,
+                          const gchar *default_value);
+int obt_xml_path_int(xmlNodePtr subtree, const gchar *path,
+                     const gchar *default_value);
+gboolean obt_xml_path_bool(xmlNodePtr subtree, const gchar *path,
+                           const gchar *default_value);
+
 
 G_END_DECLS