diff options
author | Richard Hughes <richard@hughsie.com> | 2014-03-13 13:03:58 +0000 |
---|---|---|
committer | Richard Hughes <richard@hughsie.com> | 2014-03-13 14:02:32 +0000 |
commit | a4f0fa55a790b07f62e2dac0c98fe9755f95e239 (patch) | |
tree | 9a5fc56f3bbebb735d0097df29dae39491ff4f6d /libappstream-glib/as-release.c | |
parent | 5701b1d5be00cda2e98d6c9df858e86db86b93a8 (diff) | |
download | appstream-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.c | 43 |
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 * |