aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/cal-util
diff options
context:
space:
mode:
Diffstat (limited to 'calendar/cal-util')
-rw-r--r--calendar/cal-util/Makefile.am25
-rw-r--r--calendar/cal-util/calobj.c183
-rw-r--r--calendar/cal-util/calobj.h2
-rw-r--r--calendar/cal-util/icalendar-save.c89
4 files changed, 254 insertions, 45 deletions
diff --git a/calendar/cal-util/Makefile.am b/calendar/cal-util/Makefile.am
index d3517c2102..1bcab2b5ad 100644
--- a/calendar/cal-util/Makefile.am
+++ b/calendar/cal-util/Makefile.am
@@ -13,10 +13,14 @@ INCLUDES = \
lib_LTLIBRARIES = libcal-util.la
-libcal_util_la_SOURCES = \
- cal-recur.c \
- cal-util.c \
- calobj.c \
+libcal_util_la_SOURCES = \
+ cal-recur.c \
+ cal-util.c \
+ calobj.c \
+ icalendar.c \
+ icalendar.h \
+ icalendar-save.c \
+ icalendar-save.h \
timeutil.c
libcal_utilincludedir = $(includedir)/evolution/cal-util
@@ -27,6 +31,19 @@ libcal_utilinclude_HEADERS = \
calobj.h \
timeutil.h
+noinst_PROGRAMS = icalendar-test
+
+icalendar_test_SOURCES = \
+ icalendar-test.c \
+ icalendar.c \
+ icalendar-save.c
+
+icalendar_test_LDADD = \
+ $(EXTRA_GNOME_LIBS) \
+ $(top_builddir)/libversit/libversit.la \
+ $(top_builddir)/libical/src/libical/libical.a
+
+# $(top_builddir)/calendar/cal-util/libcal-util.la \
test_recur_SOURCES = \
test-recur.c
diff --git a/calendar/cal-util/calobj.c b/calendar/cal-util/calobj.c
index 9e86011d9f..3c1e10689b 100644
--- a/calendar/cal-util/calobj.c
+++ b/calendar/cal-util/calobj.c
@@ -12,9 +12,12 @@
#include <glib.h>
#include <ctype.h>
#include <unistd.h>
+#include <time.h>
#include "calobj.h"
#include "timeutil.h"
#include "libversit/vcc.h"
+#include "icalendar-save.h"
+#include "icalendar.h"
@@ -1565,6 +1568,56 @@ alarm_compute_offset (CalendarAlarm *a)
CalObjFindStatus
ical_object_find_in_string (const char *uid, const char *vcalobj, iCalObject **ico)
{
+#if 1
+ icalcomponent* comp = NULL;
+ icalcomponent *subcomp;
+ iCalObject *ical;
+
+ g_return_val_if_fail (vcalobj != NULL, CAL_OBJ_FIND_NOT_FOUND);
+
+ comp = icalparser_parse_string (vcalobj);
+
+ if (!comp) {
+ printf ("CAL_OBJ_FIND_SYNTAX_ERROR #1\n");
+ return CAL_OBJ_FIND_SYNTAX_ERROR;
+ }
+
+ subcomp = icalcomponent_get_first_component (comp,
+ ICAL_ANY_COMPONENT);
+ if (!subcomp) {
+ printf ("CAL_OBJ_FIND_SYNTAX_ERROR #2\n");
+ return CAL_OBJ_FIND_SYNTAX_ERROR;
+ }
+
+ while (subcomp) {
+ ical = ical_object_create_from_icalcomponent (subcomp);
+ if (ical->type != ICAL_EVENT &&
+ ical->type != ICAL_TODO &&
+ ical->type != ICAL_JOURNAL) {
+ g_warning ("Skipping unsupported iCalendar component");
+ } else {
+ if (strcasecmp (ical->uid, uid) == 0) {
+ (*ico) = ical;
+ (*ico)->ref_count = 1;
+ printf ("CAL_OBJ_FIND_SUCCESS\n");
+
+ printf ("ical_object_find_in_string:\n");
+ printf ("-----------------------------------------------------\n");
+ dump_icalobject (*ico);
+ printf ("-----------------------------------------------------\n");
+
+
+ return CAL_OBJ_FIND_SUCCESS;
+ }
+ }
+ subcomp = icalcomponent_get_next_component (comp,
+ ICAL_ANY_COMPONENT);
+ }
+
+ printf ("CAL_OBJ_FIND_NOT_FOUND\n");
+ return CAL_OBJ_FIND_NOT_FOUND;
+
+#else /* 0 */
VObject *vcal;
VObjectIterator i;
CalObjFindStatus status;
@@ -1619,6 +1672,7 @@ ical_object_find_in_string (const char *uid, const char *vcalobj, iCalObject **i
cleanStrTbl ();
return status;
+#endif /* 0 */
}
/* Creates a VObject with the base information of a calendar */
@@ -1663,6 +1717,22 @@ get_calendar_base_vobject (void)
char *
ical_object_to_string (iCalObject *ico)
{
+#if 1
+ icalcomponent *top = icalcomponent_new (ICAL_VCALENDAR_COMPONENT);
+ char *out_cal_string;
+ icalcomponent *comp;
+
+ printf ("ical_object_to_string:\n");
+ printf ("-----------------------------------------------------\n");
+ dump_icalobject (ico);
+ printf ("-----------------------------------------------------\n");
+
+ comp = icalcomponent_create_from_ical_object (ico);
+ icalcomponent_add_component (top, comp);
+ out_cal_string = icalcomponent_as_ical_string (top);
+ return g_strdup (out_cal_string);
+
+#else /* 0 */
VObject *vcalobj, *vobj;
char *buf, *gbuf;
@@ -1682,6 +1752,7 @@ ical_object_to_string (iCalObject *ico)
free (buf);
return gbuf;
+#endif /* 0 */
}
@@ -1808,3 +1879,115 @@ ical_object_normalize_summary (iCalObject *ico)
}
*dest = '\0';
}
+
+
+void dump_icalobject (iCalObject *ico)
+{
+ if (!ico) {
+ printf ("<<NULL>>\n");
+ return;
+ }
+
+ printf ("type ");
+ switch (ico->type) {
+ case ICAL_EVENT: printf ("event"); break;
+ case ICAL_TODO: printf ("todo"); break;
+ case ICAL_JOURNAL: printf ("journal"); break;
+ case ICAL_FBREQUEST: printf ("fbrequest"); break;
+ case ICAL_FBREPLY: printf ("fbreply"); break;
+ case ICAL_BUSYTIME: printf ("busytime"); break;
+ case ICAL_TIMEZONE: printf ("timezone"); break;
+ }
+ printf ("\n");
+
+ printf ("attach-length %d\n", g_list_length (ico->attach));
+
+ printf ("attendee-length %d\n", g_list_length (ico->attendee));
+
+ printf ("catagories-length %d\n", g_list_length (ico->categories));
+
+ printf ("class '%s'\n", ico->class ? ico->class : "NULL");
+
+ printf ("comment '%s'\n", ico->comment ? ico->comment : "NULL");
+
+ printf ("completed %ld=%s",
+ ico->completed, ctime (&ico->completed));
+
+ printf ("created %ld=%s", ico->created, ctime (&ico->created));
+
+ printf ("contact-length %d\n", g_list_length (ico->contact));
+
+ printf ("desc '%s'\n", ico->desc ? ico->desc : "NULL");
+
+ printf ("dtstamp %ld=%s", ico->dtstamp, ctime (&ico->dtstamp));
+
+ printf ("dtstart %ld=%s", ico->dtstart, ctime (&ico->dtstart));
+
+ printf ("dtend %ld=%s", ico->dtend, ctime (&ico->dtend));
+
+ printf ("date_only %d\n", ico->date_only);
+
+ printf ("exdate-length %d\n", g_list_length (ico->exdate));
+
+ printf ("exrule-length %d\n", g_list_length (ico->exrule));
+
+ printf ("iCalGeo %d %f %f\n",
+ ico->geo.valid, ico->geo.latitude, ico->geo.longitude);
+
+ printf ("last_mod %ld=%s", ico->last_mod, ctime (&ico->last_mod));
+
+ printf ("location '%s'\n", ico->location ? ico->location : "NULL");
+
+ printf ("organizer %p\n", ico->organizer);
+
+ printf ("percent %d\n", ico->percent);
+
+ printf ("priority %d\n", ico->priority);
+
+ printf ("rstatus '%s'\n", ico->rstatus ? ico->rstatus : "NULL");
+
+ printf ("related-length %d\n", g_list_length (ico->related));
+
+ printf ("resources-length %d\n", g_list_length (ico->resources));
+
+ printf ("rdate-length %d\n", g_list_length (ico->rdate));
+
+ printf ("rrule-length %d\n", g_list_length (ico->rrule));
+
+ printf ("seq %d\n", ico->seq);
+
+ printf ("status '%s'\n", ico->status ? ico->status : "NULL");
+
+ printf ("summary '%s'\n", ico->summary ? ico->summary : "NULL");
+
+ printf ("transp ");
+ switch (ico->transp) {
+ case ICAL_OPAQUE: printf ("opaque"); break;
+ case ICAL_TRANSPARENT: printf ("transparent"); break;
+ }
+ printf ("\n");
+
+ printf ("uid '%s'\n", ico->uid ? ico->uid : "NULL");
+
+ printf ("url '%s'\n", ico->url ? ico->url : "NULL");
+
+ printf ("recurid %ld=%s", ico->recurid, ctime (&ico->recurid));
+
+ printf ("dalarm %d\n", ico->dalarm.enabled);
+
+ printf ("aalarm %d\n", ico->aalarm.enabled);
+
+ printf ("palarm %d\n", ico->palarm.enabled);
+
+ printf ("malarm %d\n", ico->malarm.enabled);
+
+ printf ("alarms-length %d\n", g_list_length (ico->alarms));
+
+ printf ("recur %p\n", ico->recur);
+
+ printf ("new %d\n", ico->new);
+
+ printf ("user_data %p\n", ico->user_data);
+
+ printf ("ref_count %d\n", ico->ref_count);
+}
diff --git a/calendar/cal-util/calobj.h b/calendar/cal-util/calobj.h
index f2e5dbe00c..57514250e5 100644
--- a/calendar/cal-util/calobj.h
+++ b/calendar/cal-util/calobj.h
@@ -275,6 +275,8 @@ char *ical_gen_uid (void);
void ical_object_reset_recurrence (iCalObject *ico);
+void dump_icalobject (iCalObject *ico);
+
END_GNOME_DECLS
#endif
diff --git a/calendar/cal-util/icalendar-save.c b/calendar/cal-util/icalendar-save.c
index 8fae9a02f5..8f2335763f 100644
--- a/calendar/cal-util/icalendar-save.c
+++ b/calendar/cal-util/icalendar-save.c
@@ -311,7 +311,8 @@ struct icaltimetype timet_to_icaltime (time_t tt)
struct tm *t;
struct icaltimetype i;
- t = gmtime (&tt);
+ //t = gmtime (&tt);
+ t = localtime (&tt);
/*return tt - (i->is_utc ? timezone : 0); */
i.is_utc = 0;
@@ -351,52 +352,58 @@ void unparse_person (iCalPerson *person, icalproperty *person_prop)
icalproperty_add_parameter (person_prop, param);
}
- if (g_strcasecmp (person->role, "CHAIR") == 0)
- param = icalparameter_new_role (ICAL_ROLE_CHAIR);
- else if (g_strcasecmp (person->role, "REQPARTICIPANT") == 0)
- param = icalparameter_new_role (ICAL_ROLE_REQPARTICIPANT);
- else if (g_strcasecmp (person->role, "OPTPARTICIPANT") == 0)
- param = icalparameter_new_role (ICAL_ROLE_OPTPARTICIPANT);
- else if (g_strcasecmp (person->role, "NONPARTICIPANT") == 0)
- param = icalparameter_new_role (ICAL_ROLE_NONPARTICIPANT);
- else
- param = icalparameter_new_role (ICAL_ROLE_XNAME);
- icalproperty_add_parameter (person_prop, param);
-
- if (g_strcasecmp (person->partstat, "NEEDSACTION") == 0)
- param = icalparameter_new_partstat (ICAL_PARTSTAT_NEEDSACTION);
- else if (g_strcasecmp (person->partstat, "ACCEPTED") == 0)
- param = icalparameter_new_partstat (ICAL_PARTSTAT_ACCEPTED);
- else if (g_strcasecmp (person->partstat, "DECLINED") == 0)
- param = icalparameter_new_partstat (ICAL_PARTSTAT_DECLINED);
- else if (g_strcasecmp (person->partstat, "TENTATIVE") == 0)
- param = icalparameter_new_partstat (ICAL_PARTSTAT_TENTATIVE);
- else if (g_strcasecmp (person->partstat, "DELEGATED") == 0)
- param = icalparameter_new_partstat (ICAL_PARTSTAT_DELEGATED);
- else if (g_strcasecmp (person->partstat, "COMPLETED") == 0)
- param = icalparameter_new_partstat (ICAL_PARTSTAT_COMPLETED);
- else if (g_strcasecmp (person->partstat, "INPROCESS") == 0)
- param = icalparameter_new_partstat (ICAL_PARTSTAT_INPROCESS);
- else /* FIX ME, NEEDSACTION instead? */
- param = icalparameter_new_partstat (ICAL_PARTSTAT_XNAME);
- icalproperty_add_parameter (person_prop, param);
+ if (person->role) {
+ if (g_strcasecmp (person->role, "CHAIR") == 0)
+ param = icalparameter_new_role (ICAL_ROLE_CHAIR);
+ else if (g_strcasecmp (person->role, "REQPARTICIPANT") == 0)
+ param = icalparameter_new_role (ICAL_ROLE_REQPARTICIPANT);
+ else if (g_strcasecmp (person->role, "OPTPARTICIPANT") == 0)
+ param = icalparameter_new_role (ICAL_ROLE_OPTPARTICIPANT);
+ else if (g_strcasecmp (person->role, "NONPARTICIPANT") == 0)
+ param = icalparameter_new_role (ICAL_ROLE_NONPARTICIPANT);
+ else
+ param = icalparameter_new_role (ICAL_ROLE_XNAME);
+ icalproperty_add_parameter (person_prop, param);
+ }
+
+ if (person->partstat) {
+ if (g_strcasecmp (person->partstat, "NEEDSACTION") == 0)
+ param = icalparameter_new_partstat (ICAL_PARTSTAT_NEEDSACTION);
+ else if (g_strcasecmp (person->partstat, "ACCEPTED") == 0)
+ param = icalparameter_new_partstat (ICAL_PARTSTAT_ACCEPTED);
+ else if (g_strcasecmp (person->partstat, "DECLINED") == 0)
+ param = icalparameter_new_partstat (ICAL_PARTSTAT_DECLINED);
+ else if (g_strcasecmp (person->partstat, "TENTATIVE") == 0)
+ param = icalparameter_new_partstat (ICAL_PARTSTAT_TENTATIVE);
+ else if (g_strcasecmp (person->partstat, "DELEGATED") == 0)
+ param = icalparameter_new_partstat (ICAL_PARTSTAT_DELEGATED);
+ else if (g_strcasecmp (person->partstat, "COMPLETED") == 0)
+ param = icalparameter_new_partstat (ICAL_PARTSTAT_COMPLETED);
+ else if (g_strcasecmp (person->partstat, "INPROCESS") == 0)
+ param = icalparameter_new_partstat (ICAL_PARTSTAT_INPROCESS);
+ else /* FIX ME, NEEDSACTION instead? */
+ param = icalparameter_new_partstat (ICAL_PARTSTAT_XNAME);
+ icalproperty_add_parameter (person_prop, param);
+ }
if (person->rsvp != FALSE) {
param = icalparameter_new_rsvp (TRUE);
icalproperty_add_parameter (person_prop, param);
}
- if (g_strcasecmp (person->cutype, "INDIVIDUAL") == 0)
- param = icalparameter_new_cutype (ICAL_CUTYPE_INDIVIDUAL);
- else if (g_strcasecmp (person->cutype, "GROUP") == 0)
- param = icalparameter_new_cutype (ICAL_CUTYPE_GROUP);
- else if (g_strcasecmp (person->cutype, "RESOURCE") == 0)
- param = icalparameter_new_cutype (ICAL_CUTYPE_RESOURCE);
- else if (g_strcasecmp (person->cutype, "ROOM") == 0)
- param = icalparameter_new_cutype (ICAL_CUTYPE_ROOM);
- else /* FIX ME, INDIVIDUAL instead? */
- param = icalparameter_new_cutype (ICAL_CUTYPE_UNKNOWN);
- icalproperty_add_parameter (person_prop, param);
+ if (person->cutype) {
+ if (g_strcasecmp (person->cutype, "INDIVIDUAL") == 0)
+ param = icalparameter_new_cutype (ICAL_CUTYPE_INDIVIDUAL);
+ else if (g_strcasecmp (person->cutype, "GROUP") == 0)
+ param = icalparameter_new_cutype (ICAL_CUTYPE_GROUP);
+ else if (g_strcasecmp (person->cutype, "RESOURCE") == 0)
+ param = icalparameter_new_cutype (ICAL_CUTYPE_RESOURCE);
+ else if (g_strcasecmp (person->cutype, "ROOM") == 0)
+ param = icalparameter_new_cutype (ICAL_CUTYPE_ROOM);
+ else /* FIX ME, INDIVIDUAL instead? */
+ param = icalparameter_new_cutype (ICAL_CUTYPE_UNKNOWN);
+ icalproperty_add_parameter (person_prop, param);
+ }
/* person->member is a list of ICAL_MEMBER_PARAMETER */
for (cur = person->member; cur; cur = cur->next) {