From ca1c3593bf873dcd03a8974c0785b1f6ffdbd140 Mon Sep 17 00:00:00 2001 From: JP Rosevear Date: Wed, 6 Dec 2000 20:28:10 +0000 Subject: Update so as not to conflict with calendar (next_changed_item): update to 2000-12-06 JP Rosevear * conduits/calendar/calendar-conduit.c (map_name): Update so as not to conflict with calendar (next_changed_item): update to use CalClientChange instead of CalObjChange (compute_status): ditto (pre_sync): ditto (for_each_modified): since we now have the cal component we can call local_record_from_comp directly * conduits/todo/todo-conduit.c: same as above * pcs/cal-backend.c: Remove much logging cruft (cal_backend_compute_changes): Calculate the changes based on the hashed database (cal_backend_get_changes): call cal_backend_compute_changes (cal_backend_compute_changes_foreach_key): hash callback for calculating deletions * pcs/cal-backend.h: update protype, remove logging cruft from object * pcs/cal.c (build_change_seq): dup the calobj rather than the uid now (Cal_get_changes): rename from Cal_get_changed_uids (cal_get_epv): reflect name change in epv * cal-util/cal-util.c (cal_obj_change_list_free): update assertion * cal-util/cal-util.h: CalObjChange now returns the entire ical component, update the change types. This should all go away shortly * idl/evolution-calendar.idl: getChangedUIds -> getChanges. CalObjChange now contains the calobj rather than the uid, update the change types * cal-client/cal-client.c (cal_client_get_changes): rename from cal_client_get_changed_uids to make idl and addressbook * cal-client/cal-client.h: Update prototype * cal-client/cal-client.c (build_change_list): Build a list of CalClientChange instead of CalObjChange * cal-client/cal-client-types.c (cal_client_change_list_free): Free a glist of CalClientChanges * cal-client/cal-client-types.h: New file. Declarations for CalClientChange. * cal-client/Makefile.am: Build new files svn path=/trunk/; revision=6822 --- calendar/cal-client/.cvsignore | 6 ++-- calendar/cal-client/Makefile.am | 2 ++ calendar/cal-client/cal-client-types.c | 52 ++++++++++++++++++++++++++++++++++ calendar/cal-client/cal-client-types.h | 50 ++++++++++++++++++++++++++++++++ calendar/cal-client/cal-client.c | 43 ++++++++++++++-------------- calendar/cal-client/cal-client.h | 2 +- 6 files changed, 129 insertions(+), 26 deletions(-) create mode 100644 calendar/cal-client/cal-client-types.c create mode 100644 calendar/cal-client/cal-client-types.h (limited to 'calendar/cal-client') diff --git a/calendar/cal-client/.cvsignore b/calendar/cal-client/.cvsignore index e74f322903..1537e6e01d 100644 --- a/calendar/cal-client/.cvsignore +++ b/calendar/cal-client/.cvsignore @@ -10,8 +10,6 @@ evolution-calendar.h evolution-calendar-common.lo evolution-calendar-skels.lo evolution-calendar-stubs.lo -cal-client.lo -cal-listener.lo -libcal-client.la +*.lo +*.la client-test -libcal-client-static.la diff --git a/calendar/cal-client/Makefile.am b/calendar/cal-client/Makefile.am index dd5f3e60d2..6663baeecd 100644 --- a/calendar/cal-client/Makefile.am +++ b/calendar/cal-client/Makefile.am @@ -34,11 +34,13 @@ libcal_clientincludedir = $(includedir)/evolution/cal-client libcal_client_la_SOURCES = \ $(CORBA_GENERATED) \ + cal-client-types.c \ cal-client.c \ cal-listener.c \ cal-listener.h libcal_clientinclude_HEADERS = \ + cal-client-types.h \ cal-client.h diff --git a/calendar/cal-client/cal-client-types.c b/calendar/cal-client/cal-client-types.c new file mode 100644 index 0000000000..98da8b8a6f --- /dev/null +++ b/calendar/cal-client/cal-client-types.c @@ -0,0 +1,52 @@ +/* Evolution calendar utilities and types + * + * Copyright (C) 2000 Helix Code, Inc. + * + * Authors: Federico Mena-Quintero + * JP Rosevear + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + */ + +#include +#include +#include "cal-client-types.h" + + + +/** + * cal_client_change_list_free: + * @list: List of #CalClientChange structures. + * + * Frees a list of #CalClientChange structures. + **/ +void +cal_client_change_list_free (GList *list) +{ + CalClientChange *c; + GList *l; + + for (l = list; l; l = l->next) { + c = l->data; + + g_assert (c != NULL); + g_assert (c->comp != NULL); + + gtk_object_unref (GTK_OBJECT (c->comp)); + g_free (c); + } + + g_list_free (list); +} diff --git a/calendar/cal-client/cal-client-types.h b/calendar/cal-client/cal-client-types.h new file mode 100644 index 0000000000..5c017458ad --- /dev/null +++ b/calendar/cal-client/cal-client-types.h @@ -0,0 +1,50 @@ +/* Evolution calendar utilities and types + * + * Copyright (C) 2000 Helix Code, Inc. + * + * Authors: Federico Mena-Quintero + * JP Rosevear + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef CAL_CLIENT_TYPES_H +#define CAL_CLIENT_TYPES_H + +#include +#include + +BEGIN_GNOME_DECLS + + + +typedef enum { + CAL_CLIENT_CHANGE_ADDED = 1 << 0, + CAL_CLIENT_CHANGE_MODIFIED = 1 << 1, + CAL_CLIENT_CHANGE_DELETED = 1 << 2 +} CalClientChangeType; + +typedef struct +{ + CalComponent *comp; + CalClientChangeType type; +} CalClientChange; + +void cal_client_change_list_free (GList *list); + +END_GNOME_DECLS + +#endif + diff --git a/calendar/cal-client/cal-client.c b/calendar/cal-client/cal-client.c index 1eca55a2d3..99dd96710b 100644 --- a/calendar/cal-client/cal-client.c +++ b/calendar/cal-client/cal-client.c @@ -25,6 +25,7 @@ #include #include +#include "cal-client-types.h" #include "cal-client.h" #include "cal-listener.h" @@ -733,44 +734,44 @@ cal_client_get_uids (CalClient *client, CalObjType type) return uids; } -/* Builds a GList of CalObjChange structures from the CORBA sequence */ +/* Builds a GList of CalClientChange structures from the CORBA sequence */ static GList * build_change_list (GNOME_Evolution_Calendar_CalObjChangeSeq *seq) { - GList *list; + GList *list = NULL; + icalcomponent *icalcomp; int i; /* Create the list in reverse order */ - list = NULL; for (i = 0; i < seq->_length; i++) { GNOME_Evolution_Calendar_CalObjChange *corba_coc; - CalObjChange *coc; + CalClientChange *ccc; corba_coc = &seq->_buffer[i]; - coc = g_new (CalObjChange, 1); + ccc = g_new (CalClientChange, 1); + + icalcomp = icalparser_parse_string (corba_coc->calobj); + if (!icalcomp) + continue; - coc->uid = g_strdup (corba_coc->uid); - coc->type = corba_coc->type; + ccc->comp = cal_component_new (); + if (!cal_component_set_icalcomponent (ccc->comp, icalcomp)) { + icalcomponent_free (icalcomp); + gtk_object_unref (GTK_OBJECT (ccc->comp)); + continue; + } + ccc->type = corba_coc->type; - list = g_list_prepend (list, coc); + list = g_list_prepend (list, ccc); } list = g_list_reverse (list); + return list; } -/** - * cal_client_get_changed_uids: - * @client: A calendar client. - * @type: Bitmask with types of objects to return. - * - * Queries a calendar for a list of unique identifiers corresponding to calendar - * objects whose type matches one of the types specified in the @type flags. - * - * Return value: A list of strings that are the sought UIDs. - **/ GList * -cal_client_get_changed_uids (CalClient *client, CalObjType type, time_t since) +cal_client_get_changes (CalClient *client, CalObjType type, const char *change_id) { CalClientPrivate *priv; CORBA_Environment ev; @@ -787,9 +788,9 @@ cal_client_get_changed_uids (CalClient *client, CalObjType type, time_t since) t = corba_obj_type (type); CORBA_exception_init (&ev); - seq = GNOME_Evolution_Calendar_Cal_getChangedUIds (priv->cal, t, since, &ev); + seq = GNOME_Evolution_Calendar_Cal_getChanges (priv->cal, t, change_id, &ev); if (ev._major != CORBA_NO_EXCEPTION) { - g_message ("cal_client_get_changed_uids(): could not get the list of changes"); + g_message ("cal_client_get_changes(): could not get the list of changes"); CORBA_exception_free (&ev); return NULL; } diff --git a/calendar/cal-client/cal-client.h b/calendar/cal-client/cal-client.h index fd40c424d9..b30c0a7d32 100644 --- a/calendar/cal-client/cal-client.h +++ b/calendar/cal-client/cal-client.h @@ -93,7 +93,7 @@ CalClientGetStatus cal_client_get_object (CalClient *client, CalComponent **comp); GList *cal_client_get_uids (CalClient *client, CalObjType type); -GList *cal_client_get_changed_uids (CalClient *client, CalObjType type, time_t since); +GList *cal_client_get_changes (CalClient *client, CalObjType type, const char *change_id); GList *cal_client_get_objects_in_range (CalClient *client, CalObjType type, time_t start, time_t end); -- cgit v1.2.3