[gnome-calendar] utils: fix timezones on event component creation



commit d70613929bf9cfc9d115a75c59811c86794576e5
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Sun Feb 28 14:12:16 2016 -0300

    utils: fix timezones on event component creation

 src/gcal-utils.c |   40 +++++++++++++++++++++++++++-------------
 1 files changed, 27 insertions(+), 13 deletions(-)
---
diff --git a/src/gcal-utils.c b/src/gcal-utils.c
index a42cda7..db89741 100644
--- a/src/gcal-utils.c
+++ b/src/gcal-utils.c
@@ -423,7 +423,7 @@ build_component_from_details (const gchar *summary,
   ECalComponent *event;
   ECalComponentDateTime dt;
   ECalComponentText summ;
-  GDateTime *utc_start, *utc_end;
+  icaltimezone *zone;
   gboolean all_day;
 
   event = e_cal_component_new ();
@@ -435,31 +435,45 @@ build_component_from_details (const gchar *summary,
    */
   all_day = datetime_is_date (initial_date) && (final_date ? datetime_is_date (final_date) : TRUE);
 
-  /* Start date */
-  utc_start = g_date_time_to_utc (initial_date);
+  /*
+   * When the event is all day, we consider UTC timezone by default. Otherwise,
+   * we always use the system timezone to create new events
+   */
+  if (all_day)
+    {
+      zone = icaltimezone_get_utc_timezone ();
+    }
+  else
+    {
+      gchar *system_tz = e_cal_system_timezone_get_location ();
+
+      zone = icaltimezone_get_builtin_timezone (system_tz);
+
+      g_free (system_tz);
+    }
 
-  dt.value = datetime_to_icaltime (utc_start);
+  /* Start date */
+  dt.value = datetime_to_icaltime (initial_date);
+  icaltime_set_timezone (dt.value, zone);
   dt.value->is_date = all_day;
-  dt.tzid = format_utc_offset (g_date_time_get_utc_offset (initial_date));
+  dt.tzid = icaltimezone_get_tzid (zone);
   e_cal_component_set_dtstart (event, &dt);
 
-  e_cal_component_free_datetime (&dt);
-  g_date_time_unref (utc_start);
+  g_free (dt.value);
 
   /* End date */
   if (!final_date)
     final_date = g_date_time_add_days (initial_date, 1);
 
-  utc_end = g_date_time_to_utc (final_date);
-
-  dt.value = datetime_to_icaltime (utc_end);
+  dt.value = datetime_to_icaltime (final_date);
+  icaltime_set_timezone (dt.value, zone);
   dt.value->is_date = all_day;
-  dt.tzid = format_utc_offset (g_date_time_get_utc_offset (final_date));
+  dt.tzid = icaltimezone_get_tzid (zone);
   e_cal_component_set_dtend (event, &dt);
 
-  e_cal_component_free_datetime (&dt);
-  g_date_time_unref (utc_end);
+  g_free (dt.value);
 
+  /* Summary */
   summ.altrep = NULL;
   summ.value = summary;
   e_cal_component_set_summary (event, &summ);


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