}
- // Process Alarm section.
-
- ProcessAlarms();
+ // Process VALARM section.
int SeekCount = 0;
+ int AlarmObjectCount = 0;
bool AlarmActionFound = false;
bool AlarmActionFound = false;
bool AlarmTriggerFound = false;
+ bool AlarmDurationFound = false;
+ bool AlarmDescriptionFound = false;
+ bool AlarmSummaryFound = false;
DataReceived = ProcessTextVectors(&EventAlarmName[SeekCount],
&EventAlarmData[SeekCount], false, "ACTION");
// Process the data from TRIGGER.
- DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, false, "TRIGGER");
+ DataReceived = ProcessTextVectors(&EventAlarmName[SeekCount], &EventAlarmData[SeekCount], false, "TRIGGER");
if (DataReceived.begin() != DataReceived.end()){
}
NewAlarmData.TriggerData = DataReceived.begin()->second;
+ AlarmTriggerFound = true;
}
- if (NewAlarmData.AlarmType == CALENDARALARM_AUDIO &&
- AlarmActionFound == true){
+ // Process the data from DESCRIPTION.
- CalendarAlarmData.push_back(NewAlarmData);
+ 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;
+
}
-
- SeekCount++;
-
- }
-
- ObjectSeekCount = 0;
+
+ // Process data from SUMMARY.
+
+ DataReceived = ProcessTextVectors(&EventAlarmName[SeekCount], &EventAlarmData[SeekCount], false, "SUMMARY");
- // Process data from X-*
+ if (DataReceived.begin() != DataReceived.end() &&
+ NewAlarmData.AlarmType == CALENDARALARM_EMAIL){
- for(vector<string>::iterator iter = ObjectName.begin();
- iter != ObjectName.end(); ++iter){
-
- bool TokenData = false;
- string PropertyTokens;
+ bool TokenData = false;
+ string PropertyTokens;
- if (iter->substr(0,2) == "X-" &&
- iter->size() > 2){
+ PropertyNameData = (string*)&DataReceived.begin()->first;
+
+ PropertyData = SplitValues(*PropertyNameData);
+
+ for(map<string,string>::iterator iter = PropertyData.begin();
+ iter != PropertyData.end(); iter++){
- XTokensData.push_back(ObjectData[ObjectSeekCount]);
- XTokensDataTokens.push_back(ObjectName[ObjectSeekCount]);
+ if (iter->first == "ALTREP"){
+ NewAlarmData.SummaryAltRep = iter->second;
+
+ } else if (iter->first == "LANGUAGE"){
+
+ NewAlarmData.SummaryLanguage = iter->second;
+
+ } else {
+
+ if (TokenData == false){
+ TokenData = true;
+ } else {
+ PropertyTokens += ";";
+ }
+
+ PropertyTokens += iter->first;
+ PropertyTokens += "=";
+ PropertyTokens += iter->second;
+
+ }
+
+ }
+
+ if (PropertyTokens.size() > 0){
+ NewAlarmData.SummaryTokens = PropertyTokens;
+ }
+
+ NewAlarmData.SummaryData = DataReceived.begin()->second;
+ AlarmSummaryFound = true;
+
}
- ObjectSeekCount++;
+ // Process data from DURATION.
- }
+ DataReceived = ProcessTextVectors(&EventAlarmName[SeekCount], &EventAlarmData[SeekCount], false, "DURATION");
+
+ if (DataReceived.begin() != DataReceived.end()){
-}
-
-void CalendarEventObject::ProcessAlarms(){
-
- int SeekCount = 0;
+ 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){
- bool TZMode = false; // False = STANDARD, True = DAYLIGHT.
- bool ValidBegin = false;
- vector<string> EventObjectName;
- vector<string> EventObjectData;
+ 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 ATTENDEE.
+
+ DataReceived = ProcessTextVectors(&EventAlarmName[SeekCount], &EventAlarmData[SeekCount], true, "ATTENDEE");
- for (vector<string>::iterator iter = ObjectName.begin();
- iter != ObjectName.end(); iter++){
+ ObjectSeekCount = 0;
- // Check if the current name is BEGIN and
- // data is either STANDARD or DAYLIGHT.
+ for(multimap<string,string>::iterator iter = DataReceived.begin();
+ iter != DataReceived.end();
+ ++iter){
- if (ObjectName[SeekCount] == "BEGIN" &&
- ObjectData[SeekCount] == "VALARM"){
+ NewAlarmData.AttendeeListMember.push_back("");
+ NewAlarmData.AttendeeListDelegatedFrom.push_back("");
+ NewAlarmData.AttendeeListDelegatedTo.push_back("");
+ NewAlarmData.AttendeeListRole.push_back("");
+ NewAlarmData.AttendeeListRSVP.push_back("");
+ NewAlarmData.AttendeeListDirectoryEntry.push_back("");
+ NewAlarmData.AttendeeListSentBy.push_back("");
+ NewAlarmData.AttendeeListCommonName.push_back("");
+ NewAlarmData.AttendeeListCalendarUserType.push_back("");
+ NewAlarmData.AttendeeListParticipationStatus.push_back("");
+ NewAlarmData.AttendeeListLanguage.push_back("");
+ NewAlarmData.AttendeeListTokens.push_back("");
+ NewAlarmData.AttendeeList.push_back("");
- if (ValidBegin == false){
- ValidBegin = true;
- EventObjectName.clear();
- EventObjectData.clear();
- } else {
+ bool TokenData = false;
+ string PropertyTokens;
+
+ PropertyNameData = (string*)&iter->first;
+
+ PropertyData = SplitValues(*PropertyNameData);
+
+ for(map<string,string>::iterator dataiter = PropertyData.begin();
+ dataiter != PropertyData.end(); dataiter++){
+
+ if (dataiter->first == "CUTYPE"){
+
+ NewAlarmData.AttendeeListCalendarUserType[ObjectSeekCount] = dataiter->second;
+
+ } else if (dataiter->first == "MEMBER"){
+
+ NewAlarmData.AttendeeListMember[ObjectSeekCount] = dataiter->second;
+
+ } else if (dataiter->first == "ROLE"){
+
+ NewAlarmData.AttendeeListRole[ObjectSeekCount] = dataiter->second;
+
+ } else if (dataiter->first == "PARTSTAT"){
+
+ NewAlarmData.AttendeeListParticipationStatus[ObjectSeekCount] = dataiter->second;
+
+ } else if (dataiter->first == "RSVP"){
+
+ NewAlarmData.AttendeeListRSVP[ObjectSeekCount] = dataiter->second;
+
+ } else if (dataiter->first == "DELEGATED-TO"){
+
+ NewAlarmData.AttendeeListDelegatedTo[ObjectSeekCount] = dataiter->second;
+
+ } else if (dataiter->first == "DELEGATED-FROM"){
+
+ NewAlarmData.AttendeeListDelegatedFrom[ObjectSeekCount] = dataiter->second;
+
+ } else if (dataiter->first == "SENT-BY"){
+
+ NewAlarmData.AttendeeListSentBy[ObjectSeekCount] = dataiter->second;
+
+ } else if (dataiter->first == "CN"){
+
+ NewAlarmData.AttendeeListCommonName[ObjectSeekCount] = dataiter->second;
+
+ } else if (dataiter->first == "DIR"){
+
+ NewAlarmData.AttendeeListDirectoryEntry[ObjectSeekCount] = dataiter->second;
+
+ } else if (dataiter->first == "LANGUAGE"){
+
+ NewAlarmData.AttendeeListLanguage[ObjectSeekCount] = dataiter->second;
+
+ } else {
+
+ if (TokenData == false){
+ TokenData = true;
+ } else {
+ PropertyTokens += ";";
+ }
+
+ PropertyTokens += dataiter->first;
+ PropertyTokens += "=";
+ PropertyTokens += dataiter->second;
+
+ }
}
+
+ if (PropertyTokens.size() > 0){
+ NewAlarmData.AttendeeListTokens[ObjectSeekCount] = PropertyTokens;
+ }
- SeekCount++;
- continue;
-
+ NewAlarmData.AttendeeList[ObjectSeekCount] = iter->second;
+
+ ObjectSeekCount++;
+
}
- // Check if current name is END and
- // data is either STANDARD or DAYLIGHT.
+ // Process data from ATTACH.
- if (ObjectName[SeekCount] == "END" &&
- ObjectData[SeekCount] == "VALARM" &&
- ValidBegin == true){
-
- EventAlarmName.push_back(EventObjectName);
- EventAlarmData.push_back(EventObjectData);
+ DataReceived = ProcessTextVectors(&EventAlarmName[SeekCount], &EventAlarmData[SeekCount], true, "ATTACH");
+
+ ObjectSeekCount = 0;
+
+ for(multimap<string,string>::iterator iter = DataReceived.begin();
+ iter != DataReceived.end();
+ ++iter){
+
+ NewAlarmData.AttachListEncoding.push_back("");
+ NewAlarmData.AttachListValue.push_back("");
+ NewAlarmData.AttachListFormatType.push_back("");
+ NewAlarmData.AttachListTokens.push_back("");
+ NewAlarmData.AttachList.push_back("");
- EventObjectName.clear();
- EventObjectData.clear();
+ bool TokenData = false;
+ string PropertyTokens;
+
+ PropertyNameData = (string*)&iter->first;
+
+ PropertyData = SplitValues(*PropertyNameData);
- ValidBegin = false;
+ for(map<string,string>::iterator dataiter = PropertyData.begin();
+ dataiter != PropertyData.end(); dataiter++){
+
+ if (dataiter->first == "ENCODING"){
+
+ NewAlarmData.AttachListEncoding[ObjectSeekCount] = dataiter->second;
+
+ } else if (dataiter->first == "VALUE"){
+
+ NewAlarmData.AttachListValue[ObjectSeekCount] = dataiter->second;
+
+ } else if (dataiter->first == "FMTTYPE"){
+ NewAlarmData.AttachListFormatType[ObjectSeekCount] = dataiter->second;
+
+ } else {
+
+ if (TokenData == false){
+ TokenData = true;
+ } else {
+ PropertyTokens += ";";
+ }
+
+ PropertyTokens += dataiter->first;
+ PropertyTokens += "=";
+ PropertyTokens += dataiter->second;
+
+ }
+
+ }
+
+ if (PropertyTokens.size() > 0){
+ NewAlarmData.AttachListTokens[ObjectSeekCount] = PropertyTokens;
+ }
+
+ NewAlarmData.AttachList[ObjectSeekCount] = iter->second;
+
+ ObjectSeekCount++;
+
}
- if (ValidBegin == true){
+ // Process data from X-*
+
+ AlarmObjectCount = 0;
+
+ for(vector<string>::iterator xtokeniter = EventAlarmName[SeekCount].begin();
+ xtokeniter != EventAlarmName[SeekCount].end(); ++xtokeniter){
- EventObjectName.push_back(ObjectName[SeekCount]);
- EventObjectData.push_back(ObjectData[SeekCount]);
+ 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);
+
+ } else if (NewAlarmData.AlarmType == CALENDARALARM_EMAIL &&
+ AlarmActionFound == true &&
+ AlarmTriggerFound == true &&
+ AlarmDescriptionFound == true &&
+ AlarmSummaryFound == true){
+
+ CalendarAlarmData.push_back(NewAlarmData);
+
+ }
+
SeekCount++;
}
+
+ ObjectSeekCount = 0;
+
+ // Process data from X-*
+
+ for(vector<string>::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++;
+
+ }
+
}
\ No newline at end of file