X-Git-Url: http://Server1/repobrowser/?a=blobdiff_plain;f=source%2Fobjects%2Fcalendarfreebusy%2FCalendarFreeBusy.cpp;h=13f3d78ec2228d2c18ec308b6c4f40ca34bf1a01;hb=cba151c4b833a26c63984769f921bab5e755decd;hp=227e77dbf92bb9fcaf5301c8653626de84abdf3e;hpb=5a226f9919ab9484c14f5e1d3a1618326a75e4db;p=xestiacalendar%2F.git
diff --git a/source/objects/calendarfreebusy/CalendarFreeBusy.cpp b/source/objects/calendarfreebusy/CalendarFreeBusy.cpp
index 227e77d..13f3d78 100644
--- a/source/objects/calendarfreebusy/CalendarFreeBusy.cpp
+++ b/source/objects/calendarfreebusy/CalendarFreeBusy.cpp
@@ -1,3 +1,21 @@
+// CalendarFreeBusy.cpp - CalendarFreeBusy class functions
+//
+// (c) 2016-2017 Xestia Software Development.
+//
+// This file is part of Xestia Calendar.
+//
+// Xestia Calendar is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by the
+// Free Software Foundation, version 3 of the license.
+//
+// Xestia Calendar is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with Xestia Calendar. If not, see
+
#include "CalendarFreeBusy.h"
using namespace std;
@@ -165,5 +183,555 @@ void CalendarFreeBusyObject::ProcessData(){
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;
+
+ }
+
+ // Process the data from CONTACT.
+
+ DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, false, "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++;
+
+ }
+
+ // Get the Date Time Start value.
+
+ DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, false, "DTSTART");
+
+ // Process the data from DTSTART.
+
+ 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"){
+
+ DateTimeStartDataValue = iter->second;
+
+ } else if (iter->first == "TZID"){
+
+ DateTimeStartDataTimeZoneID = iter->second;
+
+ } else {
+
+ if (TokenData == false){
+ TokenData = true;
+ } else {
+ PropertyTokens += ";";
+ }
+
+ PropertyTokens += iter->first;
+ PropertyTokens += "=";
+ PropertyTokens += iter->second;
+
+ }
+
+ }
+
+ if (PropertyTokens.size() > 0){
+ DateTimeStartDataTokens = PropertyTokens;
+ }
+
+ DateTimeStartData = 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;
+
+ }
+
+ // 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 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 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 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 FREEBUSY.
+
+ DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, true, "FREEBUSY");
+
+ ObjectSeekCount = 0;
+
+ for(multimap::iterator iter = DataReceived.begin();
+ iter != DataReceived.end();
+ ++iter){
+
+ FreeBusyListTokens.push_back("");
+ FreeBusyListType.push_back("");
+ FreeBusyList.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 == "FBTYPE"){
+
+ FreeBusyListType[ObjectSeekCount] = dataiter->second;
+
+ } else {
+
+ if (TokenData == false){
+ TokenData = true;
+ } else {
+ PropertyTokens += ";";
+ }
+
+ PropertyTokens += dataiter->first;
+ PropertyTokens += "=";
+ PropertyTokens += dataiter->second;
+
+ }
+
+ }
+
+ if (PropertyTokens.size() > 0){
+ FreeBusyListTokens[ObjectSeekCount] = PropertyTokens;
+ }
+
+ FreeBusyList[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++;
+
+ }
+
+ 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++;
+
+ }
}
\ No newline at end of file