[evolution-ews] Request and parse the tzid from the exchange server when a GetItem action is performed
- From: Or Goshen <ogosh src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-ews] Request and parse the tzid from the exchange server when a GetItem action is performed
- Date: Mon, 18 Jul 2011 12:40:31 +0000 (UTC)
commit 019a900f1988e07ea64553cd4d015f043eaeb69a
Author: Or Goshen <orx goshen intel com>
Date: Mon Jul 18 15:51:05 2011 +0300
Request and parse the tzid from the exchange server when a GetItem action is performed
src/calendar/e-cal-backend-ews.c | 23 ++++++++++++++++++++---
src/server/e-ews-item.c | 18 +++++++++++++++++-
src/server/e-ews-item.h | 1 +
3 files changed, 38 insertions(+), 4 deletions(-)
---
diff --git a/src/calendar/e-cal-backend-ews.c b/src/calendar/e-cal-backend-ews.c
index 0147e68..83d06f8 100644
--- a/src/calendar/e-cal-backend-ews.c
+++ b/src/calendar/e-cal-backend-ews.c
@@ -2596,20 +2596,37 @@ add_item_to_cache (ECalBackendEws *cbews, EEwsItem *item, gchar *uid)
icalcomponent_add_component (vcomp,icalcomp);
} else {
+ struct icaltimetype dt;
+ icaltimezone *zone;
mime_content = e_ews_item_get_mime_content (item);
vcomp = icalparser_parse_string (mime_content);
/* Add the timezone */
vtimezone = icalcomponent_get_first_component (vcomp, ICAL_VTIMEZONE_COMPONENT);
if (vtimezone) {
- icaltimezone *zone;
-
zone = icaltimezone_new ();
icaltimezone_set_component (zone, icalcomponent_new_clone (vtimezone));
e_cal_backend_store_put_timezone (priv->store, zone);
icaltimezone_free (zone, TRUE);
}
+
+ if ((zone = (icaltimezone *)e_cal_backend_store_get_timezone(priv->store, e_ews_item_get_tzid (item))) == NULL)
+ zone = (icaltimezone *)icaltimezone_get_builtin_timezone(e_ews_item_get_tzid (item));
+
+ if (zone) {
+ icalcomp = icalcomponent_get_first_component (vcomp, kind);
+
+ icalcomponent_add_component (vcomp, icalcomponent_new_clone (icaltimezone_get_component (zone)));
+
+ dt = icalcomponent_get_dtstart (icalcomp);
+ dt = icaltime_set_timezone (&dt, zone);
+ icalcomponent_set_dtstart (icalcomp, dt);
+
+ dt = icalcomponent_get_dtend (icalcomp);
+ dt = icaltime_set_timezone (&dt, zone);
+ icalcomponent_set_dtend (icalcomp, dt);
+ }
}
/* Vevent or Vtodo */
icalcomp = icalcomponent_get_first_component (vcomp, kind);
@@ -2934,7 +2951,7 @@ ews_cal_sync_items_ready_cb (GObject *obj, GAsyncResult *res, gpointer user_data
EWS_PRIORITY_MEDIUM,
cal_item_ids,
"IdOnly",
- "item:Attachments item:HasAttachments item:MimeContent calendar:ModifiedOccurrences calendar:RequiredAttendees calendar:OptionalAttendees",
+ "item:Attachments item:HasAttachments item:MimeContent calendar:TimeZone calendar:ModifiedOccurrences calendar:RequiredAttendees calendar:OptionalAttendees",
FALSE, NULL,
ews_cal_get_items_ready_cb,
NULL, NULL, NULL,
diff --git a/src/server/e-ews-item.c b/src/server/e-ews-item.c
index 48d0ed6..aa13a24 100644
--- a/src/server/e-ews-item.c
+++ b/src/server/e-ews-item.c
@@ -171,6 +171,8 @@ struct _EEwsItemPrivate {
gboolean is_read;
EwsImportance importance;
+ gchar *timezone;
+
GSList *to_recipients;
GSList *cc_recipients;
GSList *bcc_recipients;
@@ -232,6 +234,9 @@ e_ews_item_dispose (GObject *object)
g_free (priv->references);
priv->references = NULL;
+ g_free (priv->timezone);
+ priv->timezone = NULL;
+
if (priv->to_recipients) {
g_slist_foreach (priv->to_recipients, (GFunc) ews_item_free_mailbox, NULL);
g_slist_free (priv->to_recipients);
@@ -973,6 +978,8 @@ e_ews_item_set_from_soap_parameter (EEwsItem *item, ESoapParameter *param)
value = e_soap_parameter_get_string_value (subparam);
priv->is_read = (!g_ascii_strcasecmp (value, "true"));
g_free (value);
+ } else if (!g_ascii_strcasecmp (name, "TimeZone")) {
+ priv->timezone = e_soap_parameter_get_string_value (subparam);
} else if (task) {
parse_task_field (item, name, subparam);
/* fields below are not relevant for task, so skip them */
@@ -1713,4 +1720,13 @@ e_ews_item_task_has_complete_date (EEwsItem *item, gboolean *has_date)
*has_date = item->priv->task_fields->has_complete_date;
return TRUE;
-}
\ No newline at end of file
+}
+
+const gchar *
+e_ews_item_get_tzid (EEwsItem *item)
+{
+ g_return_val_if_fail (E_IS_EWS_ITEM(item), NULL);
+ g_return_val_if_fail (item->priv->timezone != NULL, NULL);
+
+ return item->priv->timezone;
+}
diff --git a/src/server/e-ews-item.h b/src/server/e-ews-item.h
index aefc17f..6ff26ca 100644
--- a/src/server/e-ews-item.h
+++ b/src/server/e-ews-item.h
@@ -208,6 +208,7 @@ gboolean e_ews_item_task_has_due_date (EEwsItem *item,
gboolean e_ews_item_task_has_complete_date
(EEwsItem* item,
gboolean* has_date);
+const gchar * e_ews_item_get_tzid (EEwsItem *item);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]