Home | News | Projects | Releases
Bugs | RFE | Repositories | Help
Added the ProcessXMLSyncTokenList function for the CalDAV class
authorSteve Brokenshire <sbrokenshire@xestia.co.uk>
Sun, 29 May 2016 19:35:01 +0000 (20:35 +0100)
committerSteve Brokenshire <sbrokenshire@xestia.co.uk>
Sun, 29 May 2016 19:35:01 +0000 (20:35 +0100)
source/objects/CalDAV/CalDAV-XMLProcessing.cpp
source/objects/CalDAV/CalDAV.h

index 9589868..d216a33 100644 (file)
@@ -574,6 +574,101 @@ CalDAVEntryList CalDAV::ProcessXMLEntryList(){
        return EntryList;
        
 }
+
+CalDAVEntryList CalDAV::ProcessXMLSyncTokenList(){
+
+       CalDAVEntryList EntryList;
+       
+       xmlDocPtr xmlCalDAVDoc;
+       xmlCalDAVDoc = xmlReadMemory(ServerData.c_str(), (int)ServerData.size(), "noname.xml", NULL, 0);
+
+       xmlNodePtr NodeSeek = NULL;
+       xmlNodePtr NodeResponse = NULL;
+       xmlNodePtr NodeMatch = NULL;
+       xmlNodePtr NodeData = NULL;
+       bool NodeFound = false;
+       int ResponseCount = 0;
+       
+       // Start with the first node, look for multistatus.
+       
+       for (NodeSeek = xmlCalDAVDoc->children;
+               NodeSeek != NULL;
+               NodeSeek = NodeSeek->next)
+       {
+       
+               if (!xmlStrcmp(NodeSeek->name, (const xmlChar *)"multistatus") ||
+                       !xmlStrcmp(NodeSeek->name, (const xmlChar *)"d:multistatus") ||
+                       !xmlStrcmp(NodeSeek->name, (const xmlChar *)"D:multistatus")
+               ){
+               
+                       NodeResponse = NodeSeek->children;      
+                       NodeFound = true;
+                       break;
+                       
+               }
+               
+       }
+       
+       if (NodeFound == false){
+       
+               return EntryList;
+
+       }
+       
+       for (NodeResponse = NodeSeek->children;
+               NodeResponse != nullptr;
+               NodeResponse = NodeResponse->next)
+       {
+       
+               // Go through each of the responses and find the calendars.
+
+               NodeMatch = xmlCopyNode(NodeResponse, 1);
+               
+               if (MatchXMLName(&NodeMatch, "response")){
+
+                       NodeData = xmlCopyNode(NodeMatch, 1);
+                       
+                       // Get the HREF.
+                       
+                       NodeData = xmlCopyNode(NodeMatch, 1);
+                       
+                       if (!MatchXMLNameTransverse(&NodeData, "href")){ continue; }
+                                               
+                       string HREFAddress = FetchXMLData(&NodeData);
+                       
+                       // Get the entry entity tag.
+                       
+                       NodeData = xmlCopyNode(NodeMatch, 1);
+                       
+                       string EntryEntityTag = "";
+                       
+                       if (!MatchXMLNameTransverse(&NodeData, "propstat")){ continue; }
+                       if (!MatchXMLNameTransverse(&NodeData, "prop")){ continue; }
+                       if (MatchXMLNameTransverse(&NodeData, "getetag")){ 
+                               
+                               EntryEntityTag = FetchXMLData(&NodeData);
+                               
+                       }
+                       
+                       // Insert the calendar information into the
+                       // list if all the information is there.
+                       
+                       EntryList.HREF.insert(make_pair(ResponseCount, HREFAddress));
+                       EntryList.Data.insert(make_pair(ResponseCount, ""));
+                       EntryList.Tag.insert(make_pair(ResponseCount, EntryEntityTag));
+                       
+                       ResponseCount++;
+                       
+               }
+               
+       }
+       
+       xmlFreeDoc(xmlCalDAVDoc);
+       
+       return EntryList;
+       
+}
+
 bool CalDAV::MatchXMLNameTransverse(xmlNodePtr *NodePtr, string NodeName){
 
        string NodeNameSmallD = "d:" + NodeName;
index 9a7b473..e95c03b 100644 (file)
@@ -133,6 +133,7 @@ class CalDAV{
                string ProcessXMLCalendarHome();
                CalDAVCalendarList ProcessXMLCalendarList();
                CalDAVEntryList ProcessXMLEntryList();
+               CalDAVEntryList ProcessXMLSyncTokenList();
                string ProcessXMLEntryETag();
                bool MatchXMLNameTransverse(xmlNodePtr *NodePtr, string NodeName);
                bool MatchXMLName(xmlNodePtr *NodePtrOriginal, string NodeName);
Xestia Software Development
Yn Maystri
© 2006 - 2019 Xestia Software Development
Software

Xestia Address Book
Xestia Calendar
Development

Xestia Gelforn
Everything else

About
News
Privacy Policy