summaryrefslogtreecommitdiffstats
path: root/src/uscxml/plugins/invoker/calendar/CalendarInvoker.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/uscxml/plugins/invoker/calendar/CalendarInvoker.cpp')
-rw-r--r--src/uscxml/plugins/invoker/calendar/CalendarInvoker.cpp651
1 files changed, 0 insertions, 651 deletions
diff --git a/src/uscxml/plugins/invoker/calendar/CalendarInvoker.cpp b/src/uscxml/plugins/invoker/calendar/CalendarInvoker.cpp
deleted file mode 100644
index 8a4ea3d..0000000
--- a/src/uscxml/plugins/invoker/calendar/CalendarInvoker.cpp
+++ /dev/null
@@ -1,651 +0,0 @@
-/**
- * @file
- * @author 2012-2013 Stefan Radomski (stefan.radomski@cs.tu-darmstadt.de)
- * @copyright Simplified BSD
- *
- * @cond
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the FreeBSD license as published by the FreeBSD
- * project.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * You should have received a copy of the FreeBSD license along with this
- * program. If not, see <http://www.opensource.org/licenses/bsd-license>.
- * @endcond
- */
-
-#include <boost/algorithm/string.hpp>
-
-#include "CalendarInvoker.h"
-#include "uscxml/concurrency/DelayedEventQueue.h"
-
-#include <glog/logging.h>
-
-#ifdef BUILD_AS_PLUGINS
-#include <Pluma/Connector.hpp>
-#endif
-
-namespace uscxml {
-
-#ifdef BUILD_AS_PLUGINS
-PLUMA_CONNECTOR
-bool pluginConnect(pluma::Host& host) {
- host.add( new CalendarInvokerProvider() );
- return true;
-}
-#endif
-
-CalendarInvoker::CalendarInvoker() {
- _icalSet = NULL;
- _icalComp = NULL;
-}
-
-CalendarInvoker::~CalendarInvoker() {
- tthread::lock_guard<tthread::recursive_mutex> lock(_mutex);
- std::set<std::string>::iterator _eventIdIter = _eventIds.begin();
- while(_eventIdIter != _eventIds.end()) {
- _interpreter->getDelayQueue()->cancelEvent(*_eventIdIter);
- _eventIds.erase(_eventIdIter++);
-
- }
-
- std::map<std::string, CalendarEvent*>::iterator eventIter = _events.begin();
- while(eventIter != _events.end()) {
- delete eventIter->second;
- eventIter++;
- }
-
- if (_icalComp)
- icalcomponent_free(_icalComp);
-};
-
-boost::shared_ptr<InvokerImpl> CalendarInvoker::create(InterpreterImpl* interpreter) {
- boost::shared_ptr<CalendarInvoker> invoker = boost::shared_ptr<CalendarInvoker>(new CalendarInvoker());
- invoker->_interpreter = interpreter;
-
- icalerror_set_error_state(ICAL_PARSE_ERROR, ICAL_ERROR_NONFATAL);
-
-// invoker->_calFile = URL::tmpFile();
-// invoker->_icalSet = icalfileset_new(invoker->_calFile.c_str());
-
-// if (!invoker->_icalSet) {
-// LOG(WARNING) << "Could not create new ical fileset: " << icalerror_perror();
-// }
-
- return invoker;
-}
-
-Data CalendarInvoker::getDataModelVariables() {
- Data data;
- return data;
-}
-
-void CalendarInvoker::send(const SendRequest& req) {
- tthread::lock_guard<tthread::recursive_mutex> lock(_mutex);
-}
-
-void CalendarInvoker::cancel(const std::string sendId) {
- tthread::lock_guard<tthread::recursive_mutex> lock(_mutex);
- std::set<std::string>::iterator _eventIdIter = _eventIds.begin();
- while(_eventIdIter != _eventIds.end()) {
- _interpreter->getDelayQueue()->cancelEvent(*_eventIdIter);
- _eventIds.erase(_eventIdIter++);
- }
-}
-
-void CalendarInvoker::invoke(const InvokeRequest& req) {
- tthread::lock_guard<tthread::recursive_mutex> lock(_mutex);
-
- _icalComp = addIcal(req.content);
-// dumpComponent(_icalComp);
- setupEvents(_icalComp);
-
-}
-
-icalcomponent* CalendarInvoker::addIcal(const std::string& icalString) {
-
- icalcomponent* root = icalparser_parse_string(icalString.c_str());
- if (!root) {
- LOG(WARNING) << "Could not parse ical data: " << icalerror_perror();
- return NULL;
- }
-// icalerrorenum err;
-// err = icalset_add_component(_icalSet, root);
-// icalfileset_commit(_icalSet);
-
- return root;
-}
-
-void CalendarInvoker::setupEvents(icalcomponent* comp) {
-// dumpComponent(comp);
-
- switch (icalcomponent_isa(comp)) {
- case ICAL_VCALENDAR_COMPONENT:
- case ICAL_XROOT_COMPONENT:
- break;
- case ICAL_VALARM_COMPONENT: {
- break;
- }
- case ICAL_VEVENT_COMPONENT: {
- // event to map
- CalendarEvent* event = new CalendarEvent(comp);
- _events[toStr((uintptr_t)event)] = event;
- queueEvent(event);
- break;
- }
- default:
-// dumpComponent(comp);
- break;
- }
-
- icalcomponent* child = icalcomponent_get_first_component(comp, ICAL_ANY_COMPONENT);
- while(child) {
- setupEvents(child);
- child = icalcomponent_get_next_component(comp, ICAL_ANY_COMPONENT);
- }
-
-}
-
-void CalendarInvoker::queueEvent(CalendarEvent* event) {
- if (_events.find(toStr((uintptr_t)event)) == _events.end()) {
- _events[toStr((uintptr_t)event)] = event;
- }
- time_t now = time(NULL);
- struct icaltime_span span;
-
- if (event->_nextSpan.start > 0) {
- span = event->getNextDuration(event->_nextSpan.start + 1);
- } else {
- span = event->getNextDuration(now);
- }
-
-#if 0
- if (span.end > 0) {
- std::cout << "\t\t" << ctime(&span.start);
- std::cout << "\t\t" << ctime(&span.end);
- span = event->getNextDuration(span.end);
- }
-#endif
-
- if (span.start <= 0 || span.end <= 0) {
- event->_nextSpan.start = 0;
- event->_nextSpan.end = 0;
- return;
- }
-
- int beginSecs = span.start - now;
- int endSecs = span.end - now;
-
- if (beginSecs > endSecs) {
- LOG(WARNING) << "Event ends before it starts";
- return;
- }
-
- event->_nextSpan = span;
-
- std::string beginEventId = event->getId() + "." + toStr(span.start) + ".started";
- std::string endEventId = event->getId() + "." + toStr(span.end) + ".ended";
-
-#if 0
- beginSecs = 1;
- endSecs = 2;
-#endif
- if (beginSecs > 0) {
- _interpreter->getDelayQueue()->addEvent(beginEventId, CalendarInvoker::raiseEvent, beginSecs * 1000, this);
- _eventIds.insert(beginEventId);
- } else {
- raiseEvent(this, beginEventId);
- }
- _interpreter->getDelayQueue()->addEvent(endEventId, CalendarInvoker::raiseEvent, endSecs * 1000, this);
- _eventIds.insert(endEventId);
-
-}
-
-void CalendarInvoker::raiseEvent(void* userdata, const std::string eventId) {
- CalendarInvoker* INSTANCE = (CalendarInvoker*)userdata;
- tthread::lock_guard<tthread::recursive_mutex> lock(INSTANCE->_mutex);
-
- std::string address = eventId.substr(0, eventId.find_first_of("."));
-
- if (INSTANCE->_events.find(address) == INSTANCE->_events.end()) {
- LOG(WARNING) << "No such event: " << eventId;
- return;
- }
-
- if(INSTANCE->_eventIds.find(eventId) != INSTANCE->_eventIds.end()) {
- INSTANCE->_eventIds.erase(eventId);
- }
-
- CalendarEvent* calEvent = INSTANCE->_events[address];
- Event event;
-
- event.data = *calEvent;
- if (boost::ends_with(eventId, ".started")) {
- event.name = "event.started." + calEvent->getId();
- assert(!calEvent->_active);
- calEvent->_active = true;
- } else {
- event.name = "event.ended." + calEvent->getId();
- assert(calEvent->_active);
- calEvent->_active = false;
- }
- INSTANCE->returnEvent(event);
-
- // event ended, reschedule next event
- if (boost::ends_with(eventId, ".ended"))
- INSTANCE->queueEvent(calEvent);
-}
-
-/**
- * Get the next duration for this event starting no earlier
- * than the given time.
- */
-icaltime_span CalendarEvent::getNextDuration(time_t time) {
- if (!_icalComp)
- return icaltime_span_new(icaltime_null_time(), icaltime_null_time(), 0);
-
- // see icalcomponent_foreach_recurrence
- icalproperty *rrule;
-
- icaltimetype calTime = icaltime_from_timet_with_zone(time, 0, 0);
-
- // actual occurence, without reocurrence
- if (!icalproperty_recurrence_is_excluded(_icalComp, &_dtstart, &_dtend)) {
- if (icaltime_compare(_dtstart, calTime) >= 0) {
- // start is still in the future
- return icaltime_span_new(_dtstart, _dtend, 0);
- }
- }
-
- icaltime_span recDur = icaltime_span_new(icaltime_null_time(), icaltime_null_time(), 0);
-
- // iterate all rrules
- for (rrule = icalcomponent_get_first_property(_icalComp, ICAL_RRULE_PROPERTY);
- rrule != NULL;
- rrule = icalcomponent_get_next_property(_icalComp, ICAL_RRULE_PROPERTY)) {
-
- struct icalrecurrencetype recurType = icalproperty_get_rrule(rrule);
- icalrecur_iterator *ritr;
- struct icaltimetype rtime;
-
- // do we have an old iterator that has not yet passed time?
- if (_recIters.find(rrule) != _recIters.end()) {
- if (_recIters[rrule].second > time) {
- icalrecur_iterator_free(_recIters[rrule].first);
- _recIters[rrule].first = icalrecur_iterator_new(recurType, _dtstart);
-
- // skip initial non-reoccurence
- if(_recIters[rrule].first)
- rtime = icalrecur_iterator_next(_recIters[rrule].first);
-
- }
- ritr = _recIters[rrule].first;
- } else {
- // create a new iterator for this rrule
- _recIters[rrule] = std::make_pair(icalrecur_iterator_new(recurType, _dtstart), 0);
- ritr = _recIters[rrule].first;
- }
-
-// std::cout << icalrecurrencetype_as_string(&recurType) << std::endl;
-
- while (ritr) {
- rtime = icalrecur_iterator_next(ritr);
-
-#if 0
- time_t tt = icaltime_as_timet(rtime);
- std::cout << "\t\t" << ctime(&tt);
-#endif
-
- if (icaltime_is_null_time(rtime)) {
- // remove iterator
- icalrecur_iterator_free(_recIters[rrule].first);
- _recIters.erase(rrule);
- break; // for next rule
- }
- _recIters[rrule].second = icaltime_as_timet(rtime);
-
- if (icaltime_compare(rtime, calTime) < 0)
- continue; // until we are after given time
-
- if (icalproperty_recurrence_is_excluded(_icalComp, &_dtstart, &rtime))
- continue;
-
- icaltime_span thisDur = icaltime_span_new(rtime, rtime, 1);
- thisDur.end += _dtduration;
-
- if (recDur.start == 0 || thisDur.start < recDur.start) {
- // update soonest reoccurence with the one from this rule
- recDur = thisDur;
- }
- break; // we are after the event
- }
- }
- return recDur;
-}
-
-CalendarEvent::~CalendarEvent() {
- std::map<icalproperty*, std::pair<icalrecur_iterator*, time_t> >::iterator recItersIter = _recIters.begin();
- while(recItersIter != _recIters.end()) {
- icalrecur_iterator_free(recItersIter->second.first);
- recItersIter++;
- }
-}
-
-CalendarEvent::CalendarEvent(icalcomponent* icalComp) {
- _nextSpan.start = 0;
- _nextSpan.end = 0;
- _icalComp = NULL;
- _active = false;
-
-
- _dtstart = icalcomponent_get_dtstart(icalComp);
- _dtend = icalcomponent_get_dtend(icalComp);
-
- if (!icaltime_is_valid_time(_dtstart)) {
- LOG(WARNING) << "Start of event not a valid time";
- return;
- }
-
- if (!icaltime_is_valid_time(_dtend)) {
- LOG(WARNING) << "End of event not a valid time";
- return;
- }
-
- _dtduration = icaldurationtype_as_int(icaltime_subtract(_dtend, _dtstart));
-
- if (_dtduration <= 0) {
- LOG(WARNING) << "Event has negative or zero duration";
- return;
- }
-
- _icalComp = icalComp;
-
- // initialize all iterators - not really needed anymore
- for (icalproperty* rrule = icalcomponent_get_first_property(_icalComp, ICAL_RRULE_PROPERTY);
- rrule != NULL;
- rrule = icalcomponent_get_next_property(_icalComp, ICAL_RRULE_PROPERTY)) {
-
- struct icalrecurrencetype recurType = icalproperty_get_rrule(rrule);
- icalrecur_iterator *ritr = icalrecur_iterator_new(recurType, _dtstart);
-
- _recIters[rrule] = std::make_pair(ritr, 0);
- }
-
-
-}
-
-CalendarEvent::operator Data() {
- Data data;
- data = CalendarInvoker::toData(_icalComp);
- return data;
-}
-
-Data CalendarInvoker::toData(icalcomponent* comp) {
- Data data;
- data.compound["kind"] = Data(icalcomponent_kind_to_string(icalcomponent_isa(comp)), Data::VERBATIM);
-
- // iterate all properties
- icalproperty* prop = icalcomponent_get_first_property(comp, ICAL_ANY_PROPERTY);
- while(prop) {
- std::string propName = icalproperty_kind_to_string(icalproperty_isa(prop));
- boost::to_lower(propName);
-
-#if 0
- // iterate all parameters
- icalparameter* para = icalproperty_get_first_parameter(prop, ICAL_ANY_PARAMETER);
- while(para) {
- std::string paraName = icalparameter_kind_to_string(icalparameter_isa(para));
-
- switch(icalparameter_get_value(para)) {
- case ICAL_VALUE_X:
- data.compound[propName].compound[paraName] = Data(icalparameter_get_x(para), Data::VERBATIM);
- break;
- case ICAL_VALUE_BOOLEAN:
- case ICAL_VALUE_BINARY:
- case ICAL_VALUE_DATE:
- case ICAL_VALUE_DURATION:
- case ICAL_VALUE_FLOAT:
- case ICAL_VALUE_INTEGER:
- case ICAL_VALUE_PERIOD:
- case ICAL_VALUE_RECUR:
- case ICAL_VALUE_TEXT:
- case ICAL_VALUE_URI:
- case ICAL_VALUE_ERROR:
- case ICAL_VALUE_DATETIME:
- case ICAL_VALUE_UTCOFFSET:
- case ICAL_VALUE_CALADDRESS:
- case ICAL_VALUE_NONE:
- data.compound[propName].compound[paraName] = Data("", Data::VERBATIM);
- break;
- }
-
- para = icalproperty_get_next_parameter(prop, ICAL_ANY_PARAMETER);
- }
- data.compound[propName].compound["value"] = Data(icalproperty_get_value_as_string(prop), Data::VERBATIM);
-#endif
-#if 0
- data.compound[propName] = Data(icalproperty_as_ical_string(prop), Data::VERBATIM);
-#endif
- data.compound[propName] = Data(icalproperty_get_value_as_string(prop), Data::VERBATIM);
-
- prop = icalcomponent_get_next_property(comp, ICAL_ANY_PROPERTY);
- }
-
-
- icalcomponent* child = icalcomponent_get_first_component(comp, ICAL_ANY_COMPONENT);
- while(child) {
- data.compound["childs"].array.push_back(toData(child));
- child = icalcomponent_get_next_component(comp, ICAL_ANY_COMPONENT);
- }
-
- return data;
-}
-
-#if 0
-void CalendarInvoker::dumpComponent(icalcomponent* comp) {
- std::cout << icalcomponent_kind_to_string(icalcomponent_isa(comp)) << std::endl;
-
- struct icaltimetype start, end;
- time_t tt;
-
- icalproperty *startProp = icalcomponent_get_first_property(comp, ICAL_DTSTART_PROPERTY);
- if (startProp) {
- start = icalproperty_get_dtstart(startProp);
- }
-
- icalproperty *endProp = icalcomponent_get_first_property(comp, ICAL_DTEND_PROPERTY);
- if (endProp) {
- end = icalproperty_get_dtend(endProp);
- }
-
- icalproperty *prop = icalcomponent_get_first_property(comp, ICAL_ANY_PROPERTY);
-
- while(prop) {
- std::cout << "\t" << icalproperty_kind_to_string(icalproperty_isa(prop)) << std::endl;
- switch (icalproperty_isa(prop)) {
- case ICAL_ANY_PROPERTY:
- case ICAL_ACKNOWLEDGED_PROPERTY:
- case ICAL_ACTION_PROPERTY:
- case ICAL_ALLOWCONFLICT_PROPERTY:
- case ICAL_ATTACH_PROPERTY:
- case ICAL_ATTENDEE_PROPERTY:
- case ICAL_CALID_PROPERTY:
- case ICAL_CALMASTER_PROPERTY:
- case ICAL_CALSCALE_PROPERTY:
- case ICAL_CAPVERSION_PROPERTY:
- case ICAL_CARLEVEL_PROPERTY:
- case ICAL_CARID_PROPERTY:
- case ICAL_CATEGORIES_PROPERTY:
- case ICAL_CLASS_PROPERTY:
- case ICAL_CMD_PROPERTY:
- case ICAL_COMMENT_PROPERTY:
- case ICAL_COMPLETED_PROPERTY:
- case ICAL_COMPONENTS_PROPERTY:
- case ICAL_CONTACT_PROPERTY:
- case ICAL_CREATED_PROPERTY:
- case ICAL_CSID_PROPERTY:
- case ICAL_DATEMAX_PROPERTY:
- case ICAL_DATEMIN_PROPERTY:
- case ICAL_DECREED_PROPERTY:
- case ICAL_DEFAULTCHARSET_PROPERTY:
- case ICAL_DEFAULTLOCALE_PROPERTY:
- case ICAL_DEFAULTTZID_PROPERTY:
- case ICAL_DEFAULTVCARS_PROPERTY:
- case ICAL_DENY_PROPERTY:
- break;
- case ICAL_DESCRIPTION_PROPERTY:
- std::cout << "\t\t" << icalproperty_get_description(prop) << std::endl;
- break;
- case ICAL_DTEND_PROPERTY: {
- end = icalproperty_get_dtend(prop);
- tt = icaltime_as_timet(start);
- std::cout << "\t\t" << ctime(&tt) << std::endl;
- break;
- }
- case ICAL_DTSTAMP_PROPERTY:
- break;
- case ICAL_DTSTART_PROPERTY: {
- start = icalproperty_get_dtstart(prop);
- tt = icaltime_as_timet(start);
- std::cout << "\t\t" << ctime(&tt) << std::endl;
- break;
- }
- case ICAL_DUE_PROPERTY:
- case ICAL_DURATION_PROPERTY:
- case ICAL_EXDATE_PROPERTY:
- case ICAL_EXPAND_PROPERTY:
- case ICAL_EXRULE_PROPERTY:
- case ICAL_FREEBUSY_PROPERTY:
- case ICAL_GEO_PROPERTY:
- case ICAL_GRANT_PROPERTY:
- case ICAL_ITIPVERSION_PROPERTY:
- case ICAL_LASTMODIFIED_PROPERTY:
- case ICAL_LOCATION_PROPERTY:
- case ICAL_MAXCOMPONENTSIZE_PROPERTY:
- case ICAL_MAXDATE_PROPERTY:
- case ICAL_MAXRESULTS_PROPERTY:
- case ICAL_MAXRESULTSSIZE_PROPERTY:
- case ICAL_METHOD_PROPERTY:
- case ICAL_MINDATE_PROPERTY:
- case ICAL_MULTIPART_PROPERTY:
- case ICAL_NAME_PROPERTY:
- case ICAL_ORGANIZER_PROPERTY:
- case ICAL_OWNER_PROPERTY:
- case ICAL_PERCENTCOMPLETE_PROPERTY:
- case ICAL_PERMISSION_PROPERTY:
- case ICAL_PRIORITY_PROPERTY:
- case ICAL_PRODID_PROPERTY:
- case ICAL_QUERY_PROPERTY:
- case ICAL_QUERYLEVEL_PROPERTY:
- case ICAL_QUERYID_PROPERTY:
- case ICAL_QUERYNAME_PROPERTY:
- case ICAL_RDATE_PROPERTY:
- case ICAL_RECURACCEPTED_PROPERTY:
- case ICAL_RECUREXPAND_PROPERTY:
- case ICAL_RECURLIMIT_PROPERTY:
- case ICAL_RECURRENCEID_PROPERTY:
- case ICAL_RELATEDTO_PROPERTY:
- case ICAL_RELCALID_PROPERTY:
- case ICAL_REPEAT_PROPERTY:
- case ICAL_REQUESTSTATUS_PROPERTY:
- case ICAL_RESOURCES_PROPERTY:
- case ICAL_RESTRICTION_PROPERTY:
- break;
- case ICAL_RRULE_PROPERTY: {
- // struct icaltimetype start = icaltime_from_timet(1,0);
- // struct icaltimetype start = icalproperty_get_dtstart(icalcomponent_get_first_property(comp,ICAL_DTSTART_PROPERTY));
-
- // struct icaltimetype end = icaltime_today();
- struct icalrecurrencetype recur = icalproperty_get_rrule(prop);
- struct icaltimetype next;
-
- icalrecur_iterator* ritr;
- for(ritr = icalrecur_iterator_new(recur,start),
- next = icalrecur_iterator_next(ritr);
- !icaltime_is_null_time(next);
- next = icalrecur_iterator_next(ritr)) {
-
- tt = icaltime_as_timet(next);
- printf(" %s",ctime(&tt ));
-
- }
- icalrecur_iterator_free(ritr);
-
- break;
- }
- case ICAL_SCOPE_PROPERTY:
- case ICAL_SEQUENCE_PROPERTY:
- case ICAL_STATUS_PROPERTY:
- case ICAL_STORESEXPANDED_PROPERTY:
- case ICAL_SUMMARY_PROPERTY:
- case ICAL_TARGET_PROPERTY:
- case ICAL_TRANSP_PROPERTY:
- case ICAL_TRIGGER_PROPERTY:
- case ICAL_TZID_PROPERTY:
- case ICAL_TZNAME_PROPERTY:
- case ICAL_TZOFFSETFROM_PROPERTY:
- case ICAL_TZOFFSETTO_PROPERTY:
- case ICAL_TZURL_PROPERTY:
- case ICAL_UID_PROPERTY:
- case ICAL_URL_PROPERTY:
- case ICAL_VERSION_PROPERTY:
- case ICAL_X_PROPERTY:
- case ICAL_XLICCLASS_PROPERTY:
- case ICAL_XLICCLUSTERCOUNT_PROPERTY:
- case ICAL_XLICERROR_PROPERTY:
- case ICAL_XLICMIMECHARSET_PROPERTY:
- case ICAL_XLICMIMECID_PROPERTY:
- case ICAL_XLICMIMECONTENTTYPE_PROPERTY:
- case ICAL_XLICMIMEENCODING_PROPERTY:
- case ICAL_XLICMIMEFILENAME_PROPERTY:
- case ICAL_XLICMIMEOPTINFO_PROPERTY:
- case ICAL_NO_PROPERTY:
- break;
- }
- prop = icalcomponent_get_next_property(comp, ICAL_ANY_PROPERTY);
- }
-
- switch (icalcomponent_isa(comp)) {
- case ICAL_NO_COMPONENT:
- case ICAL_ANY_COMPONENT:
- break;
- case ICAL_XROOT_COMPONENT: {
- icalcomponent* child = icalcomponent_get_first_component(comp, ICAL_ANY_COMPONENT);
- while(child) {
- dumpComponent(child);
- child = icalcomponent_get_next_component(comp, ICAL_ANY_COMPONENT);
- }
- break;
- }
- case ICAL_XATTACH_COMPONENT:
- case ICAL_VEVENT_COMPONENT:
- case ICAL_VTODO_COMPONENT:
- case ICAL_VJOURNAL_COMPONENT:
- case ICAL_VCALENDAR_COMPONENT:
- case ICAL_VAGENDA_COMPONENT:
- case ICAL_VFREEBUSY_COMPONENT:
- case ICAL_VALARM_COMPONENT:
- case ICAL_XAUDIOALARM_COMPONENT:
- case ICAL_XDISPLAYALARM_COMPONENT:
- case ICAL_XEMAILALARM_COMPONENT:
- case ICAL_XPROCEDUREALARM_COMPONENT:
- case ICAL_VTIMEZONE_COMPONENT:
- case ICAL_XSTANDARD_COMPONENT:
- case ICAL_XDAYLIGHT_COMPONENT:
- case ICAL_X_COMPONENT:
- case ICAL_VSCHEDULE_COMPONENT:
- case ICAL_VQUERY_COMPONENT:
- case ICAL_VREPLY_COMPONENT:
- case ICAL_VCAR_COMPONENT:
- case ICAL_VCOMMAND_COMPONENT:
- case ICAL_XLICINVALID_COMPONENT:
- case ICAL_XLICMIMEPART_COMPONENT:
- break;
- }
-}
-#endif
-
-} \ No newline at end of file