diff options
author | Damien Caliste <dcaliste@free.fr> | 2020-01-24 16:28:37 +0100 |
---|---|---|
committer | Damien Caliste <dcaliste@free.fr> | 2021-04-09 03:08:32 +0200 |
commit | 93f3b4dc9bdcb44176b54a7fc32166ab6cf70e01 (patch) | |
tree | eaed789e46ee732aac8ae0f6efe4bdb233597e61 | |
parent | dbd27fd51c6d348a713ea0ccafe824b6d236a7b6 (diff) |
Follow the synchronizationEnabled flag when folders are not specified
If the synchronizationEnabled flag is set to false, a variety
of strategy, like search, folder listing, will not search in
such folders. This is maybe a too restrictive usage of this
flag. This patch change the behavior of this flag to act on
synchronization strategies only, when desired.
It activates it only for message retrieval in all folders.
Change-Id: Iebec872984c7e2650167ae585b06bfa3d8cd6990
Reviewed-by: Christopher Adams <chris.adams@jolla.com>
Reviewed-by: David Llewellyn-Jones <david.llewellyn-jones@jolla.com>
-rw-r--r-- | src/plugins/messageservices/imap/imapservice.cpp | 4 | ||||
-rw-r--r-- | src/plugins/messageservices/imap/imapstrategy.cpp | 32 | ||||
-rw-r--r-- | src/plugins/messageservices/imap/imapstrategy.h | 8 |
3 files changed, 33 insertions, 11 deletions
diff --git a/src/plugins/messageservices/imap/imapservice.cpp b/src/plugins/messageservices/imap/imapservice.cpp index a438a5af..c12a5d9e 100644 --- a/src/plugins/messageservices/imap/imapservice.cpp +++ b/src/plugins/messageservices/imap/imapservice.cpp @@ -212,6 +212,7 @@ bool ImapService::Source::retrieveFolderList(const QMailAccountId &accountId, co _service->_client->strategyContext()->foldersOnlyStrategy.setBase(folderId); _service->_client->strategyContext()->foldersOnlyStrategy.setQuickList(!folderId.isValid()); _service->_client->strategyContext()->foldersOnlyStrategy.setDescending(descending); + _service->_client->strategyContext()->foldersOnlyStrategy.setIgnoreSyncFlag(true); appendStrategy(&_service->_client->strategyContext()->foldersOnlyStrategy); if(!_unavailable) return initiateStrategy(); @@ -303,6 +304,7 @@ bool ImapService::Source::retrieveMessageLists(const QMailAccountId &accountId, _service->_client->strategyContext()->retrieveMessageListStrategy.setOperation(_service->_client->strategyContext(), QMailRetrievalAction::Auto); _service->_client->strategyContext()->retrieveMessageListStrategy.selectedFoldersAppend(folderIds); + _service->_client->strategyContext()->retrieveMessageListStrategy.setIgnoreSyncFlag(!_folderIds.isEmpty()); appendStrategy(&_service->_client->strategyContext()->retrieveMessageListStrategy); if(!_unavailable) return initiateStrategy(); @@ -495,6 +497,7 @@ bool ImapService::Source::retrieveAll(const QMailAccountId &accountId) _service->_client->strategyContext()->retrieveAllStrategy.setQuickList(false); _service->_client->strategyContext()->retrieveAllStrategy.setDescending(true); _service->_client->strategyContext()->retrieveAllStrategy.setOperation(_service->_client->strategyContext(), QMailRetrievalAction::Auto); + _service->_client->strategyContext()->retrieveAllStrategy.setIgnoreSyncFlag(false); appendStrategy(&_service->_client->strategyContext()->retrieveAllStrategy); if(!_unavailable) return initiateStrategy(); @@ -570,6 +573,7 @@ bool ImapService::Source::synchronize(const QMailAccountId &accountId) _service->_client->strategyContext()->synchronizeAccountStrategy.setQuickList(false); _service->_client->strategyContext()->synchronizeAccountStrategy.setDescending(true); _service->_client->strategyContext()->synchronizeAccountStrategy.setOperation(_service->_client->strategyContext(), QMailRetrievalAction::Auto); + _service->_client->strategyContext()->synchronizeAccountStrategy.setIgnoreSyncFlag(false); appendStrategy(&_service->_client->strategyContext()->synchronizeAccountStrategy); if(!_unavailable) return initiateStrategy(); diff --git a/src/plugins/messageservices/imap/imapstrategy.cpp b/src/plugins/messageservices/imap/imapstrategy.cpp index 77a46dae..d7b14393 100644 --- a/src/plugins/messageservices/imap/imapstrategy.cpp +++ b/src/plugins/messageservices/imap/imapstrategy.cpp @@ -2212,15 +2212,13 @@ void ImapFolderListStrategy::processNextFolder(ImapStrategyContextBase *context) bool ImapFolderListStrategy::nextFolder() { - while (!_mailboxIds.isEmpty()) { + if (!_mailboxIds.isEmpty()) { QMailFolderId folderId(_mailboxIds.takeFirst()); // Process this folder setCurrentMailbox(folderId); - // Bypass any folder for which synchronization is disabled - if (synchronizationEnabled(_currentMailbox)) - return true; + return true; } return false; @@ -2237,11 +2235,6 @@ void ImapFolderListStrategy::processFolder(ImapStrategyContextBase *context) context->progressChanged(++_processed, _processable); } -bool ImapFolderListStrategy::synchronizationEnabled(const QMailFolder &folder) const -{ - return folder.status() & QMailFolder::SynchronizationEnabled; -} - void ImapFolderListStrategy::folderListCompleted(ImapStrategyContextBase *context) { // We have retrieved all the folders - process any messages @@ -2373,6 +2366,27 @@ void ImapSynchronizeBaseStrategy::previewDiscoveredMessages(ImapStrategyContextB } } +void ImapSynchronizeBaseStrategy::setIgnoreSyncFlag(bool ignoreSyncFlag) +{ + _ignoreSyncFlag = ignoreSyncFlag; +} + +bool ImapSynchronizeBaseStrategy::synchronizationEnabled(const QMailFolder &folder) const +{ + return _ignoreSyncFlag || (folder.status() & QMailFolder::SynchronizationEnabled); +} + +bool ImapSynchronizeBaseStrategy::nextFolder() +{ + while (ImapFolderListStrategy::nextFolder()) { + // Bypass any folder for which synchronization is disabled + if (synchronizationEnabled(_currentMailbox)) + return true; + } + + return false; +} + bool ImapSynchronizeBaseStrategy::selectNextPreviewFolder(ImapStrategyContextBase *context) { if (_retrieveUids.isEmpty()) { diff --git a/src/plugins/messageservices/imap/imapstrategy.h b/src/plugins/messageservices/imap/imapstrategy.h index 1f418e44..260fd580 100644 --- a/src/plugins/messageservices/imap/imapstrategy.h +++ b/src/plugins/messageservices/imap/imapstrategy.h @@ -396,7 +396,6 @@ protected: virtual void processNextFolder(ImapStrategyContextBase *context); virtual bool nextFolder(); virtual void processFolder(ImapStrategyContextBase *context); - virtual bool synchronizationEnabled(const QMailFolder &folder) const; void updateUndiscoveredCount(ImapStrategyContextBase *context); @@ -457,19 +456,23 @@ private: class ImapSynchronizeBaseStrategy : public ImapFolderListStrategy { public: - ImapSynchronizeBaseStrategy() {} + ImapSynchronizeBaseStrategy() : _ignoreSyncFlag(false) {} virtual ~ImapSynchronizeBaseStrategy() {} virtual void newConnection(ImapStrategyContextBase *context); virtual bool messageFetched(ImapStrategyContextBase *context, QMailMessage &message); virtual void messageFlushed(ImapStrategyContextBase *context, QMailMessage &message); + virtual void setIgnoreSyncFlag(bool ignoreSyncFlag); protected: virtual void handleLogin(ImapStrategyContextBase *context); virtual void handleSelect(ImapStrategyContextBase *context); virtual void handleUidFetch(ImapStrategyContextBase *context); + virtual bool nextFolder(); + virtual bool synchronizationEnabled(const QMailFolder &folder) const; + virtual void previewDiscoveredMessages(ImapStrategyContextBase *context); virtual bool selectNextPreviewFolder(ImapStrategyContextBase *context); @@ -486,6 +489,7 @@ protected: int _outstandingPreviews; private: + bool _ignoreSyncFlag; uint _progress; uint _total; }; |