X-Git-Url: http://Server1/repobrowser/?a=blobdiff_plain;f=source%2Fobjects%2FCalDAV%2FCalDAV.h;h=148f2d07728b9b50278c5a3822a6cb99afc5c79d;hb=9bb29a2ad6d50014c8bb9b54cb40c8efb1ec75e9;hp=04134296903c3a469ddfabd3be4cd5c4b3dbd2b8;hpb=36ec8307a98290296724b301b098116fa0f3dc7c;p=xestiacalendar%2F.git diff --git a/source/objects/CalDAV/CalDAV.h b/source/objects/CalDAV/CalDAV.h index 0413429..148f2d0 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