diff options
author | JP Rosevear <jpr@helixcode.com> | 2000-09-20 06:48:47 +0800 |
---|---|---|
committer | JP Rosevear <jpr@src.gnome.org> | 2000-09-20 06:48:47 +0800 |
commit | 58b5fd92fc9f5419beabe82d38622aba064cc56e (patch) | |
tree | a8219b9cc9b1311466f9854b0fa673045250edb1 /calendar/pcs/cal.c | |
parent | 6820bb50e53b479997ae5a9616186301c333fad8 (diff) | |
download | gsoc2013-evolution-58b5fd92fc9f5419beabe82d38622aba064cc56e.tar.gz 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/pcs/cal.c')
-rw-r--r-- | calendar/pcs/cal.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/calendar/pcs/cal.c b/calendar/pcs/cal.c index 64eb29b023..cb302cf9be 100644 --- a/calendar/pcs/cal.c +++ b/calendar/pcs/cal.c @@ -278,6 +278,63 @@ Cal_get_uids (PortableServer_Servant servant, return seq; } +static Evolution_Calendar_CalObjChangeSeq * +build_change_seq (GList *changes) +{ + GList *l; + int n, i; + Evolution_Calendar_CalObjChangeSeq *seq; + + n = g_list_length (changes); + + seq = Evolution_Calendar_CalObjChangeSeq__alloc (); + CORBA_sequence_set_release (seq, TRUE); + seq->_length = n; + seq->_buffer = CORBA_sequence_Evolution_Calendar_CalObjChange_allocbuf (n); + + /* Fill the sequence */ + for (i = 0, l = changes; l; i++, l = l->next) { + CalObjChange *c; + Evolution_Calendar_CalObjChange *corba_c; + + c = l->data; + corba_c = &seq->_buffer[i]; + + corba_c->uid = CORBA_string_dup (c->uid); + corba_c->type = c->type; + } + + return seq; +} + +/* Cal::get_changed_uids method */ +static Evolution_Calendar_CalObjChangeSeq * +Cal_get_changed_uids (PortableServer_Servant servant, + Evolution_Calendar_CalObjType type, + Evolution_Calendar_Time_t since, + CORBA_Environment *ev) +{ + Cal *cal; + CalPrivate *priv; + GList *changes; + Evolution_Calendar_CalObjChangeSeq *seq; + int t; + time_t s; + + cal = CAL (bonobo_object_from_servant (servant)); + priv = cal->priv; + + t = uncorba_obj_type (type); + s = (time_t) since; + + changes = cal_backend_get_changed_uids (priv->backend, t, s); + seq = build_change_seq (changes); + + cal_obj_change_list_free (changes); + + return seq; +} + /* Cal::get_objects_in_range method */ static Evolution_Calendar_CalObjUIDSeq * Cal_get_objects_in_range (PortableServer_Servant servant, @@ -558,6 +615,7 @@ cal_get_epv (void) epv->get_n_objects = Cal_get_n_objects; epv->get_object = Cal_get_object; epv->get_uids = Cal_get_uids; + epv->get_changed_uids = Cal_get_changed_uids; epv->get_objects_in_range = Cal_get_objects_in_range; epv->get_alarms_in_range = Cal_get_alarms_in_range; epv->get_alarms_for_object = Cal_get_alarms_for_object; |