aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/pcs
diff options
context:
space:
mode:
Diffstat (limited to 'calendar/pcs')
-rw-r--r--calendar/pcs/cal-backend-db.c11
-rw-r--r--calendar/pcs/cal-backend-file.c8
-rw-r--r--calendar/pcs/cal-backend.c26
-rw-r--r--calendar/pcs/cal-backend.h3
-rw-r--r--calendar/pcs/cal.c35
5 files changed, 83 insertions, 0 deletions
diff --git a/calendar/pcs/cal-backend-db.c b/calendar/pcs/cal-backend-db.c
index d4773760f8..785ba98440 100644
--- a/calendar/pcs/cal-backend-db.c
+++ b/calendar/pcs/cal-backend-db.c
@@ -77,6 +77,9 @@ static GList* cal_backend_db_get_objects_in_range (CalBackend *backend,
CalObjType type,
time_t start,
time_t end);
+static GList *cal_backend_db_get_free_busy (CalBackend *backend,
+ time_t start,
+ time_t end);
static GNOME_Evolution_Calendar_CalObjChangeSeq *cal_backend_db_get_changes (
CalBackend *backend, CalObjType type, const char *change_id);
@@ -157,6 +160,7 @@ cal_backend_db_class_init (CalBackendDBClass *klass)
backend_class->get_type_by_uid = cal_backend_db_get_type_by_uid;
backend_class->get_uids = cal_backend_db_get_uids;
backend_class->get_objects_in_range = cal_backend_db_get_objects_in_range;
+ backend_class->get_free_busy = cal_backend_db_get_free_busy;
backend_class->get_changes = cal_backend_db_get_changes;
backend_class->get_alarms_in_range = cal_backend_db_get_alarms_in_range;
backend_class->get_alarms_for_object = cal_backend_db_get_alarms_for_object;
@@ -934,6 +938,13 @@ cal_backend_db_get_objects_in_range (CalBackend *backend,
return list;
}
+/* get_free_busy handler for the DB backend */
+static GList *
+cal_backend_db_get_free_busy (CalBackend *backend, time_t start, time_t end)
+{
+ return NULL;
+}
+
/* get_changes handler for the DB backend */
static GNOME_Evolution_Calendar_CalObjChangeSeq *
cal_backend_db_get_changes (CalBackend *backend, CalObjType type, const char *change_id)
diff --git a/calendar/pcs/cal-backend-file.c b/calendar/pcs/cal-backend-file.c
index 1267f44e3f..d8951571f8 100644
--- a/calendar/pcs/cal-backend-file.c
+++ b/calendar/pcs/cal-backend-file.c
@@ -77,6 +77,7 @@ static CalObjType cal_backend_file_get_type_by_uid (CalBackend *backend, const c
static GList *cal_backend_file_get_uids (CalBackend *backend, CalObjType type);
static GList *cal_backend_file_get_objects_in_range (CalBackend *backend, CalObjType type,
time_t start, time_t end);
+static GList *cal_backend_file_get_free_busy (CalBackend *backend, time_t start, time_t end);
static GNOME_Evolution_Calendar_CalObjChangeSeq *cal_backend_file_get_changes (
CalBackend *backend, CalObjType type, const char *change_id);
@@ -150,6 +151,7 @@ cal_backend_file_class_init (CalBackendFileClass *class)
backend_class->get_type_by_uid = cal_backend_file_get_type_by_uid;
backend_class->get_uids = cal_backend_file_get_uids;
backend_class->get_objects_in_range = cal_backend_file_get_objects_in_range;
+ backend_class->get_free_busy = cal_backend_file_get_free_busy;
backend_class->get_changes = cal_backend_file_get_changes;
backend_class->get_alarms_in_range = cal_backend_file_get_alarms_in_range;
backend_class->get_alarms_for_object = cal_backend_file_get_alarms_for_object;
@@ -976,6 +978,12 @@ cal_backend_file_get_objects_in_range (CalBackend *backend, CalObjType type,
return event_list;
}
+/* Get_free_busy handler for the file backend */
+static GList *
+cal_backend_file_get_free_busy (CalBackend *backend, time_t start, time_t end)
+{
+ return NULL;
+}
typedef struct
{
diff --git a/calendar/pcs/cal-backend.c b/calendar/pcs/cal-backend.c
index 350e6468e4..d72a6fe5e6 100644
--- a/calendar/pcs/cal-backend.c
+++ b/calendar/pcs/cal-backend.c
@@ -134,11 +134,13 @@ cal_backend_class_init (CalBackendClass *class)
class->get_uri = NULL;
class->add_cal = NULL;
class->open = NULL;
+ class->is_loaded = NULL;
class->get_n_objects = NULL;
class->get_object = NULL;
class->get_type_by_uid = NULL;
class->get_uids = NULL;
class->get_objects_in_range = NULL;
+ class->get_free_busy = NULL;
class->get_changes = NULL;
class->get_alarms_in_range = NULL;
class->get_alarms_for_object = NULL;
@@ -326,6 +328,30 @@ cal_backend_get_objects_in_range (CalBackend *backend, CalObjType type,
}
/**
+ * cal_backend_get_free_busy:
+ * @backend: A calendar backend.
+ * @start: Start time for query.
+ * @end: End time for query.
+ *
+ * Builds a list of unique identifiers corresponding to free/busy calendar
+ * objects of the that occur or recur within the specified time range.
+ *
+ * Return value: A list of UID strings. The list should be freed using the
+ * cal_obj_uid_list_free() function.
+ **/
+GList *
+cal_backend_get_free_busy (CalBackend *backend, time_t start, time_t end)
+{
+ g_return_val_if_fail (backend != NULL, NULL);
+ g_return_val_if_fail (IS_CAL_BACKEND (backend), NULL);
+ g_return_val_if_fail (start != -1 && end != -1, NULL);
+ g_return_val_if_fail (start <= end, NULL);
+
+ g_assert (CLASS (backend)->get_free_busy != NULL);
+ return (* CLASS (backend)->get_free_busy) (backend, start, end);
+}
+
+/**
* cal_backend_get_changes:
* @backend: A calendar backend
* @type: Bitmask with types of objects to return.
diff --git a/calendar/pcs/cal-backend.h b/calendar/pcs/cal-backend.h
index dab06b21e8..35cddaa492 100644
--- a/calendar/pcs/cal-backend.h
+++ b/calendar/pcs/cal-backend.h
@@ -88,6 +88,7 @@ struct _CalBackendClass {
GList *(* get_objects_in_range) (CalBackend *backend, CalObjType type,
time_t start, time_t end);
+ GList *(* get_free_busy) (CalBackend *backend, time_t start, time_t end);
/* Change related virtual methods */
GNOME_Evolution_Calendar_CalObjChangeSeq * (* get_changes) (
@@ -125,6 +126,8 @@ GList *cal_backend_get_uids (CalBackend *backend, CalObjType type);
GList *cal_backend_get_objects_in_range (CalBackend *backend, CalObjType type,
time_t start, time_t end);
+GList *cal_backend_get_free_busy (CalBackend *backend, time_t start, time_t end);
+
GNOME_Evolution_Calendar_CalObjChangeSeq * cal_backend_get_changes (
CalBackend *backend, CalObjType type, const char *change_id);
diff --git a/calendar/pcs/cal.c b/calendar/pcs/cal.c
index 42ccbf3cee..3bcc0c1f6b 100644
--- a/calendar/pcs/cal.c
+++ b/calendar/pcs/cal.c
@@ -227,6 +227,40 @@ impl_Cal_get_objects_in_range (PortableServer_Servant servant,
return seq;
}
+/* Cal::get_free_busy method */
+static GNOME_Evolution_Calendar_CalObjUIDSeq *
+impl_Cal_get_free_busy (PortableServer_Servant servant,
+ GNOME_Evolution_Calendar_Time_t start,
+ GNOME_Evolution_Calendar_Time_t end,
+ CORBA_Environment *ev)
+{
+ Cal *cal;
+ CalPrivate *priv;
+ time_t t_start, t_end;
+ GNOME_Evolution_Calendar_CalObjUIDSeq *seq;
+ GList *uids;
+
+ 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_GNOME_Evolution_Calendar_Cal_InvalidRange,
+ NULL);
+ return NULL;
+ }
+
+ uids = cal_backend_get_free_busy (priv->backend, t_start, t_end);
+ seq = build_uid_seq (uids);
+
+ cal_obj_uid_list_free (uids);
+
+ return seq;
+}
+
/* Cal::get_alarms_in_range method */
static GNOME_Evolution_Calendar_CalComponentAlarmsSeq *
impl_Cal_get_alarms_in_range (PortableServer_Servant servant,
@@ -503,6 +537,7 @@ cal_class_init (CalClass *klass)
epv->getUIDs = impl_Cal_get_uids;
epv->getChanges = impl_Cal_get_changes;
epv->getObjectsInRange = impl_Cal_get_objects_in_range;
+ epv->getFreeBusy = impl_Cal_get_free_busy;
epv->getAlarmsInRange = impl_Cal_get_alarms_in_range;
epv->getAlarmsForObject = impl_Cal_get_alarms_for_object;
epv->updateObject = impl_Cal_update_object;