summaryrefslogtreecommitdiff
path: root/servers/google
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2008-07-28 10:28:44 +0000
committerMilan Crha <mcrha@src.gnome.org>2008-07-28 10:28:44 +0000
commitd3b1e3003ef5322eaacbfc236e7a8b5395cf54d8 (patch)
treecabcd6fadcfbe890835987fd8e383dcefb462977 /servers/google
parentebb5bc93c42ded911f7d1915b973f0bb732b1e26 (diff)
downloadevolution-data-server-d3b1e3003ef5322eaacbfc236e7a8b5395cf54d8.tar.gz
** Fix for bug #468671
2008-07-28 Milan Crha <mcrha@redhat.com> ** Fix for bug #468671 * servers/google/libgdata/gdata-entry.h: (gdata_entry_get_custom), (gdata_entry_set_custom): * servers/google/libgdata/gdata-entry.c: (gdata_entry_get_custom), (gdata_entry_set_custom): Read/write custom values withing entry. * servers/google/libgdata/gdata-feed.h: (gdata_feed_get_timezone): * servers/google/libgdata/gdata-feed.c: (gdata_feed_get_timezone), (struct _GDataFeedPrivate), (gdata_feed_init), (gdata_feed_finalize), (gdata_feed_new_from_xml): Read timezone name of the calendar and let it be available for others. * calendar/backends/google/e-cal-backend-google-utils.c: (gd_date_to_ical), (e_go_item_to_cal_component), (utils_update_insertion): Read time values in proper timezone as returned by Google Calendar. svn path=/trunk/; revision=9210
Diffstat (limited to 'servers/google')
-rw-r--r--servers/google/libgdata/ChangeLog12
-rw-r--r--servers/google/libgdata/gdata-entry.c35
-rw-r--r--servers/google/libgdata/gdata-entry.h3
-rw-r--r--servers/google/libgdata/gdata-feed.c25
-rw-r--r--servers/google/libgdata/gdata-feed.h2
5 files changed, 77 insertions, 0 deletions
diff --git a/servers/google/libgdata/ChangeLog b/servers/google/libgdata/ChangeLog
index 683a7f603..434510896 100644
--- a/servers/google/libgdata/ChangeLog
+++ b/servers/google/libgdata/ChangeLog
@@ -1,3 +1,15 @@
+2008-07-28 Milan Crha <mcrha@redhat.com>
+
+ ** Part of fix for bug #468671
+
+ * gdata-entry.h: (gdata_entry_get_custom), (gdata_entry_set_custom):
+ * gdata-entry.c: (gdata_entry_get_custom), (gdata_entry_set_custom):
+ Read/write custom values withing entry.
+ * gdata-feed.h: (gdata_feed_get_timezone):
+ * gdata-feed.c: (gdata_feed_get_timezone), (struct _GDataFeedPrivate),
+ (gdata_feed_init), (gdata_feed_finalize), (gdata_feed_new_from_xml):
+ Read timezone name of the calendar and let it be available for others.
+
2008-06-13 Wang Xin <jedy.wang@sun.com>
** Fix for bug #527544.
diff --git a/servers/google/libgdata/gdata-entry.c b/servers/google/libgdata/gdata-entry.c
index 2c8f1f4c4..9844a7ebb 100644
--- a/servers/google/libgdata/gdata-entry.c
+++ b/servers/google/libgdata/gdata-entry.c
@@ -2145,4 +2145,39 @@ gdata_entry_set_postal_addresses (GDataEntry *entry, GSList *addresses)
priv->entry_needs_update = TRUE;
}
+/**
+ * gdata_entry_get_custom:
+ * entry owns the returned pointer and is valid as long as the item is alive
+ * and the value isn't changed by gdata_entry_set_custom or other method.
+ * Do not use this method if there is direct method for your value!
+ **/
+const gchar *
+gdata_entry_get_custom (GDataEntry *entry, const gchar *name)
+{
+ GDataEntryPrivate *priv;
+ g_return_val_if_fail (entry != NULL, NULL);
+ g_return_val_if_fail (name != NULL, NULL);
+ g_return_val_if_fail (GDATA_IS_ENTRY (entry), NULL);
+
+ priv = GDATA_ENTRY_GET_PRIVATE (entry);
+ return g_hash_table_lookup (priv->field_table, name);
+}
+
+/**
+ * gdata_entry_set_custom:
+ * Sets the custom value.
+ * Do not use this function when there exists direct method for your value!
+ **/
+void
+gdata_entry_set_custom (GDataEntry *entry, const gchar *name, const gchar *value)
+{
+ GDataEntryPrivate *priv;
+
+ g_return_if_fail (entry != NULL);
+ g_return_if_fail (name != NULL);
+ g_return_if_fail (GDATA_IS_ENTRY (entry));
+
+ priv = GDATA_ENTRY_GET_PRIVATE (entry);
+ g_hash_table_insert (priv->field_table, g_strdup (name), g_strdup (value ? value : ""));
+}
diff --git a/servers/google/libgdata/gdata-entry.h b/servers/google/libgdata/gdata-entry.h
index 8e980ed9e..8d8941ed5 100644
--- a/servers/google/libgdata/gdata-entry.h
+++ b/servers/google/libgdata/gdata-entry.h
@@ -268,5 +268,8 @@ GDataEntryPhoneNumber * gdata_entry_get_primary_phone_number (GDataEntry *entry)
GDataEntryPostalAddress * gdata_entry_get_primary_postal_address (GDataEntry *entry);
+const gchar *gdata_entry_get_custom (GDataEntry *entry, const gchar *name);
+void gdata_entry_set_custom (GDataEntry *entry, const gchar *name, const gchar *value);
+
#endif
diff --git a/servers/google/libgdata/gdata-feed.c b/servers/google/libgdata/gdata-feed.c
index 6142a3c46..b730b8dd3 100644
--- a/servers/google/libgdata/gdata-feed.c
+++ b/servers/google/libgdata/gdata-feed.c
@@ -82,6 +82,7 @@ struct _GDataFeedPrivate {
gchar *summary;
gchar *title;
gchar *updated;
+ gchar *timezone;
GHashTable *field_table;
gchar *feedXML;
@@ -177,6 +178,7 @@ gdata_feed_init(GTypeInstance *instance,
priv->summary = NULL;
priv->title = NULL;
priv->updated = NULL;
+ priv->timezone = NULL;
priv->authors = NULL;
priv->links = NULL;
@@ -241,6 +243,7 @@ gdata_feed_finalize(GObject *obj)
}
g_free (priv->updated);
+ g_free (priv->timezone);
if (priv->field_table != NULL)
g_hash_table_destroy(priv->field_table);
@@ -578,6 +581,11 @@ gdata_feed_new_from_xml(const gchar* feedXML, const gint length)
value = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
priv->updated = g_strdup ((gchar*)value);
xmlFree(value);
+ } else if (!xmlStrcmp(cur->name, (xmlChar *)"timezone")) {
+ value = xmlGetProp (cur, (xmlChar *)"value");
+ g_free (priv->timezone);
+ priv->timezone = g_strdup ((gchar*)value);
+ xmlFree (value);
}
else if (!xmlStrcmp(cur->name, (xmlChar *)"entry")) {
priv->entries = g_slist_prepend(priv->entries, gdata_entry_new_from_xmlptr(doc,cur));
@@ -692,3 +700,20 @@ gdata_feed_get_entries (GDataFeed *feed)
return priv->entries;
}
+
+/**
+ * gdata_feed_get_timezone:
+ * Returned pointer owns the feed, its value is like 'Indian/Christmas'
+ **/
+const gchar *
+gdata_feed_get_timezone (GDataFeed *feed)
+{
+ GDataFeedPrivate *priv;
+
+ g_return_val_if_fail (feed != NULL, NULL);
+ g_return_val_if_fail (GDATA_IS_FEED (feed), NULL);
+
+ priv = GDATA_FEED_GET_PRIVATE (feed);
+
+ return priv->timezone;
+}
diff --git a/servers/google/libgdata/gdata-feed.h b/servers/google/libgdata/gdata-feed.h
index 075092e18..c616a1d82 100644
--- a/servers/google/libgdata/gdata-feed.h
+++ b/servers/google/libgdata/gdata-feed.h
@@ -71,3 +71,5 @@ gchar * gdata_feed_generate_xml(GDataFeed *feed);
gchar * gdata_feed_get_updated (GDataFeed *feed);
GSList * gdata_feed_get_entries (GDataFeed *feed);
+
+const gchar *gdata_feed_get_timezone (GDataFeed *feed);