}
+ // Process Alarm section.
+
+ ProcessAlarms();
+
+ int SeekCount = 0;
+ int AlarmObjectCount = 0;
+
+ bool AlarmActionFound = false;
+
+ for (vector<vector<string>>::iterator iter = EventAlarmName.begin();
+ iter != EventAlarmName.end(); iter++){
+
+ CalendarAlarmDataStruct NewAlarmData;
+
+ // Process the data from ACTION.
+
+ bool AlarmActionFound = false;
+ bool AlarmTriggerFound = false;
+ bool AlarmDurationFound = false;
+ bool AlarmDescriptionFound = 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;
+
+ }
+
+ // Process the data from TRIGGER.
+
+ DataReceived = ProcessTextVectors(&EventAlarmName[SeekCount], &EventAlarmData[SeekCount], false, "TRIGGER");
+
+ if (DataReceived.begin() != DataReceived.end()){
+
+ bool TokenData = false;
+ string PropertyTokens;
+
+ PropertyNameData = (string*)&DataReceived.begin()->first;
+
+ PropertyData = SplitValues(*PropertyNameData);
+
+ for(map<string,string>::iterator iter = PropertyData.begin();
+ iter != PropertyData.end(); iter++){
+
+ if (iter->first == "VALUE"){
+
+ NewAlarmData.TriggerValue = iter->second;
+
+ } else if (iter->first == "RELATED"){
+
+ NewAlarmData.TriggerRelated = iter->second;
+
+ } else {
+
+ if (TokenData == false){
+ TokenData = true;
+ } else {
+ PropertyTokens += ";";
+ }
+
+ PropertyTokens += iter->first;
+ PropertyTokens += "=";
+ PropertyTokens += iter->second;
+
+ }
+
+ }
+
+ if (PropertyTokens.size() > 0){
+ NewAlarmData.TriggerTokens = PropertyTokens;
+ }
+
+ NewAlarmData.TriggerData = DataReceived.begin()->second;
+ AlarmTriggerFound = true;
+
+ }
+
+ // Process the data from DESCRIPTION.
+
+ DataReceived = ProcessTextVectors(&EventAlarmName[SeekCount], &EventAlarmData[SeekCount], false, "DESCRIPTION");
+
+ if (DataReceived.begin() != DataReceived.end() &&
+ (NewAlarmData.AlarmType == CALENDARALARM_DISPLAY ||
+ NewAlarmData.AlarmType == CALENDARALARM_EMAIL)){
+
+ bool TokenData = false;
+ string PropertyTokens;
+
+ PropertyNameData = (string*)&DataReceived.begin()->first;
+
+ PropertyData = SplitValues(*PropertyNameData);
+
+ for(map<string,string>::iterator iter = PropertyData.begin();
+ iter != PropertyData.end(); iter++){
+
+ if (iter->first == "ALTREP"){
+
+ NewAlarmData.DescriptionAltRep = iter->second;
+
+ } else if (iter->first == "LANGUAGE"){
+
+ NewAlarmData.DescriptionLanguage = iter->second;
+
+ } else {
+
+ if (TokenData == false){
+ TokenData = true;
+ } else {
+ PropertyTokens += ";";
+ }
+
+ PropertyTokens += iter->first;
+ PropertyTokens += "=";
+ PropertyTokens += iter->second;
+
+ }
+
+ }
+
+ if (PropertyTokens.size() > 0){
+ NewAlarmData.DescriptionTokens = PropertyTokens;
+ }
+
+ NewAlarmData.DescriptionData = DataReceived.begin()->second;
+ AlarmDescriptionFound = true;
+
+ }
+
+ // TODO: Implement SUMMARY.
+
+ // Process data from DURATION.
+
+ DataReceived = ProcessTextVectors(&EventAlarmName[SeekCount], &EventAlarmData[SeekCount], false, "DURATION");
+
+ if (DataReceived.begin() != DataReceived.end()){
+
+ try {
+ NewAlarmData.DurationTokens = DataReceived.begin()->first.substr(9);
+ }
+
+ catch(const out_of_range &oor){
+ // Do nothing as there is no data.
+ }
+
+ NewAlarmData.DurationData = DataReceived.begin()->second;
+ AlarmDurationFound = true;
+
+ }
+
+ // Process data from REPEAT.
+
+ DataReceived = ProcessTextVectors(&EventAlarmName[SeekCount], &EventAlarmData[SeekCount], false, "REPEAT");
+
+ if (DataReceived.begin() != DataReceived.end() && AlarmDurationFound == true){
+
+ try {
+ NewAlarmData.RepeatTokens = DataReceived.begin()->first.substr(7);
+ }
+
+ catch(const out_of_range &oor){
+ // Do nothing as there is no data.
+ }
+
+ NewAlarmData.RepeatData = DataReceived.begin()->second;
+
+ } else {
+
+ NewAlarmData.DurationData.clear();
+ NewAlarmData.DurationTokens.clear();
+
+ }
+
+ // Process data from X-*
+
+ AlarmObjectCount = 0;
+
+ for(vector<string>::iterator xtokeniter = EventAlarmName[SeekCount].begin();
+ xtokeniter != EventAlarmName[SeekCount].end(); ++xtokeniter){
+
+ bool TokenData = false;
+ string PropertyTokens;
+
+ if (xtokeniter->substr(0,2) == "X-" &&
+ xtokeniter->size() > 2){
+
+ NewAlarmData.XTokensData.push_back(EventAlarmData[SeekCount][AlarmObjectCount]);
+ NewAlarmData.XTokensDataTokens.push_back(EventAlarmName[SeekCount][AlarmObjectCount]);
+
+ }
+
+ AlarmObjectCount++;
+
+ }
+
+ if (NewAlarmData.AlarmType == CALENDARALARM_AUDIO &&
+ AlarmActionFound == true &&
+ AlarmTriggerFound == true){
+
+ CalendarAlarmData.push_back(NewAlarmData);
+
+ } else if (NewAlarmData.AlarmType == CALENDARALARM_DISPLAY &&
+ AlarmActionFound == true &&
+ AlarmTriggerFound == true &&
+ AlarmDescriptionFound == true){
+
+ CalendarAlarmData.push_back(NewAlarmData);
+
+ }
+
+ SeekCount++;
+
+ }
+
ObjectSeekCount = 0;
// Process data from X-*
}
}
+
+void CalendarEventObject::ProcessAlarms(){
+
+ int SeekCount = 0;
+
+ bool TZMode = false; // False = STANDARD, True = DAYLIGHT.
+ bool ValidBegin = false;
+ vector<string> EventObjectName;
+ vector<string> EventObjectData;
+
+ for (vector<string>::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