** Fix for bug #415817
authorMilan Crha <mcrha@redhat.com>
Wed, 28 Nov 2007 18:45:54 +0000 (18:45 +0000)
committerMilan Crha <mcrha@src.gnome.org>
Wed, 28 Nov 2007 18:45:54 +0000 (18:45 +0000)
2007-11-28  Milan Crha  <mcrha@redhat.com>

** Fix for bug #415817

* backends/file/e-cal-backend-file.c:
(e_cal_backend_file_modify_object): Update start/end time for
recurrence instances even when only end time has been changed.

svn path=/trunk/; revision=8255

calendar/ChangeLog
calendar/backends/file/e-cal-backend-file.c

index d6fb2e6..29ffe98 100644 (file)
@@ -1,3 +1,11 @@
+2007-11-28  Milan Crha  <mcrha@redhat.com>
+
+       ** Fix for bug #415817
+
+       * backends/file/e-cal-backend-file.c:
+       (e_cal_backend_file_modify_object): Update start/end time for
+       recurrence instances even when only end time has been changed.
+
 2007-11-26  Ondrej Jirman  <megous@megous.com>
 
        ** Fix for bug #494314
index 3bc74b6..12cff69 100644 (file)
@@ -2062,17 +2062,31 @@ e_cal_backend_file_modify_object (ECalBackendSync *backend, EDataCal *cal, const
                                recur.zone = start.zone;
 
                        if (icaltime_compare_date_only (start, recur) == 0) {
+                               icaltimetype end = icalcomponent_get_dtend (icalcomp);
                                ECalComponentDateTime m_sdate, m_endate;
 
                                e_cal_component_get_dtstart (obj_data->full_object, &m_sdate);
                                e_cal_component_get_dtend (obj_data->full_object, &m_endate);
 
-                               if (icaltime_compare (start, recur) != 0) {
-                                       icaltimetype end = icalcomponent_get_dtend (icalcomp);
+                               if (icaltime_compare (start, recur) != 0 ||
+                                   !m_endate.value ||
+                                   icaltime_compare (end, *(m_endate.value)) != 0) {
 
                                        m_sdate.value->hour = start.hour;
                                        m_sdate.value->minute = start.minute;
-                                       m_sdate.value->second =
+                                       m_sdate.value->second = start.second;
+
+                                       if (!m_endate.value) {
+                                               /* create one if not exists and make same date
+                                                  and time zone like start */
+                                               m_endate.value = g_new (struct icaltimetype, 1);
+                                               *m_endate.value = *m_sdate.value;
+
+                                               if (m_endate.tzid)
+                                                       g_free ((char*)m_endate.tzid);
+
+                                               m_endate.tzid = g_strdup (m_sdate.tzid);
+                                       }
 
                                        m_endate.value->hour = end.hour;
                                        m_endate.value->minute = end.minute;
@@ -2083,6 +2097,9 @@ e_cal_backend_file_modify_object (ECalBackendSync *backend, EDataCal *cal, const
                                e_cal_component_set_dtend (comp, &m_endate);
                                e_cal_component_set_recurid (comp, NULL);
                                e_cal_component_commit_sequence (comp);
+
+                               e_cal_component_free_datetime (&m_sdate);
+                               e_cal_component_free_datetime (&m_endate);
                        }
                        e_cal_component_set_recurid (comp, NULL);
                        *new_object = e_cal_component_get_as_string (comp);