From a1dcb117835f7c1f0604f0302b42edd905190a52 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Tue, 15 Nov 2016 11:05:28 +0100 Subject: Apply default date filter. --- examples/imapresource/imapresource.cpp | 36 ++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) (limited to 'examples/imapresource') diff --git a/examples/imapresource/imapresource.cpp b/examples/imapresource/imapresource.cpp index d3949ae..2b9659e 100644 --- a/examples/imapresource/imapresource.cpp +++ b/examples/imapresource/imapresource.cpp @@ -187,7 +187,7 @@ public: SinkLog() << "Removed " << count << " mails in " << path << Sink::Log::TraceTime(elapsed) << " " << elapsed/qMax(count, 1) << " [ms/mail]"; } - KAsync::Job synchronizeFolder(QSharedPointer imap, const Imap::Folder &folder) + KAsync::Job synchronizeFolder(QSharedPointer imap, const Imap::Folder &folder, const QDate &dateFilter) { QSet uids; SinkLog() << "Synchronizing mails" << folder.path(); @@ -215,9 +215,14 @@ public: }); }) .then([=]() { - //Get the range we're interested in. This is what we're going to download. - return imap->fetchUidsSince(imap->mailboxFromFolder(folder), QDate::currentDate().addDays(-14)) - .then>([this, folder, imap](const QVector &uidsToFetch) { + auto job = [&] { + if (dateFilter.isValid()) { + return imap->fetchUidsSince(imap->mailboxFromFolder(folder), dateFilter); + } else { + return imap->fetchUids(imap->mailboxFromFolder(folder)); + } + }(); + return job.then>([this, folder, imap](const QVector &uidsToFetch) { SinkTrace() << "Received result set " << uidsToFetch; SinkTrace() << "About to fetch mail" << folder.normalizedPath(); const auto uidNext = syncStore().readValue(folder.normalizedPath().toUtf8() + "uidnext").toLongLong(); @@ -272,16 +277,26 @@ public: } + Sink::QueryBase applyMailDefaults(const Sink::QueryBase &query) + { + auto defaultDateFilter = QDate::currentDate().addDays(-14); + auto queryWithDefaults = query; + if (!queryWithDefaults.hasFilter()) { + queryWithDefaults.filter(ApplicationDomain::Mail::Date::name, QVariant::fromValue(defaultDateFilter)); + } + return queryWithDefaults; + } + QList getSyncRequests(const Sink::QueryBase &query) Q_DECL_OVERRIDE { QList list; if (query.type() == ApplicationDomain::getTypeName()) { - list << Synchronizer::SyncRequest{query}; + list << Synchronizer::SyncRequest{applyMailDefaults(query)}; } else if (query.type() == ApplicationDomain::getTypeName()) { list << Synchronizer::SyncRequest{query}; } else { list << Synchronizer::SyncRequest{Sink::QueryBase(ApplicationDomain::getTypeName())}; - list << Synchronizer::SyncRequest{Sink::QueryBase(ApplicationDomain::getTypeName())}; + list << Synchronizer::SyncRequest{applyMailDefaults(Sink::QueryBase(ApplicationDomain::getTypeName()))}; } return list; } @@ -357,11 +372,16 @@ public: }); } }) - .serialEach([this, imap](const Folder &folder) { + .serialEach([this, imap, query](const Folder &folder) { if (folder.noselect) { return KAsync::null(); } - return synchronizeFolder(imap, folder) + QDate dateFilter; + auto filter = query.getFilter(); + if (filter.value.canConvert()) { + dateFilter = filter.value.value(); + } + return synchronizeFolder(imap, folder, dateFilter) .onError([folder](const KAsync::Error &error) { SinkWarning() << "Failed to sync folder: ." << folder.normalizedPath(); }); -- cgit v1.2.3