[libgdata/gxml] * ported gdata-gcontact-{calendar, event, external-id, website}, gdata-georss-where.c



commit c91935c3ed94c1139916737c9d8977e8d9eeb2d7
Author: Richard Schwarting <aquarichy gmail com>
Date:   Sat Jul 23 12:52:00 2011 -0400

    * ported gdata-gcontact-{calendar,event,external-id,website}, gdata-georss-where.c

 gdata/gcontact/gdata-gcontact-calendar.c    |   35 +++++++++++----------
 gdata/gcontact/gdata-gcontact-event.c       |   43 ++++++++++++++-------------
 gdata/gcontact/gdata-gcontact-external-id.c |   35 +++++++++++----------
 gdata/gcontact/gdata-gcontact-jot.c         |   10 +++---
 gdata/gcontact/gdata-gcontact-website.c     |   23 ++++++++++----
 gdata/georss/gdata-georss-where.c           |   27 +++++++---------
 6 files changed, 92 insertions(+), 81 deletions(-)
---
diff --git a/gdata/gcontact/gdata-gcontact-calendar.c b/gdata/gcontact/gdata-gcontact-calendar.c
index d17b4a9..5bed20b 100644
--- a/gdata/gcontact/gdata-gcontact-calendar.c
+++ b/gdata/gcontact/gdata-gcontact-calendar.c
@@ -30,7 +30,7 @@
  **/
 
 #include <glib.h>
-#include <libxml/parser.h>
+#include <gxml.h>
 
 #include "gdata-gcontact-calendar.h"
 #include "gdata-parsable.h"
@@ -41,7 +41,7 @@ static void gdata_gcontact_calendar_comparable_init (GDataComparableIface *iface
 static void gdata_gcontact_calendar_finalize (GObject *object);
 static void gdata_gcontact_calendar_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec);
 static void gdata_gcontact_calendar_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec);
-static gboolean pre_parse_xml (GDataParsable *parsable, xmlDoc *doc, xmlNode *root_node, gpointer user_data, GError **error);
+static gboolean pre_parse_xml (GDataParsable *parsable, GXmlDomDocument *doc, GXmlDomXNode *root_node, gpointer user_data, GError **error);
 static void pre_get_xml (GDataParsable *parsable, GString *xml_string);
 static void get_namespaces (GDataParsable *parsable, GHashTable *namespaces);
 
@@ -232,40 +232,41 @@ gdata_gcontact_calendar_set_property (GObject *object, guint property_id, const
 }
 
 static gboolean
-pre_parse_xml (GDataParsable *parsable, xmlDoc *doc, xmlNode *root_node, gpointer user_data, GError **error)
+pre_parse_xml (GDataParsable *parsable, GXmlDomDocument *doc, GXmlDomXNode *root_node, gpointer user_data, GError **error)
 {
-	xmlChar *uri, *rel, *label;
+	gchar *uri, *rel, *label;
 	gboolean primary_bool;
 	GDataGContactCalendarPrivate *priv = GDATA_GCONTACT_CALENDAR (parsable)->priv;
+	GXmlDomElement *root_elem = GXML_DOM_ELEMENT (root_node);
 
 	/* Is it the primary calendar? */
 	if (gdata_parser_boolean_from_property (root_node, "primary", &primary_bool, 0, error) == FALSE)
 		return FALSE;
 
-	uri = xmlGetProp (root_node, (xmlChar*) "href");
+	uri = gxml_dom_element_get_attribute (root_elem, "href");
 	if (uri == NULL || *uri == '\0') {
-		xmlFree (uri);
+		g_free (uri);
 		return gdata_parser_error_required_property_missing (root_node, "href", error);
 	}
 
-	rel = xmlGetProp (root_node, (xmlChar*) "rel");
-	label = xmlGetProp (root_node, (xmlChar*) "label");
+	rel = gxml_dom_element_get_attribute (root_elem, "rel");
+	label = gxml_dom_element_get_attribute (root_elem, "label");
 	if ((rel == NULL || *rel == '\0') && (label == NULL || *label == '\0')) {
-		xmlFree (uri);
-		xmlFree (rel);
-		xmlFree (label);
+		g_free (uri);
+		g_free (rel);
+		g_free (label);
 		return gdata_parser_error_required_property_missing (root_node, "rel", error);
 	} else if (rel != NULL && label != NULL) {
 		/* Can't have both set at once */
-		xmlFree (uri);
-		xmlFree (rel);
-		xmlFree (label);
+		g_free (uri);
+		g_free (rel);
+		g_free (label);
 		return gdata_parser_error_mutexed_properties (root_node, "rel", "label", error);
 	}
 
-	priv->uri = (gchar*) uri;
-	priv->relation_type = (gchar*) rel;
-	priv->label = (gchar*) label;
+	priv->uri = uri;
+	priv->relation_type = rel;
+	priv->label = label;
 	priv->is_primary = primary_bool;
 
 	return TRUE;
diff --git a/gdata/gcontact/gdata-gcontact-event.c b/gdata/gcontact/gdata-gcontact-event.c
index 007fee6..5db0e11 100644
--- a/gdata/gcontact/gdata-gcontact-event.c
+++ b/gdata/gcontact/gdata-gcontact-event.c
@@ -31,7 +31,7 @@
 
 #include <glib.h>
 #include <string.h>
-#include <libxml/parser.h>
+#include <gxml.h>
 
 #include "gdata-gcontact-event.h"
 #include "gdata-parsable.h"
@@ -40,8 +40,8 @@
 static void gdata_gcontact_event_finalize (GObject *object);
 static void gdata_gcontact_event_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec);
 static void gdata_gcontact_event_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec);
-static gboolean pre_parse_xml (GDataParsable *parsable, xmlDoc *doc, xmlNode *root_node, gpointer user_data, GError **error);
-static gboolean parse_xml (GDataParsable *parsable, xmlDoc *doc, xmlNode *root_node, gpointer user_data, GError **error);
+static gboolean pre_parse_xml (GDataParsable *parsable, GXmlDomDocument *doc, GXmlDomXNode *root_node, gpointer user_data, GError **error);
+static gboolean parse_xml (GDataParsable *parsable, GXmlDomDocument *doc, GXmlDomXNode *root_node, gpointer user_data, GError **error);
 static gboolean post_parse_xml (GDataParsable *parsable, gpointer user_data, GError **error);
 static void pre_get_xml (GDataParsable *parsable, GString *xml_string);
 static void get_xml (GDataParsable *parsable, GString *xml_string);
@@ -199,37 +199,38 @@ gdata_gcontact_event_set_property (GObject *object, guint property_id, const GVa
 }
 
 static gboolean
-pre_parse_xml (GDataParsable *parsable, xmlDoc *doc, xmlNode *root_node, gpointer user_data, GError **error)
+pre_parse_xml (GDataParsable *parsable, GXmlDomDocument *doc, GXmlDomXNode *root_node, gpointer user_data, GError **error)
 {
-	xmlChar *rel, *label;
+	gchar *rel, *label;
 	GDataGContactEventPrivate *priv = GDATA_GCONTACT_EVENT (parsable)->priv;
+	GXmlDomElement *root_elem = GXML_DOM_ELEMENT (root_node);
 
-	rel = xmlGetProp (root_node, (xmlChar*) "rel");
-	label = xmlGetProp (root_node, (xmlChar*) "label");
+	rel = gxml_dom_element_get_attribute (root_elem, "rel");
+	label = gxml_dom_element_get_attribute (root_elem, "label");
 	if ((rel == NULL || *rel == '\0') && (label == NULL || *label == '\0')) {
-		xmlFree (rel);
-		xmlFree (label);
+		g_free (rel);
+		g_free (label);
 		return gdata_parser_error_required_property_missing (root_node, "rel", error);
 	} else if (rel != NULL && label != NULL) {
 		/* Can't have both set at once */
-		xmlFree (rel);
-		xmlFree (label);
+		g_free (rel);
+		g_free (label);
 		return gdata_parser_error_mutexed_properties (root_node, "rel", "label", error);
 	}
 
-	priv->relation_type = (gchar*) rel;
-	priv->label = (gchar*) label;
+	priv->relation_type = rel;
+	priv->label = label;
 
 	return TRUE;
 }
 
 static gboolean
-parse_xml (GDataParsable *parsable, xmlDoc *doc, xmlNode *node, gpointer user_data, GError **error)
+parse_xml (GDataParsable *parsable, GXmlDomDocument *doc, GXmlDomXNode *node, gpointer user_data, GError **error)
 {
 	GDataGContactEventPrivate *priv = GDATA_GCONTACT_EVENT (parsable)->priv;
 
-	if (gdata_parser_is_namespace (node, "http://schemas.google.com/g/2005";) == TRUE && xmlStrcmp (node->name, (xmlChar*) "when") == 0) {
-		xmlChar *start_time;
+	if (gdata_parser_is_namespace (node, "http://schemas.google.com/g/2005";) == TRUE && g_strcmp0 (gxml_dom_xnode_get_node_name (node), "when") == 0) {
+		gchar *start_time;
 		guint year, month, day;
 
 		/* gd:when; note we don't use GDataGDWhen here because gContact:event only uses a limited subset
@@ -237,20 +238,20 @@ parse_xml (GDataParsable *parsable, xmlDoc *doc, xmlNode *node, gpointer user_da
 		if (g_date_valid (&(priv->date)) == TRUE)
 			return gdata_parser_error_duplicate_element (node, error);
 
-		start_time = xmlGetProp (node, (xmlChar*) "startTime");
+		start_time = gxml_dom_element_get_attribute (GXML_DOM_ELEMENT (node), "startTime");
 		if (start_time == NULL)
 			return gdata_parser_error_required_property_missing (node, "startTime", error);
 
 		/* Try parsing the date format: YYYY-MM-DD */
-		if (strlen ((char*) start_time) == 10 &&
-		    sscanf ((char*) start_time, "%4u-%2u-%2u", &year, &month, &day) == 3 && g_date_valid_dmy (day, month, year) == TRUE) {
+		if (strlen (start_time) == 10 &&
+		    sscanf (start_time, "%4u-%2u-%2u", &year, &month, &day) == 3 && g_date_valid_dmy (day, month, year) == TRUE) {
 			/* Store the values in the GDate */
 			g_date_set_dmy (&(priv->date), day, month, year);
-			xmlFree (start_time);
+			g_free (start_time);
 		} else {
 			/* Parsing failed */
 			gdata_parser_error_not_iso8601_format (node, (gchar*) start_time, error);
-			xmlFree (start_time);
+			g_free (start_time);
 			return FALSE;
 		}
 
diff --git a/gdata/gcontact/gdata-gcontact-external-id.c b/gdata/gcontact/gdata-gcontact-external-id.c
index fd74dd1..31990e4 100644
--- a/gdata/gcontact/gdata-gcontact-external-id.c
+++ b/gdata/gcontact/gdata-gcontact-external-id.c
@@ -30,7 +30,7 @@
  **/
 
 #include <glib.h>
-#include <libxml/parser.h>
+#include <gxml.h>
 
 #include "gdata-gcontact-external-id.h"
 #include "gdata-parsable.h"
@@ -41,7 +41,7 @@ static void gdata_gcontact_external_id_comparable_init (GDataComparableIface *if
 static void gdata_gcontact_external_id_finalize (GObject *object);
 static void gdata_gcontact_external_id_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec);
 static void gdata_gcontact_external_id_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec);
-static gboolean pre_parse_xml (GDataParsable *parsable, xmlDoc *doc, xmlNode *root_node, gpointer user_data, GError **error);
+static gboolean pre_parse_xml (GDataParsable *parsable, GXmlDomDocument *doc, GXmlDomXNode *root_node, gpointer user_data, GError **error);
 static void pre_get_xml (GDataParsable *parsable, GString *xml_string);
 static void get_namespaces (GDataParsable *parsable, GHashTable *namespaces);
 
@@ -208,35 +208,36 @@ gdata_gcontact_external_id_set_property (GObject *object, guint property_id, con
 }
 
 static gboolean
-pre_parse_xml (GDataParsable *parsable, xmlDoc *doc, xmlNode *root_node, gpointer user_data, GError **error)
+pre_parse_xml (GDataParsable *parsable, GXmlDomDocument *doc, GXmlDomXNode *root_node, gpointer user_data, GError **error)
 {
-	xmlChar *value, *rel, *label;
+	gchar *value, *rel, *label;
 	GDataGContactExternalIDPrivate *priv = GDATA_GCONTACT_EXTERNAL_ID (parsable)->priv;
+	GXmlDomElement *root_elem = GXML_DOM_ELEMENT (root_node);
 
-	value = xmlGetProp (root_node, (xmlChar*) "value");
+	value = gxml_dom_element_get_attribute (root_elem, "value");
 	if (value == NULL) {
-		xmlFree (value);
+		g_free (value);
 		return gdata_parser_error_required_property_missing (root_node, "value", error);
 	}
 
-	rel = xmlGetProp (root_node, (xmlChar*) "rel");
-	label = xmlGetProp (root_node, (xmlChar*) "label");
+	rel = gxml_dom_element_get_attribute (root_elem, "rel");
+	label = gxml_dom_element_get_attribute (root_elem, "label");
 	if ((rel == NULL || *rel == '\0') && (label == NULL || *label == '\0')) {
-		xmlFree (value);
-		xmlFree (rel);
-		xmlFree (label);
+		g_free (value);
+		g_free (rel);
+		g_free (label);
 		return gdata_parser_error_required_property_missing (root_node, "rel", error);
 	} else if (rel != NULL && label != NULL) {
 		/* Can't have both set at once */
-		xmlFree (value);
-		xmlFree (rel);
-		xmlFree (label);
+		g_free (value);
+		g_free (rel);
+		g_free (label);
 		return gdata_parser_error_mutexed_properties (root_node, "rel", "label", error);
 	}
 
-	priv->value = (gchar*) value;
-	priv->relation_type = (gchar*) rel;
-	priv->label = (gchar*) label;
+	priv->value = value;
+	priv->relation_type = rel;
+	priv->label = label;
 
 	return TRUE;
 }
diff --git a/gdata/gcontact/gdata-gcontact-jot.c b/gdata/gcontact/gdata-gcontact-jot.c
index 8b2637f..923444a 100644
--- a/gdata/gcontact/gdata-gcontact-jot.c
+++ b/gdata/gcontact/gdata-gcontact-jot.c
@@ -30,7 +30,7 @@
  **/
 
 #include <glib.h>
-#include <libxml/parser.h>
+#include <gxml.h>
 
 #include "gdata-gcontact-jot.h"
 #include "gdata-parsable.h"
@@ -39,8 +39,8 @@
 static void gdata_gcontact_jot_finalize (GObject *object);
 static void gdata_gcontact_jot_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec);
 static void gdata_gcontact_jot_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec);
-static gboolean pre_parse_xml (GDataParsable *parsable, xmlDoc *doc, xmlNode *root_node, gpointer user_data, GError **error);
-static gboolean parse_xml (GDataParsable *parsable, xmlDoc *doc, xmlNode *root_node, gpointer user_data, GError **error);
+static gboolean pre_parse_xml (GDataParsable *parsable, GXmlDomDocument *doc, xmlNode *root_node, gpointer user_data, GError **error);
+static gboolean parse_xml (GDataParsable *parsable, GXmlDomDocument *doc, xmlNode *root_node, gpointer user_data, GError **error);
 static void pre_get_xml (GDataParsable *parsable, GString *xml_string);
 static void get_xml (GDataParsable *parsable, GString *xml_string);
 static void get_namespaces (GDataParsable *parsable, GHashTable *namespaces);
@@ -167,7 +167,7 @@ gdata_gcontact_jot_set_property (GObject *object, guint property_id, const GValu
 }
 
 static gboolean
-pre_parse_xml (GDataParsable *parsable, xmlDoc *doc, xmlNode *root_node, gpointer user_data, GError **error)
+pre_parse_xml (GDataParsable *parsable, GXmlDomDocument *doc, xmlNode *root_node, gpointer user_data, GError **error)
 {
 	xmlChar *rel;
 	GDataGContactJotPrivate *priv = GDATA_GCONTACT_JOT (parsable)->priv;
@@ -185,7 +185,7 @@ pre_parse_xml (GDataParsable *parsable, xmlDoc *doc, xmlNode *root_node, gpointe
 }
 
 static gboolean
-parse_xml (GDataParsable *parsable, xmlDoc *doc, xmlNode *node, gpointer user_data, GError **error)
+parse_xml (GDataParsable *parsable, GXmlDomDocument *doc, xmlNode *node, gpointer user_data, GError **error)
 {
 	/* Textual content's handled in pre_parse_xml */
 	if (node->type != XML_ELEMENT_NODE)
diff --git a/gdata/gcontact/gdata-gcontact-website.c b/gdata/gcontact/gdata-gcontact-website.c
index edfcbdb..aac505d 100644
--- a/gdata/gcontact/gdata-gcontact-website.c
+++ b/gdata/gcontact/gdata-gcontact-website.c
@@ -30,7 +30,7 @@
  **/
 
 #include <glib.h>
-#include <libxml/parser.h>
+#include <gxml.h>
 
 #include "gdata-gcontact-website.h"
 #include "gdata-parsable.h"
@@ -41,7 +41,7 @@ static void gdata_gcontact_website_comparable_init (GDataComparableIface *iface)
 static void gdata_gcontact_website_finalize (GObject *object);
 static void gdata_gcontact_website_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec);
 static void gdata_gcontact_website_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec);
-static gboolean pre_parse_xml (GDataParsable *parsable, xmlDoc *doc, xmlNode *root_node, gpointer user_data, GError **error);
+static gboolean pre_parse_xml (GDataParsable *parsable, GXmlDomDocument *doc, GXmlDomXNode *root_node, gpointer user_data, GError **error);
 static void pre_get_xml (GDataParsable *parsable, GString *xml_string);
 static void get_namespaces (GDataParsable *parsable, GHashTable *namespaces);
 
@@ -233,19 +233,20 @@ gdata_gcontact_website_set_property (GObject *object, guint property_id, const G
 }
 
 static gboolean
-pre_parse_xml (GDataParsable *parsable, xmlDoc *doc, xmlNode *root_node, gpointer user_data, GError **error)
+pre_parse_xml (GDataParsable *parsable, GXmlDomDocument *doc, GXmlDomXNode *root_node, gpointer user_data, GError **error)
 {
-	xmlChar *uri, *rel, *label;
+	gchar *uri, *rel;
 	gboolean primary_bool;
 	GDataGContactWebsitePrivate *priv = GDATA_GCONTACT_WEBSITE (parsable)->priv;
+	GXmlDomElement *root_elem = GXML_DOM_ELEMENT (root_node);
 
 	/* Is it the primary website? */
 	if (gdata_parser_boolean_from_property (root_node, "primary", &primary_bool, 0, error) == FALSE)
 		return FALSE;
 
-	uri = xmlGetProp (root_node, (xmlChar*) "href");
+	uri = gxml_dom_element_get_attribute (root_elem, "href");
 	if (uri == NULL || *uri == '\0') {
-		xmlFree (uri);
+		g_free (uri);
 		return gdata_parser_error_required_property_missing (root_node, "href", error);
 	}
 
@@ -262,6 +263,16 @@ pre_parse_xml (GDataParsable *parsable, xmlDoc *doc, xmlNode *root_node, gpointe
 	priv->relation_type = (gchar*) rel;
 	priv->label = (gchar*) label;
 	priv->uri = (gchar*) uri;
+	rel = gxml_dom_element_get_attribute (root_elem, "rel");
+	if (rel == NULL || *rel == '\0') {
+		g_free (uri);
+		g_free (rel);
+		return gdata_parser_error_required_property_missing (root_node, "rel", error);
+	}
+
+	priv->uri = uri;
+	priv->relation_type = rel;
+	priv->label = gxml_dom_element_get_attribute (root_elem, "label");
 	priv->is_primary = primary_bool;
 
 	return TRUE;
diff --git a/gdata/georss/gdata-georss-where.c b/gdata/georss/gdata-georss-where.c
index 1b2f2a5..7d73338 100644
--- a/gdata/georss/gdata-georss-where.c
+++ b/gdata/georss/gdata-georss-where.c
@@ -37,7 +37,7 @@
  */
 
 #include <glib.h>
-#include <libxml/parser.h>
+#include <gxml.h>
 #include <string.h>
 
 #include "gdata-georss-where.h"
@@ -45,7 +45,7 @@
 #include "gdata-parser.h"
 #include "gdata-private.h"
 
-static gboolean parse_xml (GDataParsable *parsable, xmlDoc *doc, xmlNode *node, gpointer user_data, GError **error);
+static gboolean parse_xml (GDataParsable *parsable, GXmlDomDocument *doc, GXmlDomXNode *node, gpointer user_data, GError **error);
 static void get_namespaces (GDataParsable *parsable, GHashTable *namespaces);
 static void get_xml (GDataParsable *parsable, GString *xml_string);
 
@@ -80,36 +80,33 @@ gdata_georss_where_init (GDataGeoRSSWhere *self)
 }
 
 static gboolean
-parse_xml (GDataParsable *parsable, xmlDoc *doc, xmlNode *node, gpointer user_data, GError **error)
+parse_xml (GDataParsable *parsable, GXmlDomDocument *doc, GXmlDomXNode *node, gpointer user_data, GError **error)
 {
 	GDataGeoRSSWhere *self = GDATA_GEORSS_WHERE (parsable);
+	const gchar *node_name = gxml_dom_xnode_get_node_name (node);
 
 	if (gdata_parser_is_namespace (node, "http://www.opengis.net/gml";) == TRUE &&
-	    xmlStrcmp (node->name, (xmlChar*) "Point") == 0) {
+	    g_strcmp0 (node_name, "Point") == 0) {
 		/* gml:Point */
 		gboolean found_pos = FALSE;
-		xmlNode *child;
+		GXmlDomXNode *child;
 
-		for (child = node->children; child != NULL; child = child->next) {
-			if (xmlStrcmp (child->name, (xmlChar*) "pos") == 0) {
-				xmlChar *pos = xmlNodeListGetString (doc, child->children, TRUE);
+		for (child = gxml_dom_xnode_get_first_child (node); child != NULL; child = gxml_dom_xnode_get_next_sibling (child)) {
+			if (g_strcmp0 (gxml_dom_xnode_get_node_name (child), "pos") == 0) {
+				gchar *pos = gxml_dom_element_content_to_string (GXML_DOM_ELEMENT (child));
 				gchar *endptr;
 
-				self->priv->latitude = g_ascii_strtod ((gchar*) pos, &endptr);
+				self->priv->latitude = g_ascii_strtod (pos, &endptr);
 				self->priv->longitude = g_ascii_strtod (endptr, NULL);
 
-				xmlFree (pos);
+				g_free (pos);
 				found_pos = TRUE;
 			} else {
 				/* TODO: this logic copied from gdata-parsable.c.  Re-evaluate this at some point in the future.
 				   If GeoRSS and GML support were to be used more widely, it might due to implement GML objects. */
-				xmlBuffer *buffer;
 
 				/* Unhandled XML */
-				buffer = xmlBufferCreate ();
-				xmlNodeDump (buffer, doc, child, 0, 0);
-				g_message ("Unhandled XML in <gml:Point>: %s", (gchar*) xmlBufferContent (buffer));
-				xmlBufferFree (buffer);
+				g_message ("Unhandled XML in <gml:Point>: %s", gxml_dom_xnode_to_string (child, 0, 0));
 			}
 		}
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]