summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDamien Caliste <dcaliste@free.fr>2020-01-24 16:28:37 +0100
committerDamien Caliste <dcaliste@free.fr>2021-04-09 03:08:32 +0200
commit93f3b4dc9bdcb44176b54a7fc32166ab6cf70e01 (patch)
treeeaed789e46ee732aac8ae0f6efe4bdb233597e61
parentdbd27fd51c6d348a713ea0ccafe824b6d236a7b6 (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.cpp4
-rw-r--r--src/plugins/messageservices/imap/imapstrategy.cpp32
-rw-r--r--src/plugins/messageservices/imap/imapstrategy.h8
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;
};