diff options
author | Federico Mena Quintero <federico@helixcode.com> | 2000-02-08 15:08:29 +0800 |
---|---|---|
committer | Arturo Espinosa <unammx@src.gnome.org> | 2000-02-08 15:08:29 +0800 |
commit | cc670cb2ca319599eebac658f1164dbb64d70c65 (patch) | |
tree | 55dc72c7ea1b1582158e8aa55eedb9d18a4ab4e4 /calendar/pcs/cal.c | |
parent | c02660b4081a84c9ad5749a931f5458f08f634d3 (diff) | |
download | gsoc2013-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.c | 58 |
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; } |