From bfc38ac0bbd4680207e02fc2f6d2d4f528f01195 Mon Sep 17 00:00:00 2001 From: Chenthill Palanisamy Date: Mon, 13 Apr 2009 08:45:14 +0000 Subject: [PATCH] Fixes #488632 (bnc). Fixes the number of instances created on server. svn path=/trunk/; revision=10208 --- calendar/ChangeLog | 6 ++++ .../groupwise/e-cal-backend-groupwise-utils.c | 38 ++++++++++++++++++++-- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/calendar/ChangeLog b/calendar/ChangeLog index cdfbcad..0ec0efd 100644 --- a/calendar/ChangeLog +++ b/calendar/ChangeLog @@ -1,5 +1,11 @@ 2009-04-13 Chenthill Palanisamy + Fixes #488632 (bnc) + * calendar/backends/groupwise/e-cal-backend-groupwise-utils.c: Creates + the right number of recurring instances on server. + +2009-04-13 Chenthill Palanisamy + Fixes #241604 (bnc) * calendar/backends/groupwise/e-cal-backend-groupwise-utils.c: * servers/groupwise/e-gw-item.c: diff --git a/calendar/backends/groupwise/e-cal-backend-groupwise-utils.c b/calendar/backends/groupwise/e-cal-backend-groupwise-utils.c index 263fbee..a993880 100644 --- a/calendar/backends/groupwise/e-cal-backend-groupwise-utils.c +++ b/calendar/backends/groupwise/e-cal-backend-groupwise-utils.c @@ -59,6 +59,16 @@ get_recur_instance (ECalComponent *comp, time_t instance_start, time_t instance_ return TRUE; } +static gboolean +get_recur_count (ECalComponent *comp, time_t instance_start, time_t instance_end, gpointer data) +{ + int *count = (int *) data; + + *count = *count + 1; + + return TRUE; +} + static icaltimezone * resolve_tzid_cb (const char *tzid, gpointer data) { @@ -473,6 +483,24 @@ set_attendees_to_item (EGwItem *item, ECalComponent *comp, icaltimezone *default } +static int +get_actual_count (ECalComponent *comp, ECalBackendGroupwise *cbgw) +{ + int count = 0; + icaltimezone *dzone, *utc; + + + dzone = e_cal_backend_groupwise_get_default_zone (cbgw); + utc = icaltimezone_get_utc_timezone (); + + if (dzone) + e_cal_recur_generate_instances (comp, -1, -1,get_recur_count, &count, resolve_tzid_cb, NULL, (icaltimezone *) dzone); + else + e_cal_recur_generate_instances (comp, -1, -1,get_recur_count, &count, resolve_tzid_cb, NULL, utc); + + return count; +} + static void set_rrule_from_comp (ECalComponent *comp, EGwItem *item, ECalBackendGroupwise *cbgw) { @@ -505,9 +533,13 @@ set_rrule_from_comp (ECalComponent *comp, EGwItem *item, ECalBackendGroupwise *c default: break; } - if (ical_recur->count != 0) - item_rrule->count = ical_recur->count; - else + + if (ical_recur->count != 0) { + if (ical_recur->freq != ICAL_DAILY_RECURRENCE) + item_rrule->count = get_actual_count (comp, cbgw); + else + item_rrule->count = ical_recur->count; + } else item_rrule->until = icaltime_as_ical_string_r (ical_recur->until); item_rrule->interval = ical_recur->interval; -- 2.7.4