File indexing completed on 2024-05-05 03:54:25
0001 /* 0002 SPDX-FileCopyrightText: 2009 Grégory Oestreicher <greg@kamago.net> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "groupdavprotocol_p.h" 0008 0009 #include "common/utils_p.h" 0010 0011 #include <QDomDocument> 0012 0013 using namespace KDAV; 0014 0015 class GroupdavCollectionQueryBuilder : public XMLQueryBuilder 0016 { 0017 public: 0018 QDomDocument buildQuery() const override 0019 { 0020 QDomDocument document; 0021 0022 QDomElement propfindElement = document.createElementNS(QStringLiteral("DAV:"), QStringLiteral("propfind")); 0023 document.appendChild(propfindElement); 0024 0025 QDomElement propElement = document.createElementNS(QStringLiteral("DAV:"), QStringLiteral("prop")); 0026 propfindElement.appendChild(propElement); 0027 0028 propElement.appendChild(document.createElementNS(QStringLiteral("DAV:"), QStringLiteral("displayname"))); 0029 propElement.appendChild(document.createElementNS(QStringLiteral("DAV:"), QStringLiteral("resourcetype"))); 0030 0031 return document; 0032 } 0033 0034 QString mimeType() const override 0035 { 0036 return QString(); 0037 } 0038 }; 0039 0040 class GroupdavItemQueryBuilder : public XMLQueryBuilder 0041 { 0042 public: 0043 QDomDocument buildQuery() const override 0044 { 0045 QDomDocument document; 0046 0047 QDomElement propfindElement = document.createElementNS(QStringLiteral("DAV:"), QStringLiteral("propfind")); 0048 document.appendChild(propfindElement); 0049 0050 QDomElement propElement = document.createElementNS(QStringLiteral("DAV:"), QStringLiteral("prop")); 0051 propfindElement.appendChild(propElement); 0052 0053 propElement.appendChild(document.createElementNS(QStringLiteral("DAV:"), QStringLiteral("displayname"))); 0054 propElement.appendChild(document.createElementNS(QStringLiteral("DAV:"), QStringLiteral("resourcetype"))); 0055 propElement.appendChild(document.createElementNS(QStringLiteral("DAV:"), QStringLiteral("getetag"))); 0056 0057 return document; 0058 } 0059 0060 QString mimeType() const override 0061 { 0062 return QString(); 0063 } 0064 }; 0065 0066 GroupdavProtocol::GroupdavProtocol() 0067 { 0068 } 0069 0070 bool GroupdavProtocol::supportsPrincipals() const 0071 { 0072 return false; 0073 } 0074 0075 bool GroupdavProtocol::useReport() const 0076 { 0077 return false; 0078 } 0079 0080 bool GroupdavProtocol::useMultiget() const 0081 { 0082 return false; 0083 } 0084 0085 XMLQueryBuilder::Ptr GroupdavProtocol::collectionsQuery() const 0086 { 0087 return XMLQueryBuilder::Ptr(new GroupdavCollectionQueryBuilder()); 0088 } 0089 0090 bool GroupdavProtocol::containsCollection(const QDomElement &propElem) const 0091 { 0092 return !propElem.elementsByTagNameNS(QStringLiteral("http://groupdav.org/"), QStringLiteral("vevent-collection")).isEmpty() 0093 || !propElem.elementsByTagNameNS(QStringLiteral("http://groupdav.org/"), QStringLiteral("vtodo-collection")).isEmpty() 0094 || !propElem.elementsByTagNameNS(QStringLiteral("http://groupdav.org/"), QStringLiteral("vcard-collection")).isEmpty(); 0095 } 0096 0097 QList<XMLQueryBuilder::Ptr> GroupdavProtocol::itemsQueries() const 0098 { 0099 QList<XMLQueryBuilder::Ptr> ret; 0100 ret << XMLQueryBuilder::Ptr(new GroupdavItemQueryBuilder()); 0101 return ret; 0102 } 0103 0104 DavCollection::ContentTypes GroupdavProtocol::collectionContentTypes(const QDomElement &propstatElement) const 0105 { 0106 /* 0107 * Extract the content type information from a propstat like the following 0108 * 0109 * <propstat> 0110 * <status>HTTP/1.1 200 OK</status> 0111 * <prop> 0112 * <displayname>Tasks</displayname> 0113 * <resourcetype> 0114 * <collection/> 0115 * <G:vtodo-collection xmlns:G="http://groupdav.org/"/> 0116 * </resourcetype> 0117 * <getlastmodified>Sat, 30 Jan 2010 17:52:41 -0100</getlastmodified> 0118 * </prop> 0119 * </propstat> 0120 */ 0121 0122 const QDomElement propElement = Utils::firstChildElementNS(propstatElement, QStringLiteral("DAV:"), QStringLiteral("prop")); 0123 const QDomElement resourcetypeElement = Utils::firstChildElementNS(propElement, QStringLiteral("DAV:"), QStringLiteral("resourcetype")); 0124 0125 DavCollection::ContentTypes contentTypes; 0126 0127 if (!Utils::firstChildElementNS(resourcetypeElement, QStringLiteral("http://groupdav.org/"), QStringLiteral("vevent-collection")).isNull()) { 0128 contentTypes |= DavCollection::Events; 0129 } 0130 0131 if (!Utils::firstChildElementNS(resourcetypeElement, QStringLiteral("http://groupdav.org/"), QStringLiteral("vtodo-collection")).isNull()) { 0132 contentTypes |= DavCollection::Todos; 0133 } 0134 0135 if (!Utils::firstChildElementNS(resourcetypeElement, QStringLiteral("http://groupdav.org/"), QStringLiteral("vcard-collection")).isNull()) { 0136 contentTypes |= DavCollection::Contacts; 0137 } 0138 0139 return contentTypes; 0140 }