aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/cal-client
diff options
context:
space:
mode:
Diffstat (limited to 'calendar/cal-client')
-rw-r--r--calendar/cal-client/.cvsignore6
-rw-r--r--calendar/cal-client/Makefile.am2
-rw-r--r--calendar/cal-client/cal-client-types.c52
-rw-r--r--calendar/cal-client/cal-client-types.h50
-rw-r--r--calendar/cal-client/cal-client.c43
-rw-r--r--calendar/cal-client/cal-client.h2
6 files changed, 129 insertions, 26 deletions
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 <federico@helixcode.com>
+ * JP Rosevear <jpr@helixcode.com>
+ *
+ * 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 <config.h>
+#include <stdlib.h>
+#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 <federico@helixcode.com>
+ * JP Rosevear <jpr@helixcode.com>
+ *
+ * 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 <libgnome/gnome-defs.h>
+#include <cal-util/cal-component.h>
+
+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 <gtk/gtksignal.h>
#include <liboaf/liboaf.h>
+#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);