[libgdata/gxml] * ported gdata-gcontact-{calendar, event, external-id, website}, gdata-georss-where.c
- From: Richard Hans Schwarting <rschwart src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgdata/gxml] * ported gdata-gcontact-{calendar, event, external-id, website}, gdata-georss-where.c
- Date: Sat, 24 Sep 2011 06:22:24 +0000 (UTC)
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]