File indexing completed on 2024-04-28 03:53:56

0001 /*
0002     SPDX-FileCopyrightText: 2010 Tobias Koenig <tokoe@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "davmanager_p.h"
0008 
0009 #include "protocols/caldavprotocol_p.h"
0010 #include "protocols/carddavprotocol_p.h"
0011 #include "protocols/groupdavprotocol_p.h"
0012 
0013 #include <KIO/DavJob>
0014 
0015 #include "libkdav_debug.h"
0016 
0017 #include <QUrl>
0018 
0019 using namespace KDAV;
0020 
0021 DavManager::DavManager() = default;
0022 DavManager::~DavManager() = default;
0023 
0024 DavManager *DavManager::self()
0025 {
0026     static DavManager sSelf;
0027     return &sSelf;
0028 }
0029 
0030 KIO::DavJob *DavManager::createPropFindJob(const QUrl &url, const QString &document, const QString &depth) const
0031 {
0032     KIO::DavJob *job = KIO::davPropFind(url, document, depth, KIO::HideProgressInfo | KIO::DefaultFlags);
0033 
0034     job->addMetaData(QStringLiteral("cookies"), QStringLiteral("none"));
0035     job->addMetaData(QStringLiteral("no-auth-prompt"), QStringLiteral("true"));
0036     job->setProperty("davDepth", QVariant::fromValue(depth));
0037 
0038     return job;
0039 }
0040 
0041 KIO::DavJob *DavManager::createReportJob(const QUrl &url, const QString &document, const QString &depth) const
0042 {
0043     KIO::DavJob *job = KIO::davReport(url, document, depth, KIO::HideProgressInfo | KIO::DefaultFlags);
0044 
0045     job->addMetaData(QStringLiteral("cookies"), QStringLiteral("none"));
0046     job->addMetaData(QStringLiteral("no-auth-prompt"), QStringLiteral("true"));
0047     job->setProperty("davDepth", QVariant::fromValue(depth));
0048 
0049     return job;
0050 }
0051 
0052 KIO::DavJob *DavManager::createPropPatchJob(const QUrl &url, const QString &document) const
0053 {
0054     KIO::DavJob *job = KIO::davPropPatch(url, document, KIO::HideProgressInfo | KIO::DefaultFlags);
0055     const QString header = QStringLiteral("Content-Type: text/xml");
0056     job->addMetaData(QStringLiteral("customHTTPHeader"), header);
0057     job->addMetaData(QStringLiteral("cookies"), QStringLiteral("none"));
0058     job->addMetaData(QStringLiteral("no-auth-prompt"), QStringLiteral("true"));
0059     return job;
0060 }
0061 
0062 const DavProtocolBase *DavManager::davProtocol(Protocol protocol)
0063 {
0064     const auto d = DavManager::self();
0065     if (!d->mProtocols[protocol]) {
0066         switch (protocol) {
0067         case KDAV::CalDav:
0068             d->mProtocols[KDAV::CalDav].reset(new CaldavProtocol());
0069             break;
0070         case KDAV::CardDav:
0071             d->mProtocols[KDAV::CardDav].reset(new CarddavProtocol());
0072             break;
0073         case KDAV::GroupDav:
0074             d->mProtocols[KDAV::GroupDav].reset(new GroupdavProtocol());
0075             break;
0076         default:
0077             qCCritical(KDAV_LOG) << "Unknown protocol: " << static_cast<int>(protocol);
0078             return nullptr;
0079         }
0080     }
0081 
0082     return d->mProtocols[protocol].get();
0083 }