X-Git-Url: http://Server1/repobrowser/?a=blobdiff_plain;f=source%2Fobjects%2Fcalendarevent%2FCalendarEvent.cpp;h=ab88fe4343f060850eeee02fdecfdc78166add5c;hb=284c77ac5ae39b716dca3b88b365dc335759af22;hp=372ffb1ee517559d45edbd8f28201ecc6b252691;hpb=ebf4a33fa2b816e8b0361c001dccb3079bd5708b;p=xestiacalendar%2F.git diff --git a/source/objects/calendarevent/CalendarEvent.cpp b/source/objects/calendarevent/CalendarEvent.cpp index 372ffb1..ab88fe4 100644 --- a/source/objects/calendarevent/CalendarEvent.cpp +++ b/source/objects/calendarevent/CalendarEvent.cpp @@ -180,6 +180,7 @@ void CalendarEventObject::ProcessData(){ multimap DataReceived; map PropertyData; string *PropertyNameData = nullptr; + int ObjectSeekCount = 0; // Get the Date Time Stamp (DTSTAMP). @@ -271,4 +272,1348 @@ void CalendarEventObject::ProcessData(){ } + // Process the data from CLASS. + + DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, false, "CLASS"); + + if (DataReceived.begin() != DataReceived.end()){ + + try { + ClassDataTokens = DataReceived.begin()->first.substr(6); + } + + catch(const out_of_range &oor){ + // Do nothing as there is no data. + } + + ClassData = DataReceived.begin()->second; + + } + + // Process the data from CREATED. + + DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, false, "CREATED"); + + if (DataReceived.begin() != DataReceived.end()){ + + try { + DateTimeCreatedTokens = DataReceived.begin()->first.substr(8); + } + + catch(const out_of_range &oor){ + // Do nothing as there is no data. + } + + DateTimeCreatedData = DataReceived.begin()->second; + + } + + // Process the data from DESCRIPTION. + + DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, false, "DESCRIPTION"); + + if (DataReceived.begin() != DataReceived.end()){ + + bool TokenData = false; + string PropertyTokens; + + PropertyNameData = (string*)&DataReceived.begin()->first; + + PropertyData = SplitValues(*PropertyNameData); + + for(map::iterator iter = PropertyData.begin(); + iter != PropertyData.end(); iter++){ + + if (iter->first == "ALTREP"){ + + DescriptionListAltRep.clear(); + DescriptionListAltRep.push_back(iter->second); + + } else if (iter->first == "LANGUAGE"){ + + DescriptionListLanguage.clear(); + DescriptionListLanguage.push_back(iter->second); + + } else { + + if (TokenData == false){ + TokenData = true; + } else { + PropertyTokens += ";"; + } + + PropertyTokens += iter->first; + PropertyTokens += "="; + PropertyTokens += iter->second; + + } + + } + + if (PropertyTokens.size() > 0){ + DescriptionListTokens.clear(); + DescriptionListTokens.push_back(PropertyTokens); + } + + DescriptionList.clear(); + DescriptionList.push_back(DataReceived.begin()->second); + + } + + // Process the data from GEO. + + DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, false, "GEO"); + + if (DataReceived.begin() != DataReceived.end()){ + + try { + GeographicTokens = DataReceived.begin()->first.substr(4); + } + + catch(const out_of_range &oor){ + // Do nothing as there is no data. + } + + GeographicData = DataReceived.begin()->second; + + } + + // Process the data from LAST-MODIFIED. + + DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, false, "LAST-MODIFIED"); + + if (DataReceived.begin() != DataReceived.end()){ + + try { + LastModifiedTokens = DataReceived.begin()->first.substr(14); + } + + catch(const out_of_range &oor){ + // Do nothing as there is no data. + } + + LastModifiedData = DataReceived.begin()->second; + + } + + // Process the data from LOCATION. + + DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, false, "LOCATION"); + + if (DataReceived.begin() != DataReceived.end()){ + + bool TokenData = false; + string PropertyTokens; + + PropertyNameData = (string*)&DataReceived.begin()->first; + + PropertyData = SplitValues(*PropertyNameData); + + for(map::iterator iter = PropertyData.begin(); + iter != PropertyData.end(); iter++){ + + if (iter->first == "ALTREP"){ + + LocationDataAltRep = iter->second; + + } else if (iter->first == "LANGUAGE"){ + + LocationDataLanguage = iter->second; + + } else { + + if (TokenData == false){ + TokenData = true; + } else { + PropertyTokens += ";"; + } + + PropertyTokens += iter->first; + PropertyTokens += "="; + PropertyTokens += iter->second; + + } + + } + + if (PropertyTokens.size() > 0){ + + LocationDataTokens = PropertyTokens; + + } + + LocationData = DataReceived.begin()->second; + + } + + // Process the data from ORGANIZER. + + DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, false, "ORGANIZER"); + + if (DataReceived.begin() != DataReceived.end()){ + + bool TokenData = false; + string PropertyTokens; + + PropertyNameData = (string*)&DataReceived.begin()->first; + + PropertyData = SplitValues(*PropertyNameData); + + for(map::iterator iter = PropertyData.begin(); + iter != PropertyData.end(); iter++){ + + if (iter->first == "CN"){ + + OrganiserDataCommonName = iter->second; + + } else if (iter->first == "DIR"){ + + OrganiserDataDirectoryEntry = iter->second; + + } else if (iter->first == "SENT-BY"){ + + OrganiserDataSentByParam = iter->second; + + } else if (iter->first == "LANGUAGE"){ + + OrganiserDataLanguage = iter->second; + + } else { + + if (TokenData == false){ + TokenData = true; + } else { + PropertyTokens += ";"; + } + + PropertyTokens += iter->first; + PropertyTokens += "="; + PropertyTokens += iter->second; + + } + + } + + if (PropertyTokens.size() > 0){ + + OrganiserDataTokens = PropertyTokens; + + } + + OrganiserData = DataReceived.begin()->second; + + } + + // Process the data from PRIORITY. + + DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, false, "PRIORITY"); + + if (DataReceived.begin() != DataReceived.end()){ + + try { + PriorityTokens = DataReceived.begin()->first.substr(9); + } + + catch(const out_of_range &oor){ + // Do nothing as there is no data. + } + + try { + PriorityData = stoi(DataReceived.begin()->second); + } + + catch(const invalid_argument &oor){ + PriorityTokens.clear(); + } + + } + + // Process the data from SEQUENCE. + + DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, false, "SEQUENCE"); + + if (DataReceived.begin() != DataReceived.end()){ + + try { + SequenceTokens = DataReceived.begin()->first.substr(9); + } + + catch(const out_of_range &oor){ + // Do nothing as there is no data. + } + + try { + SequenceData = stoi(DataReceived.begin()->second); + } + + catch(const invalid_argument &oor){ + SequenceTokens.clear(); + } + + } + + // Process the data from STATUS. + + DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, false, "STATUS"); + + if (DataReceived.begin() != DataReceived.end()){ + + bool TokenData = false; + string PropertyTokens; + + PropertyNameData = (string*)&DataReceived.begin()->first; + + PropertyData = SplitValues(*PropertyNameData); + + for(map::iterator iter = PropertyData.begin(); + iter != PropertyData.end(); iter++){ + + if (iter->first == "LANGUAGE"){ + + StatusLanguage = iter->second; + + } else { + + if (TokenData == false){ + TokenData = true; + } else { + PropertyTokens += ";"; + } + + PropertyTokens += iter->first; + PropertyTokens += "="; + PropertyTokens += iter->second; + + } + + } + + if (PropertyTokens.size() > 0){ + + StatusTokens = PropertyTokens; + + } + + StatusData = DataReceived.begin()->second; + + } + + // Process the data from SUMMARY. + + DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, false, "SUMMARY"); + + if (DataReceived.begin() != DataReceived.end()){ + + bool TokenData = false; + string PropertyTokens; + + PropertyNameData = (string*)&DataReceived.begin()->first; + + PropertyData = SplitValues(*PropertyNameData); + + for(map::iterator iter = PropertyData.begin(); + iter != PropertyData.end(); iter++){ + + if (iter->first == "ALTREP"){ + + SummaryDataAltRep = iter->second; + + } else if (iter->first == "LANGUAGE"){ + + SummaryDataLanguage = iter->second; + + } else { + + if (TokenData == false){ + TokenData = true; + } else { + PropertyTokens += ";"; + } + + PropertyTokens += iter->first; + PropertyTokens += "="; + PropertyTokens += iter->second; + + } + + } + + if (PropertyTokens.size() > 0){ + + SummaryDataTokens = PropertyTokens; + + } + + SummaryData = DataReceived.begin()->second; + + } + + // Process the data from TRANSP. + + DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, false, "TRANSP"); + + if (DataReceived.begin() != DataReceived.end()){ + + try { + TimeTransparencyDataTokens = DataReceived.begin()->first.substr(7); + } + + catch(const out_of_range &oor){ + // Do nothing as there is no data. + } + + TimeTransparencyData = DataReceived.begin()->second; + + } + + // Process the data from URL. + + DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, false, "URL"); + + if (DataReceived.begin() != DataReceived.end()){ + + try { + URLDataTokens = DataReceived.begin()->first.substr(4); + } + + catch(const out_of_range &oor){ + // Do nothing as there is no data. + } + + URLData = DataReceived.begin()->second; + + } + + // Process the data from RECURRENCE-ID. + + DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, false, "RECURRENCE-ID"); + + if (DataReceived.begin() != DataReceived.end()){ + + bool TokenData = false; + string PropertyTokens; + + PropertyNameData = (string*)&DataReceived.begin()->first; + + PropertyData = SplitValues(*PropertyNameData); + + for(map::iterator iter = PropertyData.begin(); + iter != PropertyData.end(); iter++){ + + if (iter->first == "TZID"){ + + RecurranceIDDataTimeZoneParam = iter->second; + + } else if (iter->first == "VALUE"){ + + RecurranceIDDataValue = iter->second; + + } else if (iter->first == "RANGE"){ + + RecurranceIDDataRangeParam = iter->second; + + } else { + + if (TokenData == false){ + TokenData = true; + } else { + PropertyTokens += ";"; + } + + PropertyTokens += iter->first; + PropertyTokens += "="; + PropertyTokens += iter->second; + + } + + } + + if (PropertyTokens.size() > 0){ + + RecurranceIDDataTokens = PropertyTokens; + + } + + RecurranceIDData = DataReceived.begin()->second; + + } + + // Process the data from RRULE. + + DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, false, "RRULE"); + + if (DataReceived.begin() != DataReceived.end()){ + + try { + RecurranceRuleDataTokens = DataReceived.begin()->first.substr(6); + } + + catch(const out_of_range &oor){ + // Do nothing as there is no data. + } + + RecurranceRuleData = DataReceived.begin()->second; + + } + + // Process the data from DTEND. + + bool DateTimeEndProcessed = false; + + DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, false, "DTEND"); + + if (DataReceived.begin() != DataReceived.end()){ + + bool TokenData = false; + string PropertyTokens; + + PropertyNameData = (string*)&DataReceived.begin()->first; + + PropertyData = SplitValues(*PropertyNameData); + + for(map::iterator iter = PropertyData.begin(); + iter != PropertyData.end(); iter++){ + + if (iter->first == "VALUE"){ + + DateTimeEndDataValue = iter->second; + + } else if (iter->first == "TZID"){ + + DateTimeEndDataTimeZoneID = iter->second; + + } else { + + if (TokenData == false){ + TokenData = true; + } else { + PropertyTokens += ";"; + } + + PropertyTokens += iter->first; + PropertyTokens += "="; + PropertyTokens += iter->second; + + } + + } + + if (PropertyTokens.size() > 0){ + DateTimeEndDataTokens = PropertyTokens; + } + + DateTimeEndData = DataReceived.begin()->second; + + DateTimeEndProcessed = true; + + } + + if (DateTimeEndProcessed == false){ + + // Process the data from DURATION if DTEND + // hasn't already been processed. + + DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, false, "DURATION"); + + if (DataReceived.begin() != DataReceived.end()){ + + try { + DurationDataTokens = DataReceived.begin()->first.substr(9); + } + + catch(const out_of_range &oor){ + // Do nothing as there is no data. + } + + DurationData = DataReceived.begin()->second; + + } + + } + + // Process the data from ATTACH. + + DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, true, "ATTACH"); + + for(multimap::iterator iter = DataReceived.begin(); + iter != DataReceived.end(); + ++iter){ + + AttachListEncoding.push_back(""); + AttachListValue.push_back(""); + AttachListFormatType.push_back(""); + AttachListTokens.push_back(""); + AttachList.push_back(""); + + bool TokenData = false; + string PropertyTokens; + + PropertyNameData = (string*)&iter->first; + + PropertyData = SplitValues(*PropertyNameData); + + for(map::iterator dataiter = PropertyData.begin(); + dataiter != PropertyData.end(); dataiter++){ + + if (dataiter->first == "ENCODING"){ + + AttachListEncoding[ObjectSeekCount] = dataiter->second; + + } else if (dataiter->first == "VALUE"){ + + AttachListValue[ObjectSeekCount] = dataiter->second; + + } else if (dataiter->first == "FMTTYPE"){ + + AttachListFormatType[ObjectSeekCount] = dataiter->second; + + } else { + + if (TokenData == false){ + TokenData = true; + } else { + PropertyTokens += ";"; + } + + PropertyTokens += dataiter->first; + PropertyTokens += "="; + PropertyTokens += dataiter->second; + + } + + } + + if (PropertyTokens.size() > 0){ + AttachListTokens[ObjectSeekCount] = PropertyTokens; + } + + AttachList[ObjectSeekCount] = iter->second; + + ObjectSeekCount++; + + } + + // Process the data from ATTENDEE. + + DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, true, "ATTENDEE"); + + ObjectSeekCount = 0; + + for(multimap::iterator iter = DataReceived.begin(); + iter != DataReceived.end(); + ++iter){ + + AttendeeListMember.push_back(""); + AttendeeListDelegatedFrom.push_back(""); + AttendeeListDelegatedTo.push_back(""); + AttendeeListRole.push_back(""); + AttendeeListRSVP.push_back(""); + AttendeeListDirectoryEntry.push_back(""); + AttendeeListSentBy.push_back(""); + AttendeeListCommonName.push_back(""); + AttendeeListCalendarUserType.push_back(""); + AttendeeListParticipationStatus.push_back(""); + AttendeeListLanguage.push_back(""); + AttendeeListTokens.push_back(""); + AttendeeList.push_back(""); + + bool TokenData = false; + string PropertyTokens; + + PropertyNameData = (string*)&iter->first; + + PropertyData = SplitValues(*PropertyNameData); + + for(map::iterator dataiter = PropertyData.begin(); + dataiter != PropertyData.end(); dataiter++){ + + if (dataiter->first == "CUTYPE"){ + + AttendeeListCalendarUserType[ObjectSeekCount] = dataiter->second; + + } else if (dataiter->first == "MEMBER"){ + + AttendeeListMember[ObjectSeekCount] = dataiter->second; + + } else if (dataiter->first == "ROLE"){ + + AttendeeListRole[ObjectSeekCount] = dataiter->second; + + } else if (dataiter->first == "PARTSTAT"){ + + AttendeeListParticipationStatus[ObjectSeekCount] = dataiter->second; + + } else if (dataiter->first == "RSVP"){ + + AttendeeListRSVP[ObjectSeekCount] = dataiter->second; + + } else if (dataiter->first == "DELEGATED-TO"){ + + AttendeeListDelegatedTo[ObjectSeekCount] = dataiter->second; + + } else if (dataiter->first == "DELEGATED-FROM"){ + + AttendeeListDelegatedFrom[ObjectSeekCount] = dataiter->second; + + } else if (dataiter->first == "SENT-BY"){ + + AttendeeListSentBy[ObjectSeekCount] = dataiter->second; + + } else if (dataiter->first == "CN"){ + + AttendeeListCommonName[ObjectSeekCount] = dataiter->second; + + } else if (dataiter->first == "DIR"){ + + AttendeeListDirectoryEntry[ObjectSeekCount] = dataiter->second; + + } else if (dataiter->first == "LANGUAGE"){ + + AttendeeListLanguage[ObjectSeekCount] = dataiter->second; + + } else { + + if (TokenData == false){ + TokenData = true; + } else { + PropertyTokens += ";"; + } + + PropertyTokens += dataiter->first; + PropertyTokens += "="; + PropertyTokens += dataiter->second; + + } + + } + + if (PropertyTokens.size() > 0){ + AttendeeListTokens[ObjectSeekCount] = PropertyTokens; + } + + AttendeeList[ObjectSeekCount] = iter->second; + + ObjectSeekCount++; + + } + + // Process the data from CATEGORIES. + + DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, true, "CATEGORIES"); + + ObjectSeekCount = 0; + + for(multimap::iterator iter = DataReceived.begin(); + iter != DataReceived.end(); + ++iter){ + + CategoriesListTokens.push_back(""); + CategoriesListLanguage.push_back(""); + CategoriesList.push_back(""); + + bool TokenData = false; + string PropertyTokens; + + PropertyNameData = (string*)&iter->first; + + PropertyData = SplitValues(*PropertyNameData); + + for(map::iterator dataiter = PropertyData.begin(); + dataiter != PropertyData.end(); dataiter++){ + + if (dataiter->first == "LANGUAGE"){ + + CategoriesListLanguage[ObjectSeekCount] = dataiter->second; + + } else { + + if (TokenData == false){ + TokenData = true; + } else { + PropertyTokens += ";"; + } + + PropertyTokens += dataiter->first; + PropertyTokens += "="; + PropertyTokens += dataiter->second; + + } + + } + + if (PropertyTokens.size() > 0){ + CategoriesListTokens[ObjectSeekCount] = PropertyTokens; + } + + CategoriesList[ObjectSeekCount] = iter->second; + + ObjectSeekCount++; + + } + + // Process the data from COMMENT. + + DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, true, "COMMENT"); + + ObjectSeekCount = 0; + + for(multimap::iterator iter = DataReceived.begin(); + iter != DataReceived.end(); + ++iter){ + + CommentListTokens.push_back(""); + CommentListAltRep.push_back(""); + CommentListLanguage.push_back(""); + CommentList.push_back(""); + + bool TokenData = false; + string PropertyTokens; + + PropertyNameData = (string*)&iter->first; + + PropertyData = SplitValues(*PropertyNameData); + + for(map::iterator dataiter = PropertyData.begin(); + dataiter != PropertyData.end(); dataiter++){ + + if (dataiter->first == "ALTREP"){ + + CommentListAltRep[ObjectSeekCount] = dataiter->second; + + } else if (dataiter->first == "LANGUAGE"){ + + CommentListLanguage[ObjectSeekCount] = dataiter->second; + + } else { + + if (TokenData == false){ + TokenData = true; + } else { + PropertyTokens += ";"; + } + + PropertyTokens += dataiter->first; + PropertyTokens += "="; + PropertyTokens += dataiter->second; + + } + + } + + if (PropertyTokens.size() > 0){ + CommentListTokens[ObjectSeekCount] = PropertyTokens; + } + + CommentList[ObjectSeekCount] = iter->second; + + ObjectSeekCount++; + + } + + // Process the data from CONTACT. + + DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, true, "CONTACT"); + + ObjectSeekCount = 0; + + for(multimap::iterator iter = DataReceived.begin(); + iter != DataReceived.end(); + ++iter){ + + ContactListTokens.push_back(""); + ContactListAltRep.push_back(""); + ContactListLanguage.push_back(""); + ContactList.push_back(""); + + bool TokenData = false; + string PropertyTokens; + + PropertyNameData = (string*)&iter->first; + + PropertyData = SplitValues(*PropertyNameData); + + for(map::iterator dataiter = PropertyData.begin(); + dataiter != PropertyData.end(); dataiter++){ + + if (dataiter->first == "ALTREP"){ + + ContactListAltRep[ObjectSeekCount] = dataiter->second; + + } else if (dataiter->first == "LANGUAGE"){ + + ContactListLanguage[ObjectSeekCount] = dataiter->second; + + } else { + + if (TokenData == false){ + TokenData = true; + } else { + PropertyTokens += ";"; + } + + PropertyTokens += dataiter->first; + PropertyTokens += "="; + PropertyTokens += dataiter->second; + + } + + } + + if (PropertyTokens.size() > 0){ + ContactListTokens[ObjectSeekCount] = PropertyTokens; + } + + ContactList[ObjectSeekCount] = iter->second; + + ObjectSeekCount++; + + } + + // Process the data from EXDATE. + + DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, true, "EXDATE"); + + ObjectSeekCount = 0; + + for(multimap::iterator iter = DataReceived.begin(); + iter != DataReceived.end(); + ++iter){ + + ExcludeDateDataTokens.push_back(""); + ExcludeDateDataValue.push_back(""); + ExcludeDateDataTimeZoneParam.push_back(""); + ExcludeDateData.push_back(""); + + bool TokenData = false; + string PropertyTokens; + + PropertyNameData = (string*)&iter->first; + + PropertyData = SplitValues(*PropertyNameData); + + for(map::iterator dataiter = PropertyData.begin(); + dataiter != PropertyData.end(); dataiter++){ + + if (dataiter->first == "VALUE"){ + + ExcludeDateDataValue[ObjectSeekCount] = dataiter->second; + + } else if (dataiter->first == "TZID"){ + + ExcludeDateDataTimeZoneParam[ObjectSeekCount] = dataiter->second; + + } else { + + if (TokenData == false){ + TokenData = true; + } else { + PropertyTokens += ";"; + } + + PropertyTokens += dataiter->first; + PropertyTokens += "="; + PropertyTokens += dataiter->second; + + } + + } + + if (PropertyTokens.size() > 0){ + ExcludeDateDataTokens[ObjectSeekCount] = PropertyTokens; + } + + ExcludeDateData[ObjectSeekCount] = iter->second; + + ObjectSeekCount++; + + } + + // Process the data from REQUEST-STATUS. + + DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, true, "REQUEST-STATUS"); + + ObjectSeekCount = 0; + + for(multimap::iterator iter = DataReceived.begin(); + iter != DataReceived.end(); + ++iter){ + + RequestStatusTokens.push_back(""); + RequestStatusLanguage.push_back(""); + RequestStatusData.push_back(""); + + bool TokenData = false; + string PropertyTokens; + + PropertyNameData = (string*)&iter->first; + + PropertyData = SplitValues(*PropertyNameData); + + for(map::iterator dataiter = PropertyData.begin(); + dataiter != PropertyData.end(); dataiter++){ + + if (dataiter->first == "LANGUAGE"){ + + RequestStatusLanguage[ObjectSeekCount] = dataiter->second; + + } else { + + if (TokenData == false){ + TokenData = true; + } else { + PropertyTokens += ";"; + } + + PropertyTokens += dataiter->first; + PropertyTokens += "="; + PropertyTokens += dataiter->second; + + } + + } + + if (PropertyTokens.size() > 0){ + RequestStatusTokens[ObjectSeekCount] = PropertyTokens; + } + + RequestStatusData[ObjectSeekCount] = iter->second; + + ObjectSeekCount++; + + } + + // Process the data from RELATED-TO. + + DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, true, "RELATED-TO"); + + ObjectSeekCount = 0; + + for(multimap::iterator iter = DataReceived.begin(); + iter != DataReceived.end(); + ++iter){ + + RelatedToDataTokens.push_back(""); + RelatedToDataRelationType.push_back(""); + RelatedToData.push_back(""); + + bool TokenData = false; + string PropertyTokens; + + PropertyNameData = (string*)&iter->first; + + PropertyData = SplitValues(*PropertyNameData); + + for(map::iterator dataiter = PropertyData.begin(); + dataiter != PropertyData.end(); dataiter++){ + + if (dataiter->first == "RELTYPE"){ + + RelatedToDataRelationType[ObjectSeekCount] = dataiter->second; + + } else { + + if (TokenData == false){ + TokenData = true; + } else { + PropertyTokens += ";"; + } + + PropertyTokens += dataiter->first; + PropertyTokens += "="; + PropertyTokens += dataiter->second; + + } + + } + + if (PropertyTokens.size() > 0){ + RelatedToDataTokens[ObjectSeekCount] = PropertyTokens; + } + + RelatedToData[ObjectSeekCount] = iter->second; + + ObjectSeekCount++; + + } + + // Process the data from RESOURCES. + + DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, true, "RESOURCES"); + + ObjectSeekCount = 0; + + for(multimap::iterator iter = DataReceived.begin(); + iter != DataReceived.end(); + ++iter){ + + ResourcesDataTokens.push_back(""); + ResourcesDataAltRep.push_back(""); + ResourcesDataLanguage.push_back(""); + ResourcesData.push_back(""); + + bool TokenData = false; + string PropertyTokens; + + PropertyNameData = (string*)&iter->first; + + PropertyData = SplitValues(*PropertyNameData); + + for(map::iterator dataiter = PropertyData.begin(); + dataiter != PropertyData.end(); dataiter++){ + + if (dataiter->first == "ALTREP"){ + + ResourcesDataAltRep[ObjectSeekCount] = dataiter->second; + + } else if (dataiter->first == "LANGUAGE"){ + + ResourcesDataLanguage[ObjectSeekCount] = dataiter->second; + + } else { + + if (TokenData == false){ + TokenData = true; + } else { + PropertyTokens += ";"; + } + + PropertyTokens += dataiter->first; + PropertyTokens += "="; + PropertyTokens += dataiter->second; + + } + + } + + if (PropertyTokens.size() > 0){ + ResourcesDataTokens[ObjectSeekCount] = PropertyTokens; + } + + ResourcesData[ObjectSeekCount] = iter->second; + + ObjectSeekCount++; + + } + + // Process the data from RDATE. + + DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, true, "RDATE"); + + ObjectSeekCount = 0; + + for(multimap::iterator iter = DataReceived.begin(); + iter != DataReceived.end(); + ++iter){ + + RecurranceDateDataTokens.push_back(""); + RecurranceDateDataValue.push_back(""); + RecurranceDateDataTimeZoneParam.push_back(""); + RecurranceDateData.push_back(""); + + bool TokenData = false; + string PropertyTokens; + + PropertyNameData = (string*)&iter->first; + + PropertyData = SplitValues(*PropertyNameData); + + for(map::iterator dataiter = PropertyData.begin(); + dataiter != PropertyData.end(); dataiter++){ + + if (dataiter->first == "VALUE"){ + + RecurranceDateDataValue[ObjectSeekCount] = dataiter->second; + + } else if (dataiter->first == "TZID"){ + + RecurranceDateDataTimeZoneParam[ObjectSeekCount] = dataiter->second; + + } else { + + if (TokenData == false){ + TokenData = true; + } else { + PropertyTokens += ";"; + } + + PropertyTokens += dataiter->first; + PropertyTokens += "="; + PropertyTokens += dataiter->second; + + } + + } + + if (PropertyTokens.size() > 0){ + RecurranceDateDataTokens[ObjectSeekCount] = PropertyTokens; + } + + RecurranceDateData[ObjectSeekCount] = iter->second; + + ObjectSeekCount++; + + } + + // 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-* + + for(vector::iterator iter = ObjectName.begin(); + iter != ObjectName.end(); ++iter){ + + bool TokenData = false; + string PropertyTokens; + + if (iter->substr(0,2) == "X-" && + iter->size() > 2){ + + XTokensData.push_back(ObjectData[ObjectSeekCount]); + XTokensDataTokens.push_back(ObjectName[ObjectSeekCount]); + + } + + ObjectSeekCount++; + + } + } + +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