summaryrefslogtreecommitdiffstats
path: root/examples/imapresource/imapresource.cpp
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2016-11-15 11:05:28 +0100
committerChristian Mollekopf <chrigi_1@fastmail.fm>2016-11-15 11:05:28 +0100
commita1dcb117835f7c1f0604f0302b42edd905190a52 (patch)
tree5d8f243b4937afee425d6668d542ad4c2d5adada /examples/imapresource/imapresource.cpp
parentce3afe5950c3f77f1cd0b1cb548287235050324b (diff)
downloadsink-a1dcb117835f7c1f0604f0302b42edd905190a52.tar.gz
sink-a1dcb117835f7c1f0604f0302b42edd905190a52.zip
Apply default date filter.
Diffstat (limited to 'examples/imapresource/imapresource.cpp')
-rw-r--r--examples/imapresource/imapresource.cpp36
1 files changed, 28 insertions, 8 deletions
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:
187 SinkLog() << "Removed " << count << " mails in " << path << Sink::Log::TraceTime(elapsed) << " " << elapsed/qMax(count, 1) << " [ms/mail]"; 187 SinkLog() << "Removed " << count << " mails in " << path << Sink::Log::TraceTime(elapsed) << " " << elapsed/qMax(count, 1) << " [ms/mail]";
188 } 188 }
189 189
190 KAsync::Job<void> synchronizeFolder(QSharedPointer<ImapServerProxy> imap, const Imap::Folder &folder) 190 KAsync::Job<void> synchronizeFolder(QSharedPointer<ImapServerProxy> imap, const Imap::Folder &folder, const QDate &dateFilter)
191 { 191 {
192 QSet<qint64> uids; 192 QSet<qint64> uids;
193 SinkLog() << "Synchronizing mails" << folder.path(); 193 SinkLog() << "Synchronizing mails" << folder.path();
@@ -215,9 +215,14 @@ public:
215 }); 215 });
216 }) 216 })
217 .then<void>([=]() { 217 .then<void>([=]() {
218 //Get the range we're interested in. This is what we're going to download. 218 auto job = [&] {
219 return imap->fetchUidsSince(imap->mailboxFromFolder(folder), QDate::currentDate().addDays(-14)) 219 if (dateFilter.isValid()) {
220 .then<void, QVector<qint64>>([this, folder, imap](const QVector<qint64> &uidsToFetch) { 220 return imap->fetchUidsSince(imap->mailboxFromFolder(folder), dateFilter);
221 } else {
222 return imap->fetchUids(imap->mailboxFromFolder(folder));
223 }
224 }();
225 return job.then<void, QVector<qint64>>([this, folder, imap](const QVector<qint64> &uidsToFetch) {
221 SinkTrace() << "Received result set " << uidsToFetch; 226 SinkTrace() << "Received result set " << uidsToFetch;
222 SinkTrace() << "About to fetch mail" << folder.normalizedPath(); 227 SinkTrace() << "About to fetch mail" << folder.normalizedPath();
223 const auto uidNext = syncStore().readValue(folder.normalizedPath().toUtf8() + "uidnext").toLongLong(); 228 const auto uidNext = syncStore().readValue(folder.normalizedPath().toUtf8() + "uidnext").toLongLong();
@@ -272,16 +277,26 @@ public:
272 277
273 } 278 }
274 279
280 Sink::QueryBase applyMailDefaults(const Sink::QueryBase &query)
281 {
282 auto defaultDateFilter = QDate::currentDate().addDays(-14);
283 auto queryWithDefaults = query;
284 if (!queryWithDefaults.hasFilter<ApplicationDomain::Mail::Date>()) {
285 queryWithDefaults.filter(ApplicationDomain::Mail::Date::name, QVariant::fromValue(defaultDateFilter));
286 }
287 return queryWithDefaults;
288 }
289
275 QList<Synchronizer::SyncRequest> getSyncRequests(const Sink::QueryBase &query) Q_DECL_OVERRIDE 290 QList<Synchronizer::SyncRequest> getSyncRequests(const Sink::QueryBase &query) Q_DECL_OVERRIDE
276 { 291 {
277 QList<Synchronizer::SyncRequest> list; 292 QList<Synchronizer::SyncRequest> list;
278 if (query.type() == ApplicationDomain::getTypeName<ApplicationDomain::Mail>()) { 293 if (query.type() == ApplicationDomain::getTypeName<ApplicationDomain::Mail>()) {
279 list << Synchronizer::SyncRequest{query}; 294 list << Synchronizer::SyncRequest{applyMailDefaults(query)};
280 } else if (query.type() == ApplicationDomain::getTypeName<ApplicationDomain::Folder>()) { 295 } else if (query.type() == ApplicationDomain::getTypeName<ApplicationDomain::Folder>()) {
281 list << Synchronizer::SyncRequest{query}; 296 list << Synchronizer::SyncRequest{query};
282 } else { 297 } else {
283 list << Synchronizer::SyncRequest{Sink::QueryBase(ApplicationDomain::getTypeName<ApplicationDomain::Folder>())}; 298 list << Synchronizer::SyncRequest{Sink::QueryBase(ApplicationDomain::getTypeName<ApplicationDomain::Folder>())};
284 list << Synchronizer::SyncRequest{Sink::QueryBase(ApplicationDomain::getTypeName<ApplicationDomain::Mail>())}; 299 list << Synchronizer::SyncRequest{applyMailDefaults(Sink::QueryBase(ApplicationDomain::getTypeName<ApplicationDomain::Mail>()))};
285 } 300 }
286 return list; 301 return list;
287 } 302 }
@@ -357,11 +372,16 @@ public:
357 }); 372 });
358 } 373 }
359 }) 374 })
360 .serialEach<void>([this, imap](const Folder &folder) { 375 .serialEach<void>([this, imap, query](const Folder &folder) {
361 if (folder.noselect) { 376 if (folder.noselect) {
362 return KAsync::null<void>(); 377 return KAsync::null<void>();
363 } 378 }
364 return synchronizeFolder(imap, folder) 379 QDate dateFilter;
380 auto filter = query.getFilter<ApplicationDomain::Mail::Date>();
381 if (filter.value.canConvert<QDate>()) {
382 dateFilter = filter.value.value<QDate>();
383 }
384 return synchronizeFolder(imap, folder, dateFilter)
365 .onError([folder](const KAsync::Error &error) { 385 .onError([folder](const KAsync::Error &error) {
366 SinkWarning() << "Failed to sync folder: ." << folder.normalizedPath(); 386 SinkWarning() << "Failed to sync folder: ." << folder.normalizedPath();
367 }); 387 });