From: Steve Brokenshire Date: Sat, 13 Feb 2016 16:14:01 +0000 (+0000) Subject: Added initial VALARM processing in CalendarEventObject. X-Git-Tag: release-0.02~375 X-Git-Url: http://Server1/repobrowser/?p=xestiacalendar%2F.git;a=commitdiff_plain;h=284c77ac5ae39b716dca3b88b365dc335759af22 Added initial VALARM processing in CalendarEventObject. --- diff --git a/source/objects/calendarevent/CalendarEvent.cpp b/source/objects/calendarevent/CalendarEvent.cpp index 62a347b..ab88fe4 100644 --- a/source/objects/calendarevent/CalendarEvent.cpp +++ b/source/objects/calendarevent/CalendarEvent.cpp @@ -1454,6 +1454,85 @@ void CalendarEventObject::ProcessData(){ } + // Process Alarm section. + + ProcessAlarms(); + + int SeekCount = 0; + + bool AlarmActionFound = false; + + for (vector>::iterator iter = EventAlarmName.begin(); + iter != EventAlarmName.end(); iter++){ + + CalendarAlarmDataStruct NewAlarmData; + + // Process the data from ACTION. + + bool AlarmActionFound = false; + bool AlarmTriggerFound = false; + + DataReceived = ProcessTextVectors(&EventAlarmName[SeekCount], + &EventAlarmData[SeekCount], false, "ACTION"); + + if (DataReceived.begin() != DataReceived.end()){ + + try { + NewAlarmData.AlarmActionTokens = DataReceived.begin()->first.substr(7); + } + + catch(const out_of_range &oor){ + // Do nothing as there is no data. + } + + NewAlarmData.AlarmAction = DataReceived.begin()->second; + AlarmActionFound = true; + + } + + // Check if a value was set for AlarmAction, otherwise + // process the next VALARM section. + + if (NewAlarmData.AlarmAction.size() < 1){ + + SeekCount++; + continue; + + } + + // Check if AlarmAction is DISPLAY, AUDIO or EMAIL. + // Process the next VALARM section if not. + + if (NewAlarmData.AlarmAction == "AUDIO"){ + + NewAlarmData.AlarmType = CALENDARALARM_AUDIO; + + } else if (NewAlarmData.AlarmAction == "DISPLAY"){ + + NewAlarmData.AlarmType = CALENDARALARM_DISPLAY; + + } else if (NewAlarmData.AlarmAction == "EMAIL"){ + + NewAlarmData.AlarmType = CALENDARALARM_EMAIL; + + } else { + + SeekCount++; + continue; + + } + + if (NewAlarmData.AlarmType == CALENDARALARM_AUDIO && + AlarmActionFound == true){ + + CalendarAlarmData.push_back(NewAlarmData); + + } + + SeekCount++; + + } + ObjectSeekCount = 0; // Process data from X-* @@ -1477,3 +1556,64 @@ void CalendarEventObject::ProcessData(){ } } + +void CalendarEventObject::ProcessAlarms(){ + + int SeekCount = 0; + + bool TZMode = false; // False = STANDARD, True = DAYLIGHT. + bool ValidBegin = false; + vector EventObjectName; + vector EventObjectData; + + for (vector::iterator iter = ObjectName.begin(); + iter != ObjectName.end(); iter++){ + + // Check if the current name is BEGIN and + // data is either STANDARD or DAYLIGHT. + + if (ObjectName[SeekCount] == "BEGIN" && + ObjectData[SeekCount] == "VALARM"){ + + if (ValidBegin == false){ + ValidBegin = true; + EventObjectName.clear(); + EventObjectData.clear(); + } else { + + } + + SeekCount++; + continue; + + } + + // Check if current name is END and + // data is either STANDARD or DAYLIGHT. + + if (ObjectName[SeekCount] == "END" && + ObjectData[SeekCount] == "VALARM" && + ValidBegin == true){ + + EventAlarmName.push_back(EventObjectName); + EventAlarmData.push_back(EventObjectData); + + EventObjectName.clear(); + EventObjectData.clear(); + + ValidBegin = false; + + } + + if (ValidBegin == true){ + + EventObjectName.push_back(ObjectName[SeekCount]); + EventObjectData.push_back(ObjectData[SeekCount]); + + } + + SeekCount++; + + } + +} \ No newline at end of file diff --git a/source/objects/calendarevent/CalendarEvent.h b/source/objects/calendarevent/CalendarEvent.h index e2bdf0d..99c708d 100644 --- a/source/objects/calendarevent/CalendarEvent.h +++ b/source/objects/calendarevent/CalendarEvent.h @@ -10,6 +10,7 @@ class CalendarEventObject: public CalendarObject{ private: void ProcessData(); + void ProcessAlarms(); }; diff --git a/source/objects/calendarobject/CalendarObject.h b/source/objects/calendarobject/CalendarObject.h index 1c700c4..2b450fc 100644 --- a/source/objects/calendarobject/CalendarObject.h +++ b/source/objects/calendarobject/CalendarObject.h @@ -14,17 +14,76 @@ using namespace std; enum CalendarObjectLoadResult { - CALENDAROBJECTLOAD_UNITTESTFAIL = -1, - CALENDAROBJECTLOAD_OK, - CALENDAROBJECTLOAD_MISSING, - CALENDAROBJECTLOAD_INVALIDFORMAT, - CALENDAROBJECTLOAD_CANNOTOPEN + CALENDAROBJECTLOAD_UNITTESTFAIL = -1, + CALENDAROBJECTLOAD_OK, + CALENDAROBJECTLOAD_MISSING, + CALENDAROBJECTLOAD_INVALIDFORMAT, + CALENDAROBJECTLOAD_CANNOTOPEN }; enum CalendarObjectValidResult{ - CALENDAROBJECTVALID_UNITTESTFAIL = -1, - CALENDAROBJECTVALID_OK, - CALENDAROBJECTVALID_INVALIDFORMAT + CALENDAROBJECTVALID_UNITTESTFAIL = -1, + CALENDAROBJECTVALID_OK, + CALENDAROBJECTVALID_INVALIDFORMAT +}; + +enum CalendarAlarmAction{ + CALENDARALARM_UNSPECIFIED = -1, + CALENDARALARM_AUDIO, + CALENDARALARM_DISPLAY, + CALENDARALARM_EMAIL +}; + +struct CalendarAlarmDataStruct{ + + CalendarAlarmAction AlarmType = CALENDARALARM_UNSPECIFIED; + + string AlarmAction; + string AlarmActionTokens; + + string TriggerData; + string TriggerValue; + string TriggerTokens; + + string DescriptionData; + string DescriptionAltRep; + string DescriptionLanguage; + string DescriptionTokens; + + string RepeatData; + string RepeatTokens; + + string SummaryData; + string SummaryAltRep; + string SummaryLanguage; + string SummaryTokens; + + vector AttendeeList; + vector AttendeeListMember; + vector AttendeeListDelegatedFrom; + vector AttendeeListDelegatedTo; + vector AttendeeListRole; + vector AttendeeListRSVP; + vector AttendeeListDirectoryEntry; + vector AttendeeListSentBy; + vector AttendeeListCommonName; + vector AttendeeListCalendarUserType; + vector AttendeeListParticipationStatus; + vector AttendeeListLanguage; + vector AttendeeListTokens; + + string DurationData; + string DurationTokens; + + vector AttachList; + vector AttachListTokens; + vector AttachListEncoding; + vector AttachListFormatType; + vector AttachListValue; + + vector XTokensData; + vector XTokensDataTokens; + }; class CalendarObject{ @@ -223,11 +282,16 @@ class CalendarObject{ vector RequestStatusLanguage; vector RequestStatusTokens; + vector CalendarAlarmData; + protected: // Initial Loading Data. vector ObjectName; vector ObjectData; - + + vector> EventAlarmName; + vector> EventAlarmData; + private: virtual void ProcessData() {}; diff --git a/source/tests/xestiacalendar_icaleventload.h b/source/tests/xestiacalendar_icaleventload.h index d82f687..3085676 100644 --- a/source/tests/xestiacalendar_icaleventload.h +++ b/source/tests/xestiacalendar_icaleventload.h @@ -1069,5 +1069,27 @@ TEST(iCalendarEvent, ObjectDataTests){ ASSERT_EQ("None", XTokenData); ASSERT_EQ("X-PHANTOM-STATUS;HELP=NONE", XTokenName); + + // Tests for the first VALARM property. + + std::string ActionData; + std::string ActionDataTokens; + + if (TestEvent.CalendarAlarmData.size() > 0){ + + ActionData = TestEvent.CalendarAlarmData[0].AlarmAction; + + } + + if (TestEvent.CalendarAlarmData.size() > 0){ + + ActionDataTokens = TestEvent.CalendarAlarmData[0].AlarmActionTokens; + + } + + ASSERT_EQ("AUDIO", ActionData); + ASSERT_EQ("FUNKY=SOUNDS", ActionDataTokens); + + } \ No newline at end of file