aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/calendar-conduit.c
diff options
context:
space:
mode:
Diffstat (limited to 'calendar/calendar-conduit.c')
-rw-r--r--calendar/calendar-conduit.c169
1 files changed, 135 insertions, 34 deletions
diff --git a/calendar/calendar-conduit.c b/calendar/calendar-conduit.c
index cb8f53eba9..3fd110100a 100644
--- a/calendar/calendar-conduit.c
+++ b/calendar/calendar-conduit.c
@@ -32,6 +32,7 @@
GnomePilotConduit * conduit_get_gpilot_conduit (guint32);
void conduit_destroy_gpilot_conduit (GnomePilotConduit*);
+void local_record_from_icalobject(CalLocalRecord *local,iCalObject *obj);
typedef struct _ConduitData ConduitData;
@@ -74,6 +75,43 @@ calendar_notify (time_t time, CalendarAlarm *which, void *data)
static GList *
get_calendar_objects(GnomePilotConduitStandardAbs *conduit)
{
+ GList *result;
+ GNOME_Calendar_Repository_String_Sequence *uids;
+
+ g_return_val_if_fail(conduit!=NULL,NULL);
+
+ result = NULL;
+ uids = GNOME_Calendar_Repository_get_object_id_list (calendar, &ev);
+
+ if (ev._major == CORBA_USER_EXCEPTION){
+ g_message ("calconduit: \tObject did not exist\n");
+ g_warning("\texception id = %s\n",CORBA_exception_id(&ev));
+ CORBA_exception_free(&ev);
+ return NULL;
+ } else if(ev._major != CORBA_NO_EXCEPTION) {
+ g_warning(_("\tError while communicating with calendar server\n"));
+ g_warning("\texception id = %s\n",CORBA_exception_id(&ev));
+ CORBA_exception_free(&ev);
+ return NULL;
+ }
+
+ if(uids->_length>0) {
+ int i;
+ for(i=0;i<uids->_length;i++) {
+ result = g_list_prepend(result,g_strdup(uids->_buffer[i]));
+ }
+ } else
+ g_message("No entries found");
+
+ CORBA_free(uids);
+
+ return result;
+}
+
+#if 0
+static GList *
+get_calendar_objects(GnomePilotConduitStandardAbs *conduit)
+{
char *vcalendar_string;
char *error;
GList *retval,*l;
@@ -87,6 +125,19 @@ get_calendar_objects(GnomePilotConduitStandardAbs *conduit)
cal = calendar_new("Temporary");
error = calendar_load_from_memory(cal,vcalendar_string);
+
+ if (ev._major == CORBA_USER_EXCEPTION){
+ g_message ("calconduit: \tObject did not exist\n");
+ g_warning("\texception id = %s\n",CORBA_exception_id(&ev));
+ CORBA_exception_free(&ev);
+ return;
+ } else if(ev._major != CORBA_NO_EXCEPTION) {
+ g_warning(_("\tError while communicating with calendar server\n"));
+ g_warning("\texception id = %s\n",CORBA_exception_id(&ev));
+ CORBA_exception_free(&ev);
+ return;
+ }
+
if(error != NULL) {
g_warning("Error while converting records");
g_warning("Error : %s",error);
@@ -105,50 +156,79 @@ get_calendar_objects(GnomePilotConduitStandardAbs *conduit)
return retval;
}
+#endif
+
+static void
+local_record_from_ical_uid(CalLocalRecord *local,
+ char *uid)
+{
+ iCalObject *obj;
+ char *vcalendar_string;
+
+ g_assert(local!=NULL);
+
+ vcalendar_string = GNOME_Calendar_Repository_get_object(calendar, uid, &ev);
+
+ if (ev._major == CORBA_USER_EXCEPTION){
+ g_message ("calconduit: \tObject did not exist\n");
+ g_warning("\texception id = %s\n",CORBA_exception_id(&ev));
+ CORBA_exception_free(&ev);
+ return;
+ } else if(ev._major != CORBA_NO_EXCEPTION) {
+ g_warning(_("\tError while communicating with calendar server\n"));
+ g_warning("\texception id = %s\n",CORBA_exception_id(&ev));
+ CORBA_exception_free(&ev);
+ return;
+ }
+ g_return_if_fail(vcalendar_string!=NULL);
+
+ obj = ical_object_new_from_string (vcalendar_string);
+
+ local_record_from_icalobject(local,obj);
+
+ return;
+}
+
/*
* converts a iCalObject to a CalLocalRecord
*/
-static void
-local_record_from_icalobject(CalLocalRecord **local,
+void
+local_record_from_icalobject(CalLocalRecord *local,
iCalObject *obj)
{
g_return_if_fail(local!=NULL);
- g_return_if_fail(*local!=NULL);
g_return_if_fail(obj!=NULL);
- (*local)->ical = obj;
- (*local)->local.ID = (*local)->ical->pilot_id;
+ local->ical = obj;
+ local->local.ID = local->ical->pilot_id;
- g_print("calconduit: (*local)->Id = %ld [%s], status = %d\n",
- (*local)->local.ID,obj->summary,(*local)->ical->pilot_status);
+ g_print("calconduit: local->Id = %ld [%s], status = %d\n",
+ local->local.ID,obj->summary,local->ical->pilot_status);
- switch((*local)->ical->pilot_status) {
+ switch(local->ical->pilot_status) {
case ICAL_PILOT_SYNC_NONE:
- (*local)->local.attr = GnomePilotRecordNothing;
+ local->local.attr = GnomePilotRecordNothing;
break;
case ICAL_PILOT_SYNC_MOD:
- (*local)->local.attr = GnomePilotRecordModified;
+ local->local.attr = GnomePilotRecordModified;
break;
case ICAL_PILOT_SYNC_DEL:
- (*local)->local.attr = GnomePilotRecordDeleted;
+ local->local.attr = GnomePilotRecordDeleted;
break;
}
/* Records without a pilot_id are new */
- if((*local)->local.ID == 0)
- (*local)->local.attr = GnomePilotRecordNew;
+ if(local->local.ID == 0)
+ local->local.attr = GnomePilotRecordNew;
- (*local)->local.secret = 0;
+ local->local.secret = 0;
if(obj->class!=NULL)
if(strcmp(obj->class,"PRIVATE")==0)
- (*local)->local.secret = 1;
+ local->local.secret = 1;
- (*local)->local.archived = 0;
-
- /* used by iterations */
- (*local)->list_ptr = NULL;
+ local->local.archived = 0;
}
/*
@@ -165,7 +245,6 @@ find_record_in_repository(GnomePilotConduitStandardAbs *conduit,
g_return_val_if_fail(conduit!=NULL,NULL);
g_return_val_if_fail(remote!=NULL,NULL);
- g_message ("calconduit: requesting %ld []\n", remote->ID);
vcal_string =
GNOME_Calendar_Repository_get_object_by_pilot_id (calendar, remote->ID, &ev);
@@ -182,7 +261,7 @@ find_record_in_repository(GnomePilotConduitStandardAbs *conduit,
g_message ("calconduit: \tFound\n");
loc = g_new0(CalLocalRecord,1);
/* memory allocated in new_from_string is freed in free_match */
- local_record_from_icalobject(&loc,
+ local_record_from_icalobject(loc,
ical_object_new_from_string (vcal_string));
/* g_free(vcal_string); FIXME: this coredumps, but won't it leak without ? */
return loc;
@@ -589,7 +668,8 @@ iterate (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord **local,
gpointer data)
{
- static GList *events;
+ static GList *events,*iterator;
+ static int hest;
g_return_val_if_fail(local!=NULL,0);
@@ -597,29 +677,31 @@ iterate (GnomePilotConduitStandardAbs *conduit,
g_print("calconduit: beginning iteration\n");
events = get_calendar_objects(conduit);
-
+ hest = 0;
+
if(events!=NULL) {
g_print("calconduit: iterating over %d records\n",g_list_length(events));
*local = g_new0(CalLocalRecord,1);
- local_record_from_icalobject(local,(iCalObject*)events->data);
- (*local)->list_ptr = events;
+ local_record_from_ical_uid(*local,(gchar*)events->data);
+ iterator = events;
} else {
g_print("calconduit: no events\n");
(*local) = NULL;
}
} else {
g_print("calconduit: continuing iteration\n");
- if(g_list_next((*local)->list_ptr)==NULL) {
+ hest++;
+ if(g_list_next(iterator)==NULL) {
GList *l;
g_print("calconduit: ending\n");
/** free stuff allocated for iteration */
g_free((*local));
- g_print("calconduit: iterated over %d records\n",g_list_length(events));
+ g_print("calconduit: iterated over %d records\n",hest);
for(l=events;l;l=l->next)
- ical_object_destroy(l->data);
+ g_free(l->data);
g_list_free(events);
@@ -627,8 +709,8 @@ iterate (GnomePilotConduitStandardAbs *conduit,
(*local) = NULL;
return 0;
} else {
- local_record_from_icalobject(local,(iCalObject*)(g_list_next((*local)->list_ptr)->data));
- (*local)->list_ptr = g_list_next((*local)->list_ptr);
+ iterator = g_list_next(iterator);
+ local_record_from_ical_uid(*local,(gchar*)(iterator->data));
}
}
return 1;
@@ -647,7 +729,7 @@ iterate_specific (GnomePilotConduitStandardAbs *conduit,
/** iterate until a record meets the criteria */
while(gnome_pilot_conduit_standard_abs_iterate(conduit,(LocalRecord**)local)) {
if((*local)==NULL) break;
- g_print("calconduit: local->attr = %d, flag = %d, & %d\n",(*local)->local.attr,flag,((*local)->local.attr & flag));
+ /* g_print("calconduit: local->attr = %d, flag = %d, & %d\n",(*local)->local.attr,flag,((*local)->local.attr & flag)); */
if(archived && ((*local)->local.archived==archived)) break;
if(((*local)->local.attr == flag)) break;
}
@@ -835,10 +917,28 @@ transmit (GnomePilotConduitStandardAbs *conduit,
local->a->begin = *localtime(&local->ical->dtstart);
local->a->end = *localtime(&local->ical->dtend);
- local->a->alarm = 0;
- local->a->advance = 0;
- local->a->advanceUnits = advMinutes;
+ /* set the Audio Alarm parameters */
+ if(local->ical->aalarm.enabled) {
+ local->a->alarm = 1;
+ local->a->advance = local->ical->aalarm.count;
+ switch(local->ical->aalarm.units) {
+ case ALARM_MINUTES:
+ local->a->advanceUnits = advMinutes;
+ break;
+ case ALARM_HOURS:
+ local->a->advanceUnits = advHours;
+ break;
+ case ALARM_DAYS:
+ local->a->advanceUnits = advDays;
+ break;
+ }
+ } else {
+ local->a->alarm = 0;
+ local->a->advance = 0;
+ local->a->advanceUnits = advMinutes;
+ }
+ /* set the recurrence parameters */
if (local->ical->recur != NULL) {
switch (local->ical->recur->type) {
case RECUR_DAILY:
@@ -898,6 +998,7 @@ transmit (GnomePilotConduitStandardAbs *conduit,
local->a->description =
local->ical->summary==NULL?NULL:strdup(local->ical->summary);
+ /* Generate pilot record structure */
p->record = g_new0(char,0xffff);
p->length = pack_Appointment(local->a,p->record,0xffff);