diff options
author | Michael Nosov <Michael.Nosov@harman.com> | 2018-10-11 23:21:35 +0300 |
---|---|---|
committer | Michael Nosov <Michael.Nosov@harman.com> | 2018-11-01 07:07:34 +0000 |
commit | 0b63acc7b2158f33233bd804623ddc1cfd29c883 (patch) | |
tree | f2ab337b11f965c2f7de96a633ae77644f79adc0 | |
parent | 9312c70664082d5ae10cf18608b5b90dec7b6a67 (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.cpp | 9 | ||||
-rw-r--r-- | src/plugins/messageservices/pop/popclient.cpp | 32 |
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"; |