summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--common/domain/applicationdomaintype.h4
-rw-r--r--examples/davresource/davresource.cpp32
-rw-r--r--sinksh/sinksh_utils.cpp2
3 files changed, 27 insertions, 11 deletions
diff --git a/common/domain/applicationdomaintype.h b/common/domain/applicationdomaintype.h
index be04db9..3afef75 100644
--- a/common/domain/applicationdomaintype.h
+++ b/common/domain/applicationdomaintype.h
@@ -427,6 +427,10 @@ namespace Mail {
427 static constexpr const char *transport = "mail.transport"; 427 static constexpr const char *transport = "mail.transport";
428 static constexpr const char *folderhierarchy = "mail.folderhierarchy"; 428 static constexpr const char *folderhierarchy = "mail.folderhierarchy";
429}; 429};
430namespace Contact {
431 static constexpr const char *contact = "contact";
432 static constexpr const char *storage = "contact.storage";
433};
430}; 434};
431 435
432namespace SpecialPurpose { 436namespace SpecialPurpose {
diff --git a/examples/davresource/davresource.cpp b/examples/davresource/davresource.cpp
index de4c0b0..df2c4b4 100644
--- a/examples/davresource/davresource.cpp
+++ b/examples/davresource/davresource.cpp
@@ -284,6 +284,7 @@ public:
284 list << Synchronizer::SyncRequest{query}; 284 list << Synchronizer::SyncRequest{query};
285 } else { 285 } else {
286 //We want to synchronize everything 286 //We want to synchronize everything
287 list << Synchronizer::SyncRequest{Sink::QueryBase(ApplicationDomain::getTypeName<ApplicationDomain::Folder>())};
287 list << Synchronizer::SyncRequest{Sink::QueryBase(ApplicationDomain::getTypeName<ApplicationDomain::Contact>())}; 288 list << Synchronizer::SyncRequest{Sink::QueryBase(ApplicationDomain::getTypeName<ApplicationDomain::Contact>())};
288 } 289 }
289 return list; 290 return list;
@@ -292,37 +293,43 @@ public:
292 KAsync::Job<void> synchronizeWithSource(const Sink::QueryBase &query) Q_DECL_OVERRIDE 293 KAsync::Job<void> synchronizeWithSource(const Sink::QueryBase &query) Q_DECL_OVERRIDE
293 { 294 {
294 if (query.type() == ApplicationDomain::getTypeName<ApplicationDomain::Folder>()) { 295 if (query.type() == ApplicationDomain::getTypeName<ApplicationDomain::Folder>()) {
296 SinkLogCtx(mLogCtx) << "Synchronizing folders:" << mResourceUrl.url();
295 auto collectionsFetchJob = new KDAV::DavCollectionsFetchJob(mResourceUrl); 297 auto collectionsFetchJob = new KDAV::DavCollectionsFetchJob(mResourceUrl);
296 auto job = runJob(collectionsFetchJob).then<void>([this, collectionsFetchJob] { 298 auto job = runJob(collectionsFetchJob).then([this, collectionsFetchJob] (const KAsync::Error &error) {
297 synchronizeAddressbooks(collectionsFetchJob ->collections()); 299 if (error) {
300 SinkWarningCtx(mLogCtx) << "Failed to synchronize folders." << collectionsFetchJob->errorString();
301 } else {
302 synchronizeAddressbooks(collectionsFetchJob ->collections());
303 }
298 }); 304 });
299 return job; 305 return job;
300 } else if (query.type() == ApplicationDomain::getTypeName<ApplicationDomain::Contact>()) { 306 } else if (query.type() == ApplicationDomain::getTypeName<ApplicationDomain::Contact>()) {
307 SinkLogCtx(mLogCtx) << "Synchronizing contacts.";
301 auto ridList = QSharedPointer<QByteArrayList>::create(); 308 auto ridList = QSharedPointer<QByteArrayList>::create();
302 auto collectionsFetchJob = new KDAV::DavCollectionsFetchJob(mResourceUrl); 309 auto collectionsFetchJob = new KDAV::DavCollectionsFetchJob(mResourceUrl);
303 auto job = runJob(collectionsFetchJob).then<KDAV::DavCollection::List>([this, collectionsFetchJob] { 310 auto job = runJob(collectionsFetchJob).then([this, collectionsFetchJob] {
304 synchronizeAddressbooks(collectionsFetchJob ->collections()); 311 synchronizeAddressbooks(collectionsFetchJob ->collections());
305 return collectionsFetchJob->collections(); 312 return collectionsFetchJob->collections();
306 }) 313 })
307 .serialEach<void>([this, ridList](const KDAV::DavCollection &collection) { 314 .serialEach([this, ridList](const KDAV::DavCollection &collection) {
308 auto collId = collection.url().toDisplayString().toLatin1(); 315 auto collId = collection.url().toDisplayString().toLatin1();
309 auto ctag = collection.CTag().toLatin1(); 316 auto ctag = collection.CTag().toLatin1();
310 if (ctag != syncStore().readValue(collId + "_ctagXX")) { 317 if (ctag != syncStore().readValue(collId + "_ctagXX")) {
311 SinkTrace() << "Syncing " << collId; 318 SinkTraceCtx(mLogCtx) << "Syncing " << collId;
312 auto cache = std::shared_ptr<KDAV::EtagCache>(new KDAV::EtagCache()); 319 auto cache = std::shared_ptr<KDAV::EtagCache>(new KDAV::EtagCache());
313 auto davItemsListJob = new KDAV::DavItemsListJob(collection.url(), cache); 320 auto davItemsListJob = new KDAV::DavItemsListJob(collection.url(), cache);
314 const QByteArray bufferType = ENTITY_TYPE_CONTACT; 321 const QByteArray bufferType = ENTITY_TYPE_CONTACT;
315 QHash<QByteArray, Query::Comparator> mergeCriteria; 322 QHash<QByteArray, Query::Comparator> mergeCriteria;
316 auto colljob = runJob(davItemsListJob).then<KDAV::DavItem::List>([davItemsListJob] { 323 auto colljob = runJob(davItemsListJob).then([davItemsListJob] {
317 return KAsync::value(davItemsListJob->items()); 324 return KAsync::value(davItemsListJob->items());
318 }) 325 })
319 .serialEach<QByteArray>([this, ridList, bufferType, mergeCriteria] (const KDAV::DavItem &item) { 326 .serialEach([this, ridList, bufferType, mergeCriteria] (const KDAV::DavItem &item) {
320 QByteArray rid = item.url().toDisplayString().toUtf8(); 327 QByteArray rid = item.url().toDisplayString().toUtf8();
321 if (item.etag().toLatin1() != syncStore().readValue(rid + "_etag")){ 328 if (item.etag().toLatin1() != syncStore().readValue(rid + "_etag")){
322 SinkTrace() << "Updating " << rid; 329 SinkTrace() << "Updating " << rid;
323 auto davItemFetchJob = new KDAV::DavItemFetchJob(item); 330 auto davItemFetchJob = new KDAV::DavItemFetchJob(item);
324 auto itemjob = runJob(davItemFetchJob) 331 auto itemjob = runJob(davItemFetchJob)
325 .then<KDAV::DavItem>([this, davItemFetchJob, bufferType, mergeCriteria] { 332 .then([this, davItemFetchJob, bufferType, mergeCriteria] {
326 const auto item = davItemFetchJob->item(); 333 const auto item = davItemFetchJob->item();
327 const auto rid = item.url().toDisplayString().toUtf8(); 334 const auto rid = item.url().toDisplayString().toUtf8();
328 Sink::ApplicationDomain::Contact contact; 335 Sink::ApplicationDomain::Contact contact;
@@ -330,7 +337,7 @@ public:
330 createOrModify(bufferType, rid, contact, mergeCriteria); 337 createOrModify(bufferType, rid, contact, mergeCriteria);
331 return item; 338 return item;
332 }) 339 })
333 .then<QByteArray>([this, ridList] (const KDAV::DavItem &item) { 340 .then([this, ridList] (const KDAV::DavItem &item) {
334 const auto rid = item.url().toDisplayString().toUtf8(); 341 const auto rid = item.url().toDisplayString().toUtf8();
335 syncStore().writeValue(rid + "_etag", item.etag().toLatin1()); 342 syncStore().writeValue(rid + "_etag", item.etag().toLatin1());
336 ridList->append(rid); 343 ridList->append(rid);
@@ -342,11 +349,12 @@ public:
342 return KAsync::value(rid); 349 return KAsync::value(rid);
343 } 350 }
344 }) 351 })
345 .then<void>([this, collId, ctag] () { 352 .then([this, collId, ctag] () {
346 syncStore().writeValue(collId + "_ctag", ctag); 353 syncStore().writeValue(collId + "_ctag", ctag);
347 }); 354 });
348 return colljob; 355 return colljob;
349 } else { 356 } else {
357 SinkTraceCtx(mLogCtx) << "Collection unchanged: " << ctag;
350 // for(const auto &item : addressbook) { 358 // for(const auto &item : addressbook) {
351 // ridList->append(rid); 359 // ridList->append(rid);
352 // } 360 // }
@@ -530,7 +538,9 @@ DavResource::DavResource(const Sink::ResourceContext &resourceContext)
530 538
531DavResourceFactory::DavResourceFactory(QObject *parent) 539DavResourceFactory::DavResourceFactory(QObject *parent)
532 : Sink::ResourceFactory(parent, 540 : Sink::ResourceFactory(parent,
533 {"-folder.rename"} 541 {Sink::ApplicationDomain::ResourceCapabilities::Contact::contact,
542 Sink::ApplicationDomain::ResourceCapabilities::Mail::folder,
543 "-folder.rename"}
534 ) 544 )
535{ 545{
536} 546}
diff --git a/sinksh/sinksh_utils.cpp b/sinksh/sinksh_utils.cpp
index 3bbffef..171bb18 100644
--- a/sinksh/sinksh_utils.cpp
+++ b/sinksh/sinksh_utils.cpp
@@ -62,6 +62,8 @@ QList<QByteArray> requestedProperties(const QString &type)
62 << Mail::Date::name; 62 << Mail::Date::name;
63 } else if (type == getTypeName<Event>()) { 63 } else if (type == getTypeName<Event>()) {
64 return QList<QByteArray>() << Event::Summary::name; 64 return QList<QByteArray>() << Event::Summary::name;
65 } else if (type == getTypeName<Contact>()) {
66 return QList<QByteArray>() << Contact::Fn::name << Contact::Emails::name;
65 } else if (type == getTypeName<SinkResource>()) { 67 } else if (type == getTypeName<SinkResource>()) {
66 return QList<QByteArray>() << SinkResource::ResourceType::name << SinkResource::Account::name << SinkResource::Capabilities::name; 68 return QList<QByteArray>() << SinkResource::ResourceType::name << SinkResource::Account::name << SinkResource::Capabilities::name;
67 } else if (type == getTypeName<SinkAccount>()) { 69 } else if (type == getTypeName<SinkAccount>()) {