#include "CalendarJournal.h" using namespace std; CalendarObjectValidResult CalendarJournalObject::ValidObject(){ bool ValidBegin = false; bool ValidEnd = false; bool ValidDateTimeStamp = false; bool ValidUniqueID = false; int SeekCount = 0; string PropertyName; // Look for BEGIN:VJOURNAL. for (vector::iterator iter = ObjectName.begin(); iter != ObjectName.end(); iter++){ if (ObjectName[SeekCount] == "BEGIN" && ObjectData[SeekCount] == "VJOURNAL"){ if (ValidBegin == false){ ValidBegin = true; } else { return CALENDAROBJECTVALID_INVALIDFORMAT; } } if (ObjectName[SeekCount] == "END" && ObjectData[SeekCount] == "VJOURNAL" && ValidBegin == false){ return CALENDAROBJECTVALID_INVALIDFORMAT; } SeekCount++; } SeekCount = 0; // Look for DTSTAMP. for (vector::iterator iter = ObjectName.begin(); iter != ObjectName.end(); iter++){ try{ PropertyName = ObjectName[SeekCount].substr(0,7); } catch(const out_of_range& oor){ continue; } if (PropertyName == "DTSTAMP"){ if (ValidDateTimeStamp == false){ ValidDateTimeStamp = true; } else { return CALENDAROBJECTVALID_INVALIDFORMAT; } } SeekCount++; } SeekCount = 0; // Look for UID. for (vector::iterator iter = ObjectName.begin(); iter != ObjectName.end(); iter++){ try{ PropertyName = ObjectName[SeekCount].substr(0,3); } catch(const out_of_range& oor){ continue; } if (PropertyName == "UID"){ if (ValidUniqueID == false){ ValidUniqueID = true; } else { return CALENDAROBJECTVALID_INVALIDFORMAT; } } SeekCount++; } SeekCount = 0; // Look for END:VJOURNAL. for (vector::iterator iter = ObjectName.begin(); iter != ObjectName.end(); iter++){ if (ObjectName[SeekCount] == "END" && ObjectData[SeekCount] == "VJOURNAL"){ if (ValidEnd == false){ ValidEnd = true; } else { return CALENDAROBJECTVALID_INVALIDFORMAT; } } SeekCount++; } // Check if the VJOURNAL is valid. if (ValidBegin == true && ValidEnd == true && ValidDateTimeStamp == true && ValidUniqueID == true){ return CALENDAROBJECTVALID_OK; } else { return CALENDAROBJECTVALID_INVALIDFORMAT; } } void CalendarJournalObject::ProcessData(){ // Process the data. multimap DataReceived; map PropertyData; string *PropertyNameData = nullptr; int ObjectSeekCount = 0; // Get the Date Time Stamp (DTSTAMP). DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, false, "DTSTAMP"); // Process the data from DTSTAMP. if (DataReceived.begin() != DataReceived.end()){ try { DateTimeStampTokens = DataReceived.begin()->first.substr(8); } catch(const out_of_range &oor){ // Do nothing as there is no data. } DateTimeStampData = DataReceived.begin()->second; } // Get the Unique ID (UID). DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, false, "UID"); // Process the data from UID. if (DataReceived.begin() != DataReceived.end()){ try { UniqueIDTokens = DataReceived.begin()->first.substr(4); } catch(const out_of_range &oor){ // Do nothing as there is no data. } UniqueID = DataReceived.begin()->second; } }