From 4247826017c456f79281de75108a1f567528fa55 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Wed, 28 Nov 2007 18:45:54 +0000 Subject: [PATCH] ** Fix for bug #415817 2007-11-28 Milan Crha ** 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 | 8 ++++++++ calendar/backends/file/e-cal-backend-file.c | 23 ++++++++++++++++++++--- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/calendar/ChangeLog b/calendar/ChangeLog index d6fb2e6..29ffe98 100644 --- a/calendar/ChangeLog +++ b/calendar/ChangeLog @@ -1,3 +1,11 @@ +2007-11-28 Milan Crha + + ** 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 ** Fix for bug #494314 diff --git a/calendar/backends/file/e-cal-backend-file.c b/calendar/backends/file/e-cal-backend-file.c index 3bc74b6..12cff69 100644 --- a/calendar/backends/file/e-cal-backend-file.c +++ b/calendar/backends/file/e-cal-backend-file.c @@ -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); -- 2.7.4