aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/pcs/cal.c
diff options
context:
space:
mode:
authorFederico Mena Quintero <federico@helixcode.com>2000-02-08 15:08:29 +0800
committerArturo Espinosa <unammx@src.gnome.org>2000-02-08 15:08:29 +0800
commitcc670cb2ca319599eebac658f1164dbb64d70c65 (patch)
tree55dc72c7ea1b1582158e8aa55eedb9d18a4ab4e4 /calendar/pcs/cal.c
parentc02660b4081a84c9ad5749a931f5458f08f634d3 (diff)
downloadgsoc2013-evolution-cc670cb2ca319599eebac658f1164dbb64d70c65.tar
gsoc2013-evolution-cc670cb2ca319599eebac658f1164dbb64d70c65.tar.gz
gsoc2013-evolution-cc670cb2ca319599eebac658f1164dbb64d70c65.tar.bz2
gsoc2013-evolution-cc670cb2ca319599eebac658f1164dbb64d70c65.tar.lz
gsoc2013-evolution-cc670cb2ca319599eebac658f1164dbb64d70c65.tar.xz
gsoc2013-evolution-cc670cb2ca319599eebac658f1164dbb64d70c65.tar.zst
gsoc2013-evolution-cc670cb2ca319599eebac658f1164dbb64d70c65.zip
New struct to wrap instances of calendar objects for recurrencies and
2000-02-08 Federico Mena Quintero <federico@helixcode.com> * evolution-calendar.idl (CalObjInstance): New struct to wrap instances of calendar objects for recurrencies and alarms. (Cal::get_events_in_range): New method to get ocurring and recurring events by time range. * cal-backend.c (cal_backend_get_events_in_range): New function to get a list of event instances in a time range. (string_from_ical_object): New internal function. (cal_backend_get_object): Use string_from_ical_object() instead of doing everything ourselves. (cal_backend_get_events_in_range): New function to get a list of the events that occur or recur in a specified time range. * cal-client.c (cal_client_get_events_in_range): Implemented client-side function. * cal-util.h: * cal-util.c: New files with utilities and types common to the client and server parts. (CalObjInstance): New structure to hold an instance of an actual occurrence, recurrence, or alarm trigger of a calendar object. (cal_obj_instance_list_free): New function to free a list of calendar object instances. * cal.c (Cal_get_events_in_range): Implemented new method. * corba-cal.c (cal_repo_get_updated_objects): Free `str' with free(), not g_free(), since calendar_get_as_vcal_string() uses writeMemVObject(), which uses realloc(). Fixed in gnome-pim as well. svn path=/trunk/; revision=1693
Diffstat (limited to 'calendar/pcs/cal.c')
-rw-r--r--calendar/pcs/cal.c58
1 files changed, 58 insertions, 0 deletions
diff --git a/calendar/pcs/cal.c b/calendar/pcs/cal.c
index 1ce1d91716..664d9ef416 100644
--- a/calendar/pcs/cal.c
+++ b/calendar/pcs/cal.c
@@ -196,6 +196,63 @@ Cal_get_object (PortableServer_Servant servant,
}
}
+/* Cal::get_events_in_range method */
+static Evolution_Calendar_CalObjInstanceSeq *
+Cal_get_events_in_range (PortableServer_Servant servant,
+ const Evolution_Calendar_Time_t start,
+ const Evolution_Calendar_Time_t end,
+ CORBA_Environment *ev)
+{
+ Cal *cal;
+ CalPrivate *priv;
+ time_t t_start, t_end;
+ Evolution_Calendar_CalObjInstanceSeq *seq;
+ GList *elist, *l;
+ int n, i;
+
+ cal = CAL (bonobo_object_from_servant (servant));
+ priv = cal->priv;
+
+ t_start = (time_t) start;
+ t_end = (time_t) end;
+
+ if (t_start > t_end || t_start == -1 || t_end == -1) {
+ CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
+ ex_Evolution_Calendar_Cal_InvalidRange,
+ NULL);
+ return NULL;
+ }
+
+ /* Figure out the list and allocate the sequence */
+
+ elist = cal_backend_get_events_in_range (priv->backend, t_start, t_end);
+ n = g_list_length (elist);
+
+ seq = Evolution_Calendar_CalObjInstanceSeq__alloc ();
+ seq->_length = n;
+ seq->_buffer = CORBA_sequence_Evolution_Calendar_CalObjInstance_allocbuf (n);
+
+ /* Fill the sequence */
+
+ for (i = 0, l = elist; i < n; i++, l = l->next) {
+ CalObjInstance *icoi;
+ Evolution_Calendar_CalObjInstance *corba_icoi;
+
+ icoi = l->data;
+ corba_icoi = &seq->_buffer[i];
+
+ corba_icoi->calobj = CORBA_string_dup (icoi->calobj);
+ corba_icoi->start = icoi->start;
+ corba_icoi->end = icoi->end;
+ }
+
+ /* Done */
+
+ cal_obj_instance_list_free (elist);
+
+ return seq;
+}
+
/**
* cal_get_epv:
* @void:
@@ -212,6 +269,7 @@ cal_get_epv (void)
epv = g_new0 (POA_Evolution_Calendar_Cal__epv, 1);
epv->_get_uri = Cal_get_uri;
epv->get_object = Cal_get_object;
+ epv->get_events_in_range = Cal_get_events_in_range;
return epv;
}