aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/gui/corba-cal.c
diff options
context:
space:
mode:
Diffstat (limited to 'calendar/gui/corba-cal.c')
-rw-r--r--calendar/gui/corba-cal.c186
1 files changed, 148 insertions, 38 deletions
diff --git a/calendar/gui/corba-cal.c b/calendar/gui/corba-cal.c
index 759b989893..a547c2dc2b 100644
--- a/calendar/gui/corba-cal.c
+++ b/calendar/gui/corba-cal.c
@@ -9,7 +9,7 @@
#include <stdio.h>
#include <unistd.h>
#include <sys/stat.h>
-#include "calendar.h"
+/*#include "calendar.h" DELETE */
#include "gnome-cal.h"
#include "alarm.h"
#include "cal-util/timeutil.h"
@@ -19,6 +19,10 @@
#include "corba-cal-factory.h"
#include "corba-cal.h"
+static iCalObject *
+calendar_object_find_by_pilot (GnomeCalendar *cal, int pilot_id);
+
+
typedef struct {
POA_GNOME_Calendar_Repository servant;
GnomeCalendar *calendar;
@@ -50,10 +54,15 @@ cal_repo_get_object (PortableServer_Servant servant,
{
GnomeCalendar *gcal = gnomecal_from_servant (servant);
iCalObject *obj;
+ char *obj_string;
char *buffer;
CORBA_char *ret;
- obj = calendar_object_find_event (gcal->cal, uid);
+ /*obj = calendar_object_find_event (gcal->cal, uid); DELETE */
+ obj_string = cal_client_get_object (gcal->calc, uid);
+ obj = string_to_ical_object (obj_string);
+ free (obj_string);
+
if (obj == NULL){
GNOME_Calendar_Repository_NotFound *exn;
@@ -66,13 +75,16 @@ cal_repo_get_object (PortableServer_Servant servant,
return NULL;
}
- buffer = calendar_string_from_object (obj);
+ /* buffer = calendar_string_from_object (obj); DELETE */
+ buffer = ical_object_to_string (obj);
ret = CORBA_string_dup (buffer);
free (buffer);
return ret;
}
+
+
static CORBA_char *
cal_repo_get_object_by_pilot_id (PortableServer_Servant servant,
CORBA_long pilot_id,
@@ -83,7 +95,7 @@ cal_repo_get_object_by_pilot_id (PortableServer_Servant servant,
char *buffer;
CORBA_char *ret;
- obj = calendar_object_find_by_pilot (gcal->cal, pilot_id);
+ obj = calendar_object_find_by_pilot (gcal, pilot_id);
if (obj == NULL){
GNOME_Calendar_Repository_NotFound *exn;
@@ -94,7 +106,8 @@ cal_repo_get_object_by_pilot_id (PortableServer_Servant servant,
return NULL;
}
- buffer = calendar_string_from_object (obj);
+ /* buffer = calendar_string_from_object (obj); DELETE */
+ buffer = ical_object_to_string (obj);
ret = CORBA_string_dup (buffer);
free (buffer);
@@ -102,6 +115,40 @@ cal_repo_get_object_by_pilot_id (PortableServer_Servant servant,
}
+/* where should this go? FIX ME */
+static iCalObject *
+calendar_object_find_by_pilot (GnomeCalendar *cal, int pilot_id)
+{
+ GList *l, *uids;
+
+ g_return_val_if_fail (cal != NULL, NULL);
+
+ uids = cal_client_get_uids (cal->calc,
+ CALOBJ_TYPE_EVENT |
+ CALOBJ_TYPE_TODO |
+ CALOBJ_TYPE_JOURNAL |
+ CALOBJ_TYPE_OTHER |
+ CALOBJ_TYPE_ANY);
+ for (l = uids; l; l = l->next){
+ char *obj_string = cal_client_get_object (cal->calc, l->data);
+ iCalObject *obj = string_to_ical_object (obj_string);
+
+ if (obj->pilot_id == pilot_id)
+ return obj;
+ }
+
+ /* DELETE
+ for (l = cal->todo; l; l = l->next){
+ iCalObject *obj = l->data;
+
+ if (obj->pilot_id == pilot_id)
+ return obj;
+ }
+ */
+
+ return NULL;
+}
+
static CORBA_char *
cal_repo_get_id_from_pilot_id (PortableServer_Servant servant,
CORBA_long pilot_id,
@@ -110,7 +157,7 @@ cal_repo_get_id_from_pilot_id (PortableServer_Servant servant,
GnomeCalendar *gcal = gnomecal_from_servant (servant);
iCalObject *obj;
- obj = calendar_object_find_by_pilot (gcal->cal, pilot_id);
+ obj = calendar_object_find_by_pilot (gcal, pilot_id);
if (obj == NULL){
GNOME_Calendar_Repository_NotFound *exn;
@@ -131,15 +178,21 @@ cal_repo_delete_object (PortableServer_Servant servant,
{
GnomeCalendar *gcal = gnomecal_from_servant (servant);
iCalObject *obj;
+ char *obj_string;
+
+ /* obj = calendar_object_find_event (gcal->cal, uid); */
+ obj_string = cal_client_get_object (gcal->calc, uid);
+ obj = string_to_ical_object (obj_string);
+ free (obj_string);
- obj = calendar_object_find_event (gcal->cal, uid);
if (obj == NULL){
GNOME_Calendar_Repository_NotFound *exn;
exn = GNOME_Calendar_Repository_NotFound__alloc();
CORBA_exception_set (ev,
CORBA_USER_EXCEPTION,
- ex_GNOME_Calendar_Repository_NotFound, exn);
+ ex_GNOME_Calendar_Repository_NotFound,
+ exn);
return;
}
@@ -153,17 +206,29 @@ cal_repo_update_object (PortableServer_Servant servant,
CORBA_Environment *ev)
{
GnomeCalendar *gcal = gnomecal_from_servant (servant);
- iCalObject *obj;
+ /* iCalObject *obj; char *obj_string; */
iCalObject *new_object;
+ char *new_object_string;
new_object = ical_object_new_from_string (vcalendar_object);
-
- obj = calendar_object_find_event (gcal->cal, uid);
+
+#if 0 /* it looks like this is taken care of in cal_client_update_object? */
+ /* DELETE */
+ /* obj = calendar_object_find_event (gcal->cal, uid); DELETE */
+ obj_string = cal_client_get_object (gcal->calc, uid);
+ obj = string_to_ical_object (obj_string);
+ free (obj_string);
+
if (obj != NULL){
- calendar_remove_object (gcal->cal, obj);
+ /* calendar_remove_object (gcal->cal, obj); DELETE */
+ cal_client_remove_object (gcal->calc, uid);
}
+#endif /* 0 */
- calendar_add_object (gcal->cal, new_object);
+ /* calendar_add_object (gcal->cal, new_object); DELETE */
+ new_object_string = ical_object_to_string (new_object);
+ cal_client_update_object (gcal->calc, uid, new_object_string);
+ free (new_object_string);
}
static void
@@ -175,8 +240,13 @@ cal_repo_update_pilot_id (PortableServer_Servant servant,
{
GnomeCalendar *gcal = gnomecal_from_servant (servant);
iCalObject *obj;
+ char *obj_string;
- obj = calendar_object_find_event (gcal->cal, uid);
+ /* obj = calendar_object_find_event (gcal->cal, uid); DELETE */
+ obj_string = cal_client_get_object (gcal->calc, uid);
+ obj = string_to_ical_object (obj_string);
+ free (obj_string);
+
if (obj == NULL){
GNOME_Calendar_Repository_NotFound *exn;
@@ -193,6 +263,13 @@ cal_repo_update_pilot_id (PortableServer_Servant servant,
obj->pilot_status = pilot_status;
}
+
+static void list_free_string (gpointer data, gpointer user_data)
+{
+ free (data);
+}
+
+
static CORBA_long
cal_repo_get_number_of_objects (PortableServer_Servant servant,
GNOME_Calendar_Repository_RecordStatus record_status,
@@ -200,11 +277,17 @@ cal_repo_get_number_of_objects (PortableServer_Servant servant,
{
GnomeCalendar *gcal = gnomecal_from_servant (servant);
CORBA_long res;
- GList *l;
iCalPilotState real_record_status;
+ GList *l, *uids;
if (record_status == GNOME_Calendar_Repository_ANY) {
- return g_list_length(gcal->cal->events);
+ /* return g_list_length(gcal->cal->events); DELETE */
+ GList *uids = cal_client_get_uids (gcal->calc,
+ CALOBJ_TYPE_EVENT);
+ res = g_list_length (uids);
+ g_list_foreach (uids, list_free_string, NULL);
+ g_list_free (uids);
+ return res;
}
switch (record_status) {
@@ -221,13 +304,17 @@ cal_repo_get_number_of_objects (PortableServer_Servant servant,
res = 0;
- for (l = gcal->cal->events; l; l = l->next){
- iCalObject *obj = l->data;
+ uids = cal_client_get_uids (gcal->calc, CALOBJ_TYPE_EVENT);
+ for (l = uids; l; l = l->next){
+ char *obj_string = cal_client_get_object (gcal->calc, l->data);
+ iCalObject *obj = string_to_ical_object (obj_string);
if (obj->pilot_status == real_record_status)
res ++;
+ g_free (l->data);
}
-
+ g_list_free (uids);
+
return res;
}
@@ -236,20 +323,24 @@ cal_repo_get_object_id_list(PortableServer_Servant servant,
CORBA_Environment *ev)
{
GnomeCalendar *gcal = gnomecal_from_servant (servant);
- GList *l;
+ GList *l, *uids;
GNOME_Calendar_Repository_String_Sequence *result;
int counter;
+
+ uids = cal_client_get_uids (gcal->calc, CALOBJ_TYPE_EVENT);
result = GNOME_Calendar_Repository_String_Sequence__alloc();
- result->_length = g_list_length(gcal->cal->events);
- result->_buffer = CORBA_sequence_CORBA_string_allocbuf(result->_length);
+ result->_length = g_list_length (uids);
+ result->_buffer =
+ CORBA_sequence_CORBA_string_allocbuf(result->_length);
counter = 0;
- for (l = gcal->cal->events ; l; l = l->next){
- iCalObject *obj = l->data;
- result->_buffer[counter] = CORBA_string_dup(obj->uid);
+ for (l = uids; l; l = l->next){
+ result->_buffer[counter] = CORBA_string_dup(l->data);
counter++;
+ g_free (l->data);
}
+ g_list_free (uids);
return result;
}
@@ -258,28 +349,46 @@ static CORBA_char *
cal_repo_get_updated_objects (PortableServer_Servant servant,
CORBA_Environment *ev)
{
+ /* FIX ME -- this might be wrong */
GnomeCalendar *gcal = gnomecal_from_servant (servant);
- Calendar *dirty_cal;
- GList *l;
+ /* Calendar *dirty_cal; DELETE */
+ VObject *vcalobj, *vobj;
+ GList *l, *uids;
CORBA_char *res;
char *str;
- dirty_cal = calendar_new ("Temporal",CALENDAR_INIT_NIL);
+ /* dirty_cal = calendar_new ("Temporal",CALENDAR_INIT_NIL); DELETE */
+ vcalobj = newVObject (VCCalProp);
- for (l = gcal->cal->events; l; l = l->next){
- iCalObject *obj = l->data;
+ uids = cal_client_get_uids (gcal->calc, CALOBJ_TYPE_EVENT);
+ for (l = uids; l; l = l->next){
+ char *obj_string = cal_client_get_object (gcal->calc, l->data);
+ iCalObject *obj = string_to_ical_object (obj_string);
if (obj->pilot_status != ICAL_PILOT_SYNC_MOD)
continue;
- obj = ical_object_duplicate (l->data);
-
- calendar_add_object (dirty_cal, obj);
+ /* calendar_add_object (dirty_cal, obj); DELETE */
+ vobj = ical_object_to_vobject (obj);
+ addVObjectProp (vcalobj, vobj);
+ g_free (l->data);
}
+ g_list_free (uids);
+
+# if 0
+ /* DELETE */
str = calendar_get_as_vcal_string (dirty_cal);
res = CORBA_string_dup (str);
free (str); /* calendar_get_as_vcal_string() uses writeMemVObject(), which uses realloc() */
calendar_destroy (dirty_cal);
+# endif /* 0 */
+
+ str = writeMemVObject (NULL, NULL, vcalobj);
+ res = CORBA_string_dup (str);
+ free (str); /* calendar_get_as_vcal_string() uses writeMemVObject(),
+ which uses realloc() */
+ cleanVObject (vcalobj);
+ cleanStrTbl ();
return res;
}
@@ -288,9 +397,10 @@ static void
cal_repo_done (PortableServer_Servant servant,
CORBA_Environment *ev)
{
- GnomeCalendar *gcal = gnomecal_from_servant (servant);
+ /* GnomeCalendar *gcal = gnomecal_from_servant (servant); */
- calendar_save (gcal->cal, NULL);
+ /* calendar_save (gcal->cal, NULL); DELETE */
+ /* FIX ME -- i dont know what to do here */
}
static void
@@ -305,7 +415,6 @@ init_calendar_repo_class (void)
calendar_repository_epv.get_updated_objects = cal_repo_get_updated_objects;
calendar_repository_epv.update_pilot_id = cal_repo_update_pilot_id;
calendar_repository_epv.get_object_id_list = cal_repo_get_object_id_list;
-
calendar_repository_epv.done = cal_repo_done;
calendar_repository_vepv.GNOME_Calendar_Repository_epv =
@@ -337,7 +446,8 @@ gnome_calendar_create_corba_server (GnomeCalendar *calendar)
POA_GNOME_Calendar_Repository__init ((PortableServer_Servant) calendar_servant, &ev);
CORBA_free (
PortableServer_POA_activate_object (poa, calendar_servant, &ev));
- calendar->cal->corba_server = PortableServer_POA_servant_to_reference (
- poa, calendar_servant, &ev);
+ calendar->calc->corba_server =
+ PortableServer_POA_servant_to_reference (poa, calendar_servant, &ev);
+
CORBA_exception_free (&ev);
}