File indexing completed on 2024-05-12 04:46:02

0001 #include "XMLHelper.hpp"
0002 
0003 #include <QDebug>
0004 #include <QtXml/QDomDocument>
0005 
0006 QList<WebDAVItem> XMLHelper::parseListDirResponse(WebDAV *webdavClient,
0007                                                   QByteArray xml) {
0008   QList<WebDAVItem> items;
0009   QString webdavNS = "DAV:";
0010   QDomDocument doc;
0011   doc.setContent(xml, true);
0012 
0013   QDomNodeList responses = doc.elementsByTagNameNS(webdavNS, "response");
0014 
0015   for (int i = 0; i < responses.length(); i++) {
0016     QDomElement response = responses.at(i).toElement();
0017 
0018     QString href =
0019         response.elementsByTagNameNS(webdavNS, "href").at(0).toElement().text();
0020     QString creationDate =
0021         response.elementsByTagNameNS(webdavNS, "creationdate")
0022             .at(0)
0023             .toElement()
0024             .text();
0025     QString lastModified =
0026         response.elementsByTagNameNS(webdavNS, "getlastmodified")
0027             .at(0)
0028             .toElement()
0029             .text();
0030     QString displayName = response.elementsByTagNameNS(webdavNS, "displayname")
0031                               .at(0)
0032                               .toElement()
0033                               .text();
0034     QString contentType =
0035         response.elementsByTagNameNS(webdavNS, "getcontenttype")
0036             .at(0)
0037             .toElement()
0038             .text();
0039     QString contentLength =
0040         response.elementsByTagNameNS(webdavNS, "getcontentlength")
0041             .at(0)
0042             .toElement()
0043             .text();
0044     bool isCollection;
0045 
0046     if (response.elementsByTagNameNS(webdavNS, "resourcetype")
0047             .at(0)
0048             .toElement()
0049             .elementsByTagNameNS(webdavNS, "collection")
0050             .size() == 1) {
0051       isCollection = true;
0052     } else {
0053       isCollection = false;
0054     }
0055 
0056     items.append(WebDAVItem(webdavClient, href, creationDate, lastModified,
0057                             displayName, contentType, contentLength,
0058                             isCollection));
0059   }
0060 
0061   return items;
0062 }
0063 
0064 QList<CardDAVResponseItem *> XMLHelper::parseCardDAVMultiStatusResponse(
0065     QString responseXml) {
0066   QString webdavNS = "DAV:";
0067   QString cardDavNS = "urn:ietf:params:xml:ns:carddav";
0068   QList<CardDAVResponseItem *> responseTagList;
0069 
0070   QDomDocument doc;
0071   doc.setContent(responseXml, true);
0072 
0073   QDomNodeList responses = doc.elementsByTagNameNS(webdavNS, "response");
0074 
0075   for (int i = 0; i < responses.length(); i++) {
0076     CardDAVResponseItem *item = new CardDAVResponseItem();
0077     QDomElement response = responses.at(i).toElement();
0078     QString href =
0079         response.elementsByTagNameNS(webdavNS, "href").at(0).toElement().text();
0080 
0081     item->setHref(QUrl(href));
0082 
0083     if (response.elementsByTagNameNS(webdavNS, "resourcetype")
0084             .at(0)
0085             .toElement()
0086             .elementsByTagNameNS(webdavNS, "collection")
0087             .size() == 1) {
0088       item->setIsCollection(true);
0089     } else {
0090       item->setIsCollection(false);
0091     }
0092 
0093     if (response.elementsByTagNameNS(webdavNS, "resourcetype")
0094             .at(0)
0095             .toElement()
0096             .elementsByTagNameNS(cardDavNS, "addressbook")
0097             .size() == 1) {
0098       item->setIsAddressBook(true);
0099     } else {
0100       item->setIsAddressBook(false);
0101     }
0102 
0103     if (response.elementsByTagNameNS(cardDavNS, "address-data").size() == 1) {
0104       QString vCard, eTag;
0105 
0106       item->setIsContact(true);
0107 
0108       vCard = response.elementsByTagNameNS(cardDavNS, "address-data")
0109                   .at(0)
0110                   .toElement()
0111                   .text();
0112       eTag = response.elementsByTagNameNS(webdavNS, "getetag")
0113                  .at(0)
0114                  .toElement()
0115                  .text();
0116 
0117       item->setContact(new Contact(vCard, eTag, QUrl(href)));
0118     } else {
0119       item->setIsContact(false);
0120     }
0121 
0122     responseTagList.push_front(item);
0123   }
0124 
0125   return responseTagList;
0126 }