From eb4a715ad0f1b36aa76d974095e609a41f908975 Mon Sep 17 00:00:00 2001 From: JP Rosevear Date: Mon, 1 Oct 2001 18:54:13 +0000 Subject: Convert the comp exceptions to the pilot record (comp_from_remote_record): 2001-10-01 JP Rosevear * conduits/calendar/calendar-conduit.c (local_record_from_comp): Convert the comp exceptions to the pilot record (comp_from_remote_record): record exceptions in the comp and use time zone stuff on recurrence end date svn path=/trunk/; revision=13269 --- calendar/ChangeLog | 7 ++++ calendar/conduits/calendar/calendar-conduit.c | 54 ++++++++++++++++++++++++--- 2 files changed, 55 insertions(+), 6 deletions(-) (limited to 'calendar') diff --git a/calendar/ChangeLog b/calendar/ChangeLog index 461d8b5388..227971c4ab 100644 --- a/calendar/ChangeLog +++ b/calendar/ChangeLog @@ -1,5 +1,12 @@ 2001-10-01 JP Rosevear + * conduits/calendar/calendar-conduit.c (local_record_from_comp): + Convert the comp exceptions to the pilot record + (comp_from_remote_record): record exceptions on the desktop and + use time zone stuff on recurrence end date + +2001-10-01 JP Rosevear + * pcs/cal-backend-file.c (cal_backend_file_compute_changes): strdup the uid to avoid double free, write out only after everything is done diff --git a/calendar/conduits/calendar/calendar-conduit.c b/calendar/conduits/calendar/calendar-conduit.c index 00d61930ec..0301cbfb90 100644 --- a/calendar/conduits/calendar/calendar-conduit.c +++ b/calendar/conduits/calendar/calendar-conduit.c @@ -48,7 +48,7 @@ GnomePilotConduit * conduit_get_gpilot_conduit (guint32); void conduit_destroy_gpilot_conduit (GnomePilotConduit*); -#define CONDUIT_VERSION "0.1.5" +#define CONDUIT_VERSION "0.1.6" #ifdef G_LOG_DOMAIN #undef G_LOG_DOMAIN #endif @@ -410,11 +410,11 @@ local_record_from_comp (ECalLocalRecord *local, CalComponent *comp, ECalConduitC { const char *uid; CalComponentText summary; - GSList *d_list = NULL; + GSList *d_list = NULL, *edl = NULL, *l; CalComponentText *description; CalComponentDateTime dt; - time_t dt_time; CalComponentClassification classif; + time_t dt_time; int i; g_return_if_fail (local != NULL); @@ -547,13 +547,31 @@ local_record_from_comp (ECalLocalRecord *local, CalComponent *comp, ECalConduitC local->appt->repeatForever = 1; } else { local->appt->repeatForever = 0; - dt_time = icaltime_as_timet (recur->until); + dt_time = icaltime_as_timet_with_zone (recur->until, get_timezone (ctxt->client, dt.tzid)); local->appt->repeatEnd = *localtime (&dt_time); } cal_component_free_recur_list (list); } + /* Exceptions */ + cal_component_get_exdate_list (comp, &edl); + local->appt->exceptions = g_slist_length (edl); + local->appt->exception = g_new0 (struct tm, local->appt->exceptions); + for (l = edl, i = 0; l != NULL; l = l->next, i++) { + CalComponentDateTime *dt = l->data; + + if (dt->value->is_date) { + local->appt->exception[i].tm_mday = dt->value->day; + local->appt->exception[i].tm_mon = dt->value->month - 1; + local->appt->exception[i].tm_year = dt->value->year - 1900; + } else { + dt_time = icaltime_as_timet_with_zone (*dt->value, get_timezone (ctxt->client, dt->tzid)); + local->appt->exception[i] = *localtime (&dt_time); + } + } + cal_component_free_exdate_list (edl); + cal_component_get_classification (comp, &classif); if (classif == CAL_COMPONENT_CLASS_PRIVATE) @@ -598,10 +616,11 @@ comp_from_remote_record (GnomePilotConduitSyncAbs *conduit, struct Appointment appt; struct icaltimetype now = icaltime_from_timet_with_zone (time (NULL), FALSE, timezone), it; struct icalrecurrencetype recur; - int pos, i; CalComponentText summary = {NULL, NULL}; CalComponentDateTime dt = {NULL, icaltimezone_get_tzid (timezone)}; + GSList *edl = NULL; char *txt; + int pos, i; g_return_val_if_fail (remote != NULL, NULL); @@ -624,7 +643,7 @@ comp_from_remote_record (GnomePilotConduitSyncAbs *conduit, /* The iCal description field */ if (!appt.note) { - cal_component_set_comment_list (comp, NULL); + cal_component_set_description_list (comp, NULL); } else { GSList l; CalComponentText text; @@ -722,6 +741,29 @@ comp_from_remote_record (GnomePilotConduitSyncAbs *conduit, cal_component_set_rrule_list (comp, NULL); } + /* Exceptions */ + for (i = 0; i < appt.exceptions; i++) { + struct tm ex; + CalComponentDateTime *dt = g_new0 (CalComponentDateTime, 1); + + dt->value = g_new0 (struct icaltimetype, 1); + dt->tzid = NULL; + + ex = appt.exception[i]; + *dt->value = icaltime_from_timet_with_zone (mktime (&ex), TRUE, timezone); + + edl = g_slist_prepend (edl, dt); + + INFO ("%d %d %d %d %d %d %d %d %d", + ex.tm_sec, ex.tm_min, + ex.tm_hour, ex.tm_mday, + ex.tm_mon, ex.tm_year, + ex.tm_wday, ex.tm_yday, + ex.tm_isdst); + } + cal_component_set_exdate_list (comp, edl); + cal_component_free_exdate_list (edl); + cal_component_set_transparency (comp, CAL_COMPONENT_TRANSP_NONE); if (remote->attr & dlpRecAttrSecret) -- cgit