summaryrefslogtreecommitdiff
path: root/libappstream-glib/as-release.c
diff options
context:
space:
mode:
authorRichard Hughes <richard@hughsie.com>2014-03-13 13:03:58 +0000
committerRichard Hughes <richard@hughsie.com>2014-03-13 14:02:32 +0000
commita4f0fa55a790b07f62e2dac0c98fe9755f95e239 (patch)
tree9a5fc56f3bbebb735d0097df29dae39491ff4f6d /libappstream-glib/as-release.c
parent5701b1d5be00cda2e98d6c9df858e86db86b93a8 (diff)
downloadappstream-glib-a4f0fa55a790b07f62e2dac0c98fe9755f95e239.tar.gz
Add functions to parse from and to insert a GNode
This allows us to trivially serialize objects to XML and back. NOTE: as this uses a DOM parser, it's certainly not quick. Use something manual like expat or GMarkupParser to do this more efficiently and with less memory.
Diffstat (limited to 'libappstream-glib/as-release.c')
-rw-r--r--libappstream-glib/as-release.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/libappstream-glib/as-release.c b/libappstream-glib/as-release.c
index 9d1fe17..b4ab2a2 100644
--- a/libappstream-glib/as-release.c
+++ b/libappstream-glib/as-release.c
@@ -21,6 +21,9 @@
#include "config.h"
+#include <stdlib.h>
+
+#include "as-node.h"
#include "as-release.h"
typedef struct _AsReleasePrivate AsReleasePrivate;
@@ -129,6 +132,46 @@ as_release_set_description (AsRelease *release, const gchar *description)
}
/**
+ * as_release_node_insert:
+ **/
+GNode *
+as_release_node_insert (AsRelease *release, GNode *parent)
+{
+ AsReleasePrivate *priv = GET_PRIVATE (release);
+ GNode *n;
+ gchar *timestamp_str;
+
+ timestamp_str = g_strdup_printf ("%" G_GUINT64_FORMAT,
+ priv->timestamp);
+ n = as_node_insert (parent, "release", priv->description,
+ AS_NODE_INSERT_FLAG_NONE,
+ "timestamp", timestamp_str,
+ "version", priv->version,
+ NULL);
+ g_free (timestamp_str);
+ return n;
+}
+
+/**
+ * as_release_node_parse:
+ **/
+gboolean
+as_release_node_parse (AsRelease *release, GNode *node, GError **error)
+{
+ const gchar *tmp;
+ tmp = as_node_get_attribute (node, "timestamp");
+ if (tmp != NULL)
+ as_release_set_timestamp (release, atol (tmp));
+ tmp = as_node_get_attribute (node, "version");
+ if (tmp != NULL)
+ as_release_set_version (release, tmp);
+ tmp = as_node_get_data (node);
+ if (tmp != NULL)
+ as_release_set_description (release, tmp);
+ return TRUE;
+}
+
+/**
* as_release_new:
**/
AsRelease *