From e49e9cc1755266dade86ce33662ceff466f5ca07 Mon Sep 17 00:00:00 2001 From: Miguel de Icaza Date: Wed, 28 Jul 1999 08:41:12 +0000 Subject: New file. Implements PalmPilot syncronization with the Gnome Calendar. 1999-07-28 Miguel de Icaza * calendar-pilot-sync.c: New file. Implements PalmPilot syncronization with the Gnome Calendar. 1999-07-27 Miguel de Icaza * calobj.c (ical_object_new_from_string): New function. Creates an iCalObject from a vCalendar string that is supposed to contain only one vEvent. * calendar.c: (calendar_save): Split this routine in two. * gnome-cal.c (gnome_calendar_new): Create the corba server here. * main.c: Include gnorba.h, and corba-cal-factory.h here (close_cmd): Kill the calendar server on shutdown. * calobj.c (load_recur_yearly_day): Added a fixme comment. WE need to handle intervals in the years. * calendar.c (calendar_object_find_in_list, calendar_object_find, calendar_object_find_todo, calendar_object_find_event): New functions for looking up information. * main.c (gnome_calendar_locate): New function. * corba-cal.c (calendar_create_object): New file. Implements the corba server. * calendar.c (calendar_object_changed): Flag pilot-status as changed. * calobj.c (ical_object_to_vobject): Save pilot information for syncing. (ical_object_create_from_vobject): Load syncing information for pilot. Do it in a way compatible with KOrganizer. 1999-07-26 Miguel de Icaza * calobj.c (ical_object_create_from_vobject): Generate unique IDs on Vevents we load that lack it. WE need this for the old gnome calendar generated files (ie, before now :-). svn path=/trunk/; revision=1038 --- calendar/calendar.c | 139 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 132 insertions(+), 7 deletions(-) (limited to 'calendar/calendar.c') diff --git a/calendar/calendar.c b/calendar/calendar.c index ff7ae8ee5d..b67f875fdc 100644 --- a/calendar/calendar.c +++ b/calendar/calendar.c @@ -4,7 +4,7 @@ * This keeps track of a given calendar. Eventually this will abtract everything * related to getting calendars/saving calendars locally or to a remote Calendar Service * - * Copyright (C) 1998 the Free Software Foundation + * Copyright (C) 1998, 1999 the Free Software Foundation * * Authors: * Miguel de Icaza (miguel@gnu.org) @@ -323,18 +323,14 @@ calendar_load (Calendar *cal, char *fname) return NULL; } -void -calendar_save (Calendar *cal, char *fname) +static VObject * +vcalendar_create_from_calendar (Calendar *cal) { VObject *vcal; GList *l; time_t now = time (NULL); - struct stat s; struct tm *tm; - if (fname == NULL) - fname = cal->filename; - /* WE call localtime for the side effect of setting tzname */ tm = localtime (&now); @@ -366,6 +362,19 @@ calendar_save (Calendar *cal, char *fname) addVObjectProp (vcal, obj); } + return vcal; +} + +void +calendar_save (Calendar *cal, char *fname) +{ + VObject *vcal; + struct stat s; + + if (fname == NULL) + fname = cal->filename; + + vcal = vcalendar_create_from_calendar (cal); if (g_file_exists (fname)){ char *backup_name = g_strconcat (fname, "~", NULL); @@ -375,6 +384,7 @@ calendar_save (Calendar *cal, char *fname) rename (fname, backup_name); g_free (backup_name); } + writeVObjectToFile (fname, vcal); stat (fname, &s); @@ -384,6 +394,23 @@ calendar_save (Calendar *cal, char *fname) cleanStrTbl (); } +char * +calendar_get_as_vcal_string (Calendar *cal) +{ + VObject *vcal; + char *result; + + g_return_val_if_fail (cal != NULL, NULL); + + vcal = vcalendar_create_from_calendar (cal); + result = writeMemVObject (NULL, 0, vcal); + + cleanVObject (vcal); + cleanStrTbl (); + + return result; +} + static gint calendar_object_compare_by_start (gconstpointer a, gconstpointer b) { @@ -440,6 +467,8 @@ calendar_object_changed (Calendar *cal, iCalObject *obj, int flags) while (alarm_kill (obj)) ; ical_object_try_alarms (obj); + + obj->pilot_status = ICAL_PILOT_SYNC_MOD; } static void @@ -466,3 +495,99 @@ calendar_init_alarms (Calendar *cal) alarm_add (&day_change_alarm, calendar_day_change, cal); } +static iCalObject * +calendar_object_find_in_list (Calendar *cal, GList *list, const char *uid) +{ + GList *l; + + for (l = list; l; l = l->next){ + iCalObject *obj = l->data; + + if (strcmp (obj->uid, uid) == 0) + return obj; + } + + return NULL; +} + +iCalObject * +calendar_object_find_event (Calendar *cal, const char *uid) +{ + g_return_val_if_fail (cal != NULL, NULL); + g_return_val_if_fail (uid != NULL, NULL); + + return calendar_object_find_in_list (cal, cal->events, uid); +} + +iCalObject * +calendar_object_find_todo (Calendar *cal, const char *uid) +{ + g_return_val_if_fail (cal != NULL, NULL); + g_return_val_if_fail (uid != NULL, NULL); + + return calendar_object_find_in_list (cal, cal->todo, uid); +} + +iCalObject * +calendar_object_find (Calendar *cal, const char *uid) +{ + iCalObject *obj; + + g_return_val_if_fail (cal != NULL, NULL); + g_return_val_if_fail (uid != NULL, NULL); + + obj = calendar_object_find_in_list (cal, cal->todo, uid); + + if (obj == NULL) + obj = calendar_object_find_in_list (cal, cal->events, uid); + + return obj; +} + +iCalObject * +calendar_object_find_by_pilot (Calendar *cal, int pilot_id) +{ + GList *l; + + g_return_val_if_fail (cal != NULL, NULL); + + for (l = cal->events; l; l = l->next){ + iCalObject *obj = l->data; + + if (obj->pilot_id == pilot_id) + return obj; + } + + for (l = cal->todo; l; l = l->next){ + iCalObject *obj = l->data; + + if (obj->pilot_id == pilot_id) + return obj; + } + + return NULL; +} + +/* + * calendar_string_from_object: + * + * Returns the iCalObject @object armored around a vCalendar + * object as a string. + */ +char * +calendar_string_from_object (iCalObject *object) +{ + Calendar *cal; + char *str; + + g_return_val_if_fail (object != NULL, NULL); + + cal = calendar_new ("Temporal"); + calendar_add_object (cal, object); + str = calendar_get_as_vcal_string (cal); + calendar_remove_object (cal, object); + + calendar_destroy (cal); + + return str; +} -- cgit v1.2.3