aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/cal-client
diff options
context:
space:
mode:
authorJP Rosevear <jpr@helixcode.com>2000-09-20 06:48:47 +0800
committerJP Rosevear <jpr@src.gnome.org>2000-09-20 06:48:47 +0800
commit58b5fd92fc9f5419beabe82d38622aba064cc56e (patch)
treea8219b9cc9b1311466f9854b0fa673045250edb1 /calendar/cal-client
parent6820bb50e53b479997ae5a9616186301c333fad8 (diff)
downloadgsoc2013-evolution-58b5fd92fc9f5419beabe82d38622aba064cc56e.tar
gsoc2013-evolution-58b5fd92fc9f5419beabe82d38622aba064cc56e.tar.gz
gsoc2013-evolution-58b5fd92fc9f5419beabe82d38622aba064cc56e.tar.bz2
gsoc2013-evolution-58b5fd92fc9f5419beabe82d38622aba064cc56e.tar.lz
gsoc2013-evolution-58b5fd92fc9f5419beabe82d38622aba064cc56e.tar.xz
gsoc2013-evolution-58b5fd92fc9f5419beabe82d38622aba064cc56e.tar.zst
gsoc2013-evolution-58b5fd92fc9f5419beabe82d38622aba064cc56e.zip
Add some other cases where a slow sync is in order (pre_sync): Pre load
2000-09-19 JP Rosevear <jpr@helixcode.com> * conduits/todo/todo-conduit.c (check_for_slow_setting): Add some other cases where a slow sync is in order (pre_sync): Pre load the uids, the map and the add/mod/del lists (match_record): Use the map hash to match records (iterate): Iterate using the pre-loaded uid list (iterate_specific): Iterate using the add/mod/del lists (purge): Delete all entries in the del list (set_status): Set status by adding to an appropriate list (set_pilot_id): Set pilot_id by updating map hash * conduits/todo/todo-conduit.h: Add lists for added, modified and deleted objects * conduits/todo/todo-conduit.c (map_name): Get the pilot_id->uid map file name (map_sax_start_element): SAX handler to extract a pilot_id->uid mapping (map_sax_parse): Parse the given file and build a pilot_id->uid hash (map_write_foreach): Write out individual mapping elements (map_write): Write out the pilot_id->uid mapping (start_calendar_server_cb): Rename from gnome_calendar_load_cb * conduits/todo/todo-conduit-config.h: Rename pilotID to pilot_id * conduits/todo/e-todo.conduit.in: A little renaming * conduits/todo/Makefile.am: Fix build slightly * pcs/cal.c (build_change_seq): Build a corba sequence out of a list of CalObjChanges (Cal_get_objects_in_range): Implement new corba function * pcs/cal-backend.c (cal_backend_init): Intiliaze to NULL (cal_backend_load): Track the uri so we can write the log file to the same place (cal_backend_log_name): Figure out the log filename/path based on the calendar uri (cal_backend_set_node_timet): Set an xml node property value from a time_t (cal_backend_log_entry): Adds a log entry to list waiting to be written out (cal_backend_log_sync): Syncs the log entries to disk (cal_backend_log_sax_start_element): SAX callback for reading in log entries (cal_backend_log_sax_end_element): ditto (cal_backend_log_sax_parse): Main SAX parser call to parse the log file looking for particular log entries and creating a CalObjChange hash with the last change for each object (cal_backend_get_log_entries): Returns a hash of objects of a given type changed since the given time (cal_backend_update_object): Add appropriate log entries (cal_backend_remove_object): ditto (cal_backend_get_changed_uids): Implement new idl interface call (cal_backend_foreach_changed): Convert CalObjChange hash into a list * pcs/cal-backend-imc.[hc]: Remove crufty files * pcs/cal-backend-file.c (cal_backend_file_get_type_by_uid): New function that returns the CalObjType for a uid. * cal-client/cal-client.h: Update prototypes. * cal-client/cal-client.c (build_change_list): Build a list of CalObjChange items from a corba sequence. (cal_client_get_changed_uids): New accessor method for the similarly named addition to the idl file. * cal-util/cal-util.h: Update prototypes and add CalObjChangeType enum. * cal-util/cal-util.c (cal_obj_change_list_free): New utility method to free a list of CalObjChange objects. * idl/evolution-calendar.idl: Add get_changed_uids method and associated types. svn path=/trunk/; revision=5512
Diffstat (limited to 'calendar/cal-client')
-rw-r--r--calendar/cal-client/cal-client.c70
-rw-r--r--calendar/cal-client/cal-client.h1
2 files changed, 71 insertions, 0 deletions
diff --git a/calendar/cal-client/cal-client.c b/calendar/cal-client/cal-client.c
index 65c0c4aea4..7b5f248d85 100644
--- a/calendar/cal-client/cal-client.c
+++ b/calendar/cal-client/cal-client.c
@@ -1,3 +1,4 @@
+
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/* Evolution calendar client
*
@@ -800,6 +801,75 @@ cal_client_get_uids (CalClient *client, CalObjType type)
return uids;
}
+/* Builds a GList of CalObjChange structures from the CORBA sequence */
+static GList *
+build_change_list (Evolution_Calendar_CalObjChangeSeq *seq)
+{
+ GList *list;
+ int i;
+
+ /* Create the list in reverse order */
+ list = NULL;
+ for (i = 0; i < seq->_length; i++) {
+ Evolution_Calendar_CalObjChange *corba_coc;
+ CalObjChange *coc;
+
+ corba_coc = &seq->_buffer[i];
+ coc = g_new (CalObjChange, 1);
+
+ coc->uid = g_strdup (corba_coc->uid);
+ coc->type = corba_coc->type;
+
+ list = g_list_prepend (list, coc);
+ }
+
+ 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)
+{
+ CalClientPrivate *priv;
+ CORBA_Environment ev;
+ Evolution_Calendar_CalObjChangeSeq *seq;
+ int t;
+ GList *changes;
+
+ g_return_val_if_fail (client != NULL, NULL);
+ g_return_val_if_fail (IS_CAL_CLIENT (client), NULL);
+
+ priv = client->priv;
+ g_return_val_if_fail (priv->load_state == LOAD_STATE_LOADED, NULL);
+
+ t = corba_obj_type (type);
+ CORBA_exception_init (&ev);
+
+ seq = Evolution_Calendar_Cal_get_changed_uids (priv->cal, t, since, &ev);
+ if (ev._major != CORBA_NO_EXCEPTION) {
+ g_message ("cal_client_get_changed_uids(): could not get the list of changes");
+ CORBA_exception_free (&ev);
+ return NULL;
+ }
+
+ CORBA_exception_free (&ev);
+
+ changes = build_change_list (seq);
+ CORBA_free (seq);
+
+ return changes;
+}
+
/* FIXME: Not used? */
#if 0
/* Builds a GList of CalObjInstance structures from the CORBA sequence */
diff --git a/calendar/cal-client/cal-client.h b/calendar/cal-client/cal-client.h
index 6747c7488e..9853c63e2c 100644
--- a/calendar/cal-client/cal-client.h
+++ b/calendar/cal-client/cal-client.h
@@ -101,6 +101,7 @@ void cal_client_update_pilot_id (CalClient *client, char *uid,
unsigned long pilot_status);
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_objects_in_range (CalClient *client, CalObjType type,
time_t start, time_t end);