File indexing completed on 2024-04-21 03:53:54
0001 /* 0002 SPDX-FileCopyrightText: 2016 Sandro Knauß <sknauss@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include <KDAV/DavCollectionDeleteJob> 0008 #include <KDAV/DavCollectionModifyJob> 0009 #include <KDAV/DavCollectionsFetchJob> 0010 #include <KDAV/DavItemCreateJob> 0011 #include <KDAV/DavItemDeleteJob> 0012 #include <KDAV/DavItemFetchJob> 0013 #include <KDAV/DavItemModifyJob> 0014 #include <KDAV/DavItemsFetchJob> 0015 #include <KDAV/DavItemsListJob> 0016 #include <KDAV/EtagCache> 0017 0018 #include <QCoreApplication> 0019 #include <QDebug> 0020 #include <QStringList> 0021 0022 int main(int argc, char **argv) 0023 { 0024 QCoreApplication app(argc, argv); 0025 0026 QUrl mainUrl(QStringLiteral("https://apps.kolabnow.com/addressbooks/test1%40kolab.org")); 0027 mainUrl.setUserName(QStringLiteral("test1@kolab.org")); 0028 mainUrl.setPassword(QStringLiteral("Welcome2KolabSystems")); 0029 KDAV::DavUrl davUrl(mainUrl, KDAV::CardDav); 0030 0031 auto *job = new KDAV::DavCollectionsFetchJob(davUrl); 0032 job->exec(); 0033 0034 const auto collections = job->collections(); 0035 for (const auto &collection : collections) { 0036 qDebug() << collection.displayName() << "PRIVS: " << collection.privileges(); 0037 auto collectionUrl = collection.url(); 0038 std::shared_ptr<KDAV::EtagCache> cache(new KDAV::EtagCache()); 0039 int anz = -1; 0040 // Get all items in a collection add them to cache and make sure, that afterward no item is changed 0041 { 0042 auto itemListJob = new KDAV::DavItemsListJob(collectionUrl, cache); 0043 itemListJob->exec(); 0044 anz = itemListJob->items().size(); 0045 qDebug() << "items:" << itemListJob->items().size(); 0046 qDebug() << "changed Items:" << itemListJob->changedItems().size(); 0047 qDebug() << "deleted Items:" << itemListJob->deletedItems(); 0048 const auto changedItems = itemListJob->changedItems(); 0049 for (const auto &item : changedItems) { 0050 qDebug() << item.url().url() << item.contentType() << item.data(); 0051 auto itemFetchJob = new KDAV::DavItemFetchJob(item); 0052 itemFetchJob->exec(); 0053 const auto fetchedItem = itemFetchJob->item(); 0054 qDebug() << fetchedItem.contentType() << fetchedItem.data(); 0055 0056 auto itemsFetchJob = new KDAV::DavItemsFetchJob(collectionUrl, QStringList() << item.url().toDisplayString()); 0057 itemsFetchJob->exec(); 0058 if (itemsFetchJob->item(item.url().toDisplayString()).contentType() != fetchedItem.contentType()) { // itemsfetchjob do not get contentType 0059 qDebug() << "Fetched same item but got different contentType:" << itemsFetchJob->item(item.url().toDisplayString()).contentType(); 0060 } 0061 0062 if (itemsFetchJob->item(item.url().toDisplayString()).data() != fetchedItem.data()) { 0063 qDebug() << "Fetched same item but got different data:" << itemsFetchJob->item(item.url().toDisplayString()).data(); 0064 } 0065 0066 cache->setEtag(item.url().toDisplayString(), item.etag()); 0067 } 0068 cache->setEtag(QStringLiteral("invalid"), QStringLiteral("invalid")); 0069 } 0070 { 0071 qDebug() << "second run: (should be empty)."; 0072 auto itemListJob = new KDAV::DavItemsListJob(collectionUrl, cache); 0073 itemListJob->exec(); 0074 if (itemListJob->items().size() != anz) { 0075 qDebug() << "Items have added/deleted on server."; 0076 } 0077 if (itemListJob->changedItems().size() != 0) { 0078 qDebug() << "Items have changed on server."; 0079 } 0080 if (itemListJob->deletedItems() != QStringList() << QStringLiteral("invalid")) { 0081 qDebug() << "more items deleted:" << itemListJob->deletedItems(); 0082 } 0083 } 0084 } 0085 0086 { 0087 QUrl url(QStringLiteral("https://apps.kolabnow.com/addressbooks/test1%40kolab.org/cbbf386d-7e9b-4e72-947d-0b813ea9b347/")); 0088 url.setUserInfo(mainUrl.userInfo()); 0089 KDAV::DavUrl collectionUrl(url, KDAV::CardDav); 0090 auto collectionDeleteJob = new KDAV::DavCollectionDeleteJob(collectionUrl); 0091 collectionDeleteJob->exec(); 0092 if (collectionDeleteJob->error()) { 0093 qDebug() << collectionDeleteJob->errorString(); 0094 } 0095 } 0096 0097 { 0098 QUrl url(QStringLiteral("https://apps.kolabnow.com/addressbooks/test1%40kolab.org/9290e784-c876-412f-8385-be292d64b2c6/")); 0099 url.setUserInfo(mainUrl.userInfo()); 0100 KDAV::DavUrl testCollectionUrl(url, KDAV::CardDav); 0101 auto collectionModifyJob = new KDAV::DavCollectionModifyJob(testCollectionUrl); 0102 collectionModifyJob->setProperty(QStringLiteral("displayname"), QStringLiteral("test234")); 0103 collectionModifyJob->exec(); 0104 if (collectionModifyJob->error()) { 0105 qDebug() << collectionModifyJob->errorString(); 0106 } 0107 } 0108 0109 // create element with "wrong put url" test if we get the correct url back 0110 { 0111 QUrl url(QStringLiteral("https://apps.kolabnow.com/addressbooks/test1%40kolab.org/9290e784-c876-412f-8385-be292d64b2c6/xxx.vcf")); 0112 url.setUserInfo(mainUrl.userInfo()); 0113 KDAV::DavUrl testItemUrl(url, KDAV::CardDav); 0114 QByteArray data = 0115 "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Kolab//iRony DAV Server 0.3.1//Sabre//Sabre VObject " 0116 "2.1.7//EN\r\nUID:12345678-1234-1234-1234-123456789abc\r\nFN:John " 0117 "Doe\r\nN:Doe;John;;;\r\nEMAIL;TYPE=INTERNET;TYPE=HOME:john.doe@example.com\r\nREV;VALUE=DATE-TIME:20161221T145611Z\r\nEND:VCARD\r\n"; 0118 KDAV::DavItem item(testItemUrl, QStringLiteral("text/x-vcard"), data, QString()); 0119 auto createJob = new KDAV::DavItemCreateJob(item); 0120 createJob->exec(); 0121 if (createJob->error()) { 0122 qDebug() << createJob->errorString(); 0123 } 0124 if (createJob->item().url().toDisplayString() 0125 != QLatin1String( 0126 "https://apps.kolabnow.com/addressbooks/test1%40kolab.org/9290e784-c876-412f-8385-be292d64b2c6/12345678-1234-1234-1234-123456789abc.vcf")) { 0127 qDebug() << "unexpected url" << createJob->item().url().url(); 0128 } 0129 } 0130 0131 { 0132 QUrl url(QStringLiteral( 0133 "https://apps.kolabnow.com/addressbooks/test1%40kolab.org/9290e784-c876-412f-8385-be292d64b2c6/12345678-1234-1234-1234-123456789abc.vcf")); 0134 url.setUserInfo(mainUrl.userInfo()); 0135 KDAV::DavUrl testItemUrl(url, KDAV::CardDav); 0136 QByteArray data = 0137 "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Kolab//iRony DAV Server 0.3.1//Sabre//Sabre VObject " 0138 "2.1.7//EN\r\nUID:12345678-1234-1234-1234-123456789abc\r\nFN:John2 " 0139 "Doe\r\nN:Doe;John2;;;\r\nEMAIL;TYPE=INTERNET;TYPE=HOME:john2.doe@example.com\r\nREV;VALUE=DATE-TIME:20161221T145611Z\r\nEND:VCARD\r\n"; 0140 KDAV::DavItem item(testItemUrl, QStringLiteral("text/x-vcard"), data, QString()); 0141 auto modifyJob = new KDAV::DavItemModifyJob(item); 0142 modifyJob->exec(); 0143 if (modifyJob->error()) { 0144 qDebug() << modifyJob->errorString(); 0145 } 0146 } 0147 0148 { 0149 QUrl url(QStringLiteral( 0150 "https://apps.kolabnow.com/addressbooks/test1%40kolab.org/9290e784-c876-412f-8385-be292d64b2c6/12345678-1234-1234-1234-123456789abc.vcf")); 0151 url.setUserInfo(mainUrl.userInfo()); 0152 KDAV::DavUrl testItemUrl(url, KDAV::CardDav); 0153 QByteArray data = 0154 "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Kolab//iRony DAV Server 0.3.1//Sabre//Sabre VObject " 0155 "2.1.7//EN\r\nUID:12345678-1234-1234-1234-123456789abc\r\nFN:John2 " 0156 "Doe\r\nN:Doe;John2;;;\r\nEMAIL;TYPE=INTERNET;TYPE=HOME:john2.doe@example.com\r\nREV;VALUE=DATE-TIME:20161221T145611Z\r\nEND:VCARD\r\n"; 0157 KDAV::DavItem item(testItemUrl, QStringLiteral("text/x-vcard"), data, QString()); 0158 auto deleteJob = new KDAV::DavItemDeleteJob(item); 0159 deleteJob->exec(); 0160 if (deleteJob->error()) { 0161 qDebug() << deleteJob->errorString(); 0162 } 0163 } 0164 }