X-Git-Url: http://Server1/repobrowser/?a=blobdiff_plain;f=source%2Fobjects%2FCalDAV%2FCalDAV.h;h=5629b87a3407f5d7aabeebad68ca838a819392c2;hb=cba151c4b833a26c63984769f921bab5e755decd;hp=04134296903c3a469ddfabd3be4cd5c4b3dbd2b8;hpb=36ec8307a98290296724b301b098116fa0f3dc7c;p=xestiacalendar%2F.git diff --git a/source/objects/CalDAV/CalDAV.h b/source/objects/CalDAV/CalDAV.h index 0413429..5629b87 100644 --- a/source/objects/CalDAV/CalDAV.h +++ b/source/objects/CalDAV/CalDAV.h @@ -1,15 +1,201 @@ +// CalDAV.h - CalDAV Connection Object header. +// +// (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 + #ifndef __OBJECTS_CALDAV_CALDAV_H__ #define __OBJECTS_CALDAV_CALDAV_H__ #include +#include +#include #include +#include +#include +#include +#include +#include "../../common/colour.h" +#include "../../common/text.h" +#include "../../common/uuid.h" using namespace std; +// CalDAVConnectionData: used for +// connecting to the server. + +enum CalDAVQueryResult { + CALDAVQUERYRESULT_UNITTESTFAIL = -1, + CALDAVQUERYRESULT_OK, + CALDAVQUERYRESULT_NOTRUN, + CALDAVQUERYRESULT_SERVERERROR +}; + +struct CalDAVCalendarList { + + map Name; + map HREF; + map Order; + map Description; + map CalColour; + map Tag; + map TagURL; + +}; + +struct CalDAVEntryList { + + map HREF; + map Data; + map Tag; + +}; + +struct CalDAVConnectionData{ + + string Hostname = ""; + int Port = 8008; + string Username = ""; + string Password = ""; + string Prefix = ""; + bool UseSSL = true; + int Timeout = 60; + +}; + +// CalDAVStatusData: used for +// getting the current server +// settings for the CalDAV +// object. + +struct CalDAVStatus{ + + string Hostname; + int Port; + string Username; + string Prefix; + bool UseSSL; + int Timeout; + +}; + +// CalDAVServerSupport: used for +// getting what the server supports +// from the CalDAV specification. + +struct CalDAVServerSupport{ + + // Variable name. Name in CalDAV header. + + bool BasicSupport = false; // calendar-access + +}; + +// CalDAVServerResult: used for +// getting the result of the +// request made via the CalDAV +// object. + +struct CalDAVServerResult{ + + CalDAVQueryResult Result = CALDAVQUERYRESULT_NOTRUN; + CURLcode Code = CURLE_OK; + long HTTPCode = 0; + +}; + +// CalDAVSendData: used for +// sending data to the CaLDAV +// server. + +struct CalDAVSendData{ + string *readptr; + long sizeleft; + int seek = 0; +}; + class CalDAV{ + private: + string ProcessXMLUserPrincipal(); + string ProcessXMLCalendarHome(); + CalDAVCalendarList ProcessXMLCalendarList(); + CalDAVEntryList ProcessXMLEntryList(); + CalDAVEntryList ProcessXMLSyncTokenList(); + string ProcessXMLEntryETag(); + bool MatchXMLNameTransverse(xmlNodePtr *NodePtr, string NodeName); + bool MatchXMLName(xmlNodePtr *NodePtrOriginal, string NodeName); + string FetchXMLData(xmlNodePtr *NodePtr); + CalDAVServerResult EditCalendarProcess(string *CalendarHREF, + string *CalendarName, + Colour *CalendarColour, + string *CalendarDescription, + int *CalendarOrder); + + CalDAVConnectionData ConnectionData; + CalDAVServerResult ConnectionServerResult; + CURL *ConnectionHandle = nullptr; + string ServerData = ""; + string ServerHeader = ""; + public: + CalDAV(); + ~CalDAV(); + void SetupConnectionData(CalDAVConnectionData *ConnData); + CalDAVStatus GetConnectionData(); + CalDAVServerResult Connect(); + CalDAVServerResult GetServerResult(); + CalDAVServerSupport GetServerSupport(); + CalDAVCalendarList GetCalendars(); + CalDAVEntryList GetEntryList(string *CalendarHREF); + CalDAVEntryList GetEntryList(string *CalendarHREF, string *CalendarTag); + + CalDAVServerResult AddCalendar(string CalendarName); + CalDAVServerResult AddCalendar(string *CalendarName, string *CalendarShortName); + + CalDAVServerResult EditCalendar(string *CalendarHREF, + string *CalendarName, + Colour *CalendarColour, + string *CalendarDescription, + int *CalendarOrder); + CalDAVServerResult EditCalendar(string *CalendarHREF, + Colour *CalendarColour); + CalDAVServerResult EditCalendar(string *CalendarHREF, + string *CalendarName); + CalDAVServerResult EditCalendar(string *CalendarHREF, + int *CalendarOrder); + CalDAVServerResult EditCalendarDescription(string *CalendarHREF, + string *CalendarDescription); + + CalDAVServerResult DeleteCalendar(string *CalendarHREF); + + CalDAVServerResult AddEntry(string *CalendarEntryHREF, string *EntryData); + CalDAVServerResult EditEntry(string *CalendarEntryHREF, string *EntryData, string *EntryETag); + CalDAVServerResult DeleteEntry(string *CalendarEntryHREF); + + string GetUserPrincipal(); + string GetCalendarHome(string UserPrincipalURI); + + CalDAVServerResult GetEntryETag(string *CalendarEntryHREF, string *ETagValue); }; +// Subroutines that are used with the +// CalDAVConnectionData struct. + +bool CalDAVObjectValidSettings(CalDAVConnectionData *ConnData); +string BuildServerAddress(CalDAVConnectionData *ConnData, string URIAddress); + #endif