aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/pcs
diff options
context:
space:
mode:
Diffstat (limited to 'calendar/pcs')
-rw-r--r--calendar/pcs/calobj.c62
-rw-r--r--calendar/pcs/calobj.h11
2 files changed, 73 insertions, 0 deletions
diff --git a/calendar/pcs/calobj.c b/calendar/pcs/calobj.c
index 2618470808..08c8d8c63a 100644
--- a/calendar/pcs/calobj.c
+++ b/calendar/pcs/calobj.c
@@ -47,6 +47,9 @@ ical_object_new (void)
ico->seq = -1;
ico->dtstamp = time (NULL);
ico->uid = ical_gen_uid ();
+
+ ico->pilot_id = 0;
+ ico->pilot_status = ICAL_PILOT_SYNC_MOD;
return ico;
}
@@ -372,6 +375,8 @@ load_recur_yearly_day (iCalObject *o, char **str)
{
/* Skip as we do not support multiple days and we do expect
* the dtstart to agree with the value on this field
+ *
+ * FIXME: we should support every-n-years
*/
skip_numbers (str);
}
@@ -782,6 +787,22 @@ ical_object_create_from_vobject (VObject *o, const char *object_name)
}
free (the_str);
}
+
+ /*
+ * Pilot
+ */
+ if (has (o, XPilotIdProp)){
+ ical->pilot_id = atoi (str_val (vo));
+ free (the_str);
+ } else
+ ical->pilot_id = 0;
+
+ if (has (o, XPilotStatusProp)){
+ ical->pilot_status = atoi (str_val (vo));
+ free (the_str);
+ } else
+ ical->pilot_status = ICAL_PILOT_SYNC_MOD;
+
return ical;
}
@@ -1047,6 +1068,17 @@ ical_object_to_vobject (iCalObject *ical)
addPropValue (alarm, VCProcedureNameProp, ical->palarm.data);
if ((alarm = save_alarm (o, &ical->malarm, ical)))
addPropValue (alarm, VCEmailAddressProp, ical->malarm.data);
+
+ /* Pilot */
+ {
+ char buffer [20];
+
+ sprintf (buffer, "%d", ical->pilot_id);
+ addPropValue (o, XPilotIdProp, buffer);
+ sprintf (buffer, "%d", ical->pilot_status);
+ addPropValue (o, XPilotStatusProp, buffer);
+ }
+
return o;
}
@@ -1426,3 +1458,33 @@ alarm_compute_offset (CalendarAlarm *a)
}
return a->offset;
}
+
+iCalObject *
+ical_object_new_from_string (const char *vcal_string)
+{
+ iCalObject *ical = NULL;
+ VObject *cal, *event;
+ VObjectIterator i;
+ char *object_name;
+
+ cal = Parse_MIME (vcal_string, strlen (vcal_string));
+
+ initPropIterator (&i, cal);
+
+ while (moreIteration (&i)){
+ event = nextVObject (&i);
+
+ object_name = vObjectName (event);
+
+ if (strcmp (object_name, VCEventProp) == 0){
+ ical = ical_object_create_from_vobject (event, object_name);
+ break;
+ }
+ }
+
+ cleanVObject (cal);
+ cleanStrTbl ();
+
+ return ical;
+}
+
diff --git a/calendar/pcs/calobj.h b/calendar/pcs/calobj.h
index 9532b1325f..07ba3f1cc7 100644
--- a/calendar/pcs/calobj.h
+++ b/calendar/pcs/calobj.h
@@ -65,6 +65,12 @@ typedef struct {
int len;
} iCalValue;
+typedef enum {
+ ICAL_PILOT_SYNC_NONE = 0,
+ ICAL_PILOT_SYNC_MOD = 1,
+ ICAL_PILOT_SYNC_DEL = 3
+} iCalPilotState;
+
typedef struct {
int valid; /* true if the Geography was specified */
double latitude;
@@ -172,6 +178,10 @@ typedef struct {
int new;
void *user_data; /* Generic data pointer */
+
+ /* Pilot */
+ int pilot_status; /* Status information */
+ int pilot_id; /* Pilot ID */
} iCalObject;
/* The callback for the recurrence generator */
@@ -179,6 +189,7 @@ typedef int (*calendarfn) (iCalObject *, time_t, time_t, void *);
iCalObject *ical_new (char *comment, char *organizer, char *summary);
iCalObject *ical_object_new (void);
+iCalObject *ical_object_new_from_string (const char *vcalendar_string);
void ical_object_destroy (iCalObject *ico);
iCalObject *ical_object_create_from_vobject (VObject *obj, const char *object_name);
VObject *ical_object_to_vobject (iCalObject *ical);