summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Nosov <Michael.Nosov@harman.com>2018-10-11 23:21:35 +0300
committerMichael Nosov <Michael.Nosov@harman.com>2018-11-01 07:07:34 +0000
commit0b63acc7b2158f33233bd804623ddc1cfd29c883 (patch)
treef2ab337b11f965c2f7de96a633ae77644f79adc0
parent9312c70664082d5ae10cf18608b5b90dec7b6a67 (diff)
Ensure on startup that pop3/imap accounts and folders have correct flags
For IMAP, ensure that: - IMAP account has 'CanCreateFolders' flag set For POP3, ensure that: - POP3 account has 'CanCreateFolders' flag unset - Inbox folder has 'MessagesPermitted' flag set during sync - All POP3 non-local folders have "DeletionPermitted=false" "RenamePermitted=false" "ChildCreationPermitted=false" "MessagesPermitted=true" Change-Id: I547e756a1cc4d25d47c832d6247c5472f6308ae1 Reviewed-by: Pekka Vuorela <pvuorela@iki.fi> Reviewed-by: Matthew Vogt <matthew.vogt@qinetic.com.au>
-rw-r--r--src/plugins/messageservices/imap/imapclient.cpp9
-rw-r--r--src/plugins/messageservices/pop/popclient.cpp32
2 files changed, 41 insertions, 0 deletions
diff --git a/src/plugins/messageservices/imap/imapclient.cpp b/src/plugins/messageservices/imap/imapclient.cpp
index 4080c191..679abeef 100644
--- a/src/plugins/messageservices/imap/imapclient.cpp
+++ b/src/plugins/messageservices/imap/imapclient.cpp
@@ -1453,6 +1453,15 @@ void ImapClient::setAccount(const QMailAccountId &id)
}
_config = QMailAccountConfiguration(id);
+ QMailAccount account(id);
+ if (!(account.status() & QMailAccount::CanCreateFolders)) {
+ account.setStatus(QMailAccount::CanCreateFolders, true);
+ if (!QMailStore::instance()->updateAccount(&account)) {
+ qWarning() << "Unable to update account" << account.id() << "CanCreateFolders" << true;
+ } else {
+ qMailLog(Messaging) << "CanCreateFolders for " << account.id() << "changed to" << true;
+ }
+ }
}
QMailAccountId ImapClient::account() const
diff --git a/src/plugins/messageservices/pop/popclient.cpp b/src/plugins/messageservices/pop/popclient.cpp
index 523850f2..16562e0b 100644
--- a/src/plugins/messageservices/pop/popclient.cpp
+++ b/src/plugins/messageservices/pop/popclient.cpp
@@ -210,6 +210,37 @@ void PopClient::setAccount(const QMailAccountId &id)
}
config = QMailAccountConfiguration(id);
+ QMailAccount account(id);
+ if (account.status() & QMailAccount::CanCreateFolders) {
+ account.setStatus(QMailAccount::CanCreateFolders, false);
+ if (!QMailStore::instance()->updateAccount(&account)) {
+ qWarning() << "Unable to update account" << account.id() << "to CanCreateFolders" << false;
+ } else {
+ qMailLog(POP) << "CanCreateFolders for " << account.id() << "changed to" << false;
+ }
+ }
+ // Update non-local folders which have 'RenamePermitted=true'/'DeletionPermitted=true'/'ChildCreationPermitted=true'/'MessagesPermitted=false'
+ QMailFolderKey popKey = QMailFolderKey::parentAccountId(id);
+ popKey &= QMailFolderKey::id(QMailFolder::LocalStorageFolderId, QMailDataComparator::NotEqual);
+ popKey &= QMailFolderKey::ancestorFolderIds(QMailFolderId(QMailFolder::LocalStorageFolderId), QMailDataComparator::Includes);
+ popKey &= QMailFolderKey::status(QMailFolder::DeletionPermitted, QMailDataComparator::Includes)
+ | QMailFolderKey::status(QMailFolder::RenamePermitted, QMailDataComparator::Includes)
+ | QMailFolderKey::status(QMailFolder::ChildCreationPermitted, QMailDataComparator::Includes)
+ | QMailFolderKey::status(QMailFolder::MessagesPermitted, QMailDataComparator::Excludes);
+
+ QMailFolderIdList folderIds = QMailStore::instance()->queryFolders(popKey);
+ foreach (const QMailFolderId &folderId, folderIds) {
+ QMailFolder folder = QMailFolder(folderId);
+ folder.setStatus(QMailFolder::DeletionPermitted, false);
+ folder.setStatus(QMailFolder::RenamePermitted, false);
+ folder.setStatus(QMailFolder::ChildCreationPermitted, false);
+ folder.setStatus(QMailFolder::MessagesPermitted, true);
+ if (!QMailStore::instance()->updateFolder(&folder)) {
+ qWarning() << "Unable to update flags for POP folder" << folder.id() << folder.path();
+ } else {
+ qMailLog(POP) << "Flags for POP folder" << folder.id() << folder.path() << "updated";
+ }
+ }
}
QMailAccountId PopClient::accountId() const
@@ -277,6 +308,7 @@ bool PopClient::findInbox()
childFolder.setDisplayName(tr("Inbox"));
childFolder.setStatus(QMailFolder::SynchronizationEnabled, true);
childFolder.setStatus(QMailFolder::Incoming, true);
+ childFolder.setStatus(QMailFolder::MessagesPermitted, true);
if(!QMailStore::instance()->addFolder(&childFolder))
qWarning() << "Unable to add child folder to pop account";