diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2016-11-15 11:05:28 +0100 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2016-11-15 11:05:28 +0100 |
commit | a1dcb117835f7c1f0604f0302b42edd905190a52 (patch) | |
tree | 5d8f243b4937afee425d6668d542ad4c2d5adada /examples/imapresource/imapresource.cpp | |
parent | ce3afe5950c3f77f1cd0b1cb548287235050324b (diff) | |
download | sink-a1dcb117835f7c1f0604f0302b42edd905190a52.tar.gz sink-a1dcb117835f7c1f0604f0302b42edd905190a52.zip |
Apply default date filter.
Diffstat (limited to 'examples/imapresource/imapresource.cpp')
-rw-r--r-- | examples/imapresource/imapresource.cpp | 36 |
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 | }); |