From ca082de77aec8542e913e1ce374dd849f51a4a27 Mon Sep 17 00:00:00 2001 From: Federico Mena Quintero Date: Wed, 9 Feb 2000 08:04:33 +0000 Subject: Added get_uids() method to get a list of UIDs based on object types. 2000-02-08 Federico Mena Quintero * evolution-calendar.idl (Cal): Added get_uids() method to get a list of UIDs based on object types. * cal-backend.c (cal_backend_get_uids): Implemented get_uids() in the backend. * cal.c (Cal_get_uids): Implemented get_uids() method. * cal-client.c (cal_client_get_uids): Implemented client-side function. * cal-util.c (cal_obj_instance_list_free): Doh. Free the list, not the last link. (cal_obj_uid_list_free): New function to free a list of UIDs. * GnomeCal.idl (Repository): Removed unused method get_object_by_id_list(). This is just for cleanup purposes and to remind me exactly of what needs to be moved over to evolution-calendar.idl. (Repository): Removed unused get_objects() method. * corba-cal.c (init_calendar_repo_class): Removed the unused get_objects method. * calobj.h (CalObjFindStatus): New status value enumeration for the find function. * calobj.c (ical_object_find_in_string): New function to parse a complete calendar and find a calendar object in it. This should be used instead ical_object_new_from_string() in the future. * evolution-calendar.idl (CalObjInstance): Added an uid field. Now the idea is that whenever calendar object strings are passed around, their UIDs are passed along with them so that the actual object can be pulled from the whole VCAL object using its UID to identify it. * cal-util.h (CalObjInstance): Added uid field. * cal-util.c (cal_obj_instance_list_free): Free the UIDs. * cal-backend.c (build_event_list): Store the object's UID in the instance structure. * cal.c (Cal_get_events_in_range): Copy the UID field to the CORBA structure. * cal-client.c (cal_client_get_events_in_range): Copy the UID field from the CORBA structure. * main.c (gnome_cal_file_menu): Removed unfinished html-month stuff. * Makefile.am (gnomecal_SOURCES): Removed html-month.c. * gnome-cal.c: #include "alarm.h" (mail_notify): Made static. * alarm.h: #include "calobj.h" * corba-cal-factory.h (init_corba_server): Fixed prototype. * quick-view.c (create_items_for_event): Made static. * gncal-todo.c (column_resized): Made static. * layout.c (find_index): Made static. svn path=/trunk/; revision=1699 --- calendar/cal-client/cal-client.c | 55 ++++++++++++++++++++++++++++++++++++++++ calendar/cal-client/cal-client.h | 2 ++ calendar/cal-client/cal-util.c | 25 +++++++++++++++++- calendar/cal-client/cal-util.h | 12 +++++++++ 4 files changed, 93 insertions(+), 1 deletion(-) (limited to 'calendar/cal-client') diff --git a/calendar/cal-client/cal-client.c b/calendar/cal-client/cal-client.c index af8b83db34..3e0659357d 100644 --- a/calendar/cal-client/cal-client.c +++ b/calendar/cal-client/cal-client.c @@ -472,6 +472,60 @@ cal_client_get_object (CalClient *client, const char *uid) return retval; } +GList * +cal_client_get_uids (CalClient *client, CalObjType type) +{ + CalClientPrivate *priv; + CORBA_Environment ev; + Evolution_Calendar_CalObjUIDSeq *seq; + int t; + GList *uids; + int i; + + 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 = (((type & CALOBJ_TYPE_EVENT) ? Evolution_Calendar_TYPE_EVENT : 0) + | ((type & CALOBJ_TYPE_TODO) ? Evolution_Calendar_TYPE_TODO : 0) + | ((type & CALOBJ_TYPE_JOURNAL) ? Evolution_Calendar_TYPE_JOURNAL : 0) + | ((type & CALOBJ_TYPE_OTHER) ? Evolution_Calendar_TYPE_OTHER : 0) + | ((type & CALOBJ_TYPE_ANY) ? Evolution_Calendar_TYPE_ANY : 0)); + + CORBA_exception_init (&ev); + + seq = Evolution_Calendar_Cal_get_uids (priv->cal, t, &ev); + if (ev._major != CORBA_NO_EXCEPTION) { + g_message ("cal_client_get_uids(): could not get the list of UIDs"); + CORBA_exception_free (&ev); + return NULL; + } + + /* Create the list */ + + uids = NULL; + + for (i = 0; i < seq->_length; i++) + uids = g_list_prepend (uids, g_strdup (seq->_buffer[i])); + + CORBA_free (seq); + + return uids; +} + +/** + * cal_client_get_events_in_range: + * @client: A calendar client. + * @start: Start time for query. + * @end: End time for query. + * + * Queries a calendar for the events that occur or recur in the specified range + * of time. + * + * Return value: A list of #CalObjInstance structures. + **/ GList * cal_client_get_events_in_range (CalClient *client, time_t start, time_t end) { @@ -513,6 +567,7 @@ cal_client_get_events_in_range (CalClient *client, time_t start, time_t end) corba_icoi = &seq->_buffer[i]; icoi = g_new (CalObjInstance, 1); + icoi->uid = g_strdup (corba_icoi->uid); icoi->calobj = g_strdup (corba_icoi->calobj); icoi->start = corba_icoi->start; icoi->end = corba_icoi->end; diff --git a/calendar/cal-client/cal-client.h b/calendar/cal-client/cal-client.h index e81ec8c13a..738d013f35 100644 --- a/calendar/cal-client/cal-client.h +++ b/calendar/cal-client/cal-client.h @@ -74,6 +74,8 @@ gboolean cal_client_load_calendar (CalClient *client, const char *str_uri); char *cal_client_get_object (CalClient *client, const char *uid); +GList *cal_client_get_uids (CalClient *client, CalObjType type); + GList *cal_client_get_events_in_range (CalClient *client, time_t start, time_t end); diff --git a/calendar/cal-client/cal-util.c b/calendar/cal-client/cal-util.c index 97f4724ed0..f3054af958 100644 --- a/calendar/cal-client/cal-util.c +++ b/calendar/cal-client/cal-util.c @@ -41,11 +41,34 @@ cal_obj_instance_list_free (GList *list) i = l->data; g_assert (i != NULL); + g_assert (i->uid != NULL); g_assert (i->calobj != NULL); + g_free (i->uid); g_free (i->calobj); g_free (i); } - g_list_free (l); + g_list_free (list); +} + +/** + * cal_obj_uid_list_free: + * @list: List of strings with unique identifiers. + * + * Frees a list of unique identifiers for calendar objects. + **/ +void +cal_obj_uid_list_free (GList *list) +{ + GList *l; + + for (l = list; l; l = l->next) { + char *uid; + + uid = l->data; + g_free (uid); + } + + g_list_free (list); } diff --git a/calendar/cal-client/cal-util.h b/calendar/cal-client/cal-util.h index 3d83890d0e..45be343a28 100644 --- a/calendar/cal-client/cal-util.h +++ b/calendar/cal-client/cal-util.h @@ -25,6 +25,7 @@ #include #include #include +#include "calobj.h" BEGIN_GNOME_DECLS @@ -34,6 +35,7 @@ BEGIN_GNOME_DECLS * recurrence, or an alarm trigger of a `real' calendar object. */ typedef struct { + char *uid; /* Identifier for the object wrapped in calobj */ char *calobj; /* String representation of calendar object */ time_t start; /* Start time of instance */ time_t end; /* End time of instance */ @@ -41,6 +43,16 @@ typedef struct { void cal_obj_instance_list_free (GList *list); +/* Used for multiple UID queries */ +typedef enum { + CALOBJ_TYPE_EVENT = 1 << 0, + CALOBJ_TYPE_TODO = 1 << 1, + CALOBJ_TYPE_JOURNAL = 1 << 2, + CALOBJ_TYPE_OTHER = 1 << 3, + CALOBJ_TYPE_ANY = 0x0f +} CalObjType; + +void cal_obj_uid_list_free (GList *list); -- cgit