diff options
| -rw-r--r-- | CHANGES | 2 | ||||
| -rw-r--r-- | src/plugins/messageservices/imap/imapclient.cpp | 5 | ||||
| -rw-r--r-- | src/plugins/messageservices/imap/imapstrategy.cpp | 59 | ||||
| -rw-r--r-- | src/plugins/messageservices/imap/imapstrategy.h | 14 |
4 files changed, 48 insertions, 32 deletions
@@ -2,6 +2,7 @@ Latest Changes --------------- 201126 + * Fixes: NB#267169 "can't get your message" error shown when going back * Fixes: NB#195729 ConfigurationError not shown when account is configured with wrong settings 201125 @@ -12,6 +13,7 @@ Latest Changes * Fixes: NB#265236 "Error occurred" shown frequently when syncing emails * Fixes: NB#268303 messageserver aborts with manual send receive of Google plugin account after SSU * Fixes: NB#267055 - Other mail account : messages deleted in device are not synced to server + * Fixes: NB#267394 Always up to date stops working in a certain scenario 201123 * Fixes: NB#265223 Original message body shown empty in message view diff --git a/src/plugins/messageservices/imap/imapclient.cpp b/src/plugins/messageservices/imap/imapclient.cpp index 205bcc4f..1eb2d560 100644 --- a/src/plugins/messageservices/imap/imapclient.cpp +++ b/src/plugins/messageservices/imap/imapclient.cpp @@ -887,7 +887,10 @@ void ImapClient::messageFetched(QMailMessage& mail, const QString &detachedFilen QMailMessage *bufferMessage(new QMailMessage(mail)); _bufferedMessages.append(bufferMessage); - _strategyContext->messageFetched(*bufferMessage); + if (_strategyContext->messageFetched(*bufferMessage)) { + removeAllFromBuffer(bufferMessage); + return; + } QMailMessageBufferFlushCallback *callback = new MessageFlushedWrapper(_strategyContext); callbacks << callback; QMailMessageBuffer::instance()->setCallback(bufferMessage, callback); diff --git a/src/plugins/messageservices/imap/imapstrategy.cpp b/src/plugins/messageservices/imap/imapstrategy.cpp index 43205afc..8ae059db 100644 --- a/src/plugins/messageservices/imap/imapstrategy.cpp +++ b/src/plugins/messageservices/imap/imapstrategy.cpp @@ -522,31 +522,40 @@ void ImapStrategy::mailboxListed(ImapStrategyContextBase *c, QMailFolder& folder Q_UNUSED(flags) } -void ImapStrategy::messageFetched(ImapStrategyContextBase * /*context*/, QMailMessage &message) +bool ImapStrategy::messageFetched(ImapStrategyContextBase * context, QMailMessage &message) { _folder[message.serverUid()] = false; // Store this message to the mail store if (message.id().isValid()) { if (!QMailMessageBuffer::instance()->updateMessage(&message)) { _error = true; - qWarning() << "Unable to add message for account:" << message.parentAccountId() << "UID:" << message.serverUid(); - return; + qWarning() << "Unable to update message for account:" << message.parentAccountId() << "UID:" << message.serverUid(); + return false; } - } else { + } else { QMailMessageKey duplicateKey(QMailMessageKey::serverUid(message.serverUid()) & QMailMessageKey::parentAccountId(message.parentAccountId())); - if (!QMailStore::instance()->removeMessages(duplicateKey)) { - _error = true; - qWarning() << "Unable to remove duplicate message(s) for account:" << message.parentAccountId() << "UID:" << message.serverUid(); - return; - } - if (!QMailMessageBuffer::instance()->addMessage(&message)) { - _error = true; - qWarning() << "Unable to add message for account:" << message.parentAccountId() << "UID:" << message.serverUid(); - return; + QMailMessageIdList ids(QMailStore::instance()->queryMessages(duplicateKey)); + if (!ids.isEmpty()) { + QMailMessageId existingId(ids.takeFirst()); + if (!ids.isEmpty() && !QMailStore::instance()->removeMessages(QMailMessageKey::id(ids))) { + _error = true; + qWarning() << "Unable to remove duplicate message(s) for account:" << message.parentAccountId() << "UID:" << message.serverUid(); + return true; + } + QMailMessage lv(existingId); + messageFlushed(context, lv); + return true; // flushing complete + } else { + if (!QMailMessageBuffer::instance()->addMessage(&message)) { + _error = true; + qWarning() << "Unable to add message for account:" << message.parentAccountId() << "UID:" << message.serverUid(); + return false; + } } _folder[message.serverUid()] = true; } + return false; } void ImapStrategy::messageFlushed(ImapStrategyContextBase *context, QMailMessage &message) @@ -1653,11 +1662,12 @@ void ImapFetchSelectedMessagesStrategy::downloadSize(ImapStrategyContextBase *co } } -void ImapFetchSelectedMessagesStrategy::messageFetched(ImapStrategyContextBase *context, QMailMessage &message) +bool ImapFetchSelectedMessagesStrategy::messageFetched(ImapStrategyContextBase *context, QMailMessage &message) { - ImapMessageListStrategy::messageFetched(context, message); + bool result = ImapMessageListStrategy::messageFetched(context, message); itemFetched(context, message.serverUid()); + return result; } void ImapFetchSelectedMessagesStrategy::messageFlushed(ImapStrategyContextBase *context, QMailMessage &message) @@ -1755,13 +1765,13 @@ void ImapSearchMessageStrategy::folderListFolderAction(ImapStrategyContextBase * context->protocol().sendSearchMessages(search.criteria, search.bodyText, search.sort); } -void ImapSearchMessageStrategy::messageFetched(ImapStrategyContextBase *context, QMailMessage &message) +bool ImapSearchMessageStrategy::messageFetched(ImapStrategyContextBase *context, QMailMessage &message) { if(_canceled) - return; + return false; message.setStatus(QMailMessage::Temporary, true); - ImapRetrieveFolderListStrategy::messageFetched(context, message); + return ImapRetrieveFolderListStrategy::messageFetched(context, message); } void ImapSearchMessageStrategy::messageFlushed(ImapStrategyContextBase *context, QMailMessage &message) @@ -2216,11 +2226,12 @@ void ImapSynchronizeBaseStrategy::folderPreviewCompleted(ImapStrategyContextBase { } -void ImapSynchronizeBaseStrategy::messageFetched(ImapStrategyContextBase *context, QMailMessage &message) +bool ImapSynchronizeBaseStrategy::messageFetched(ImapStrategyContextBase *context, QMailMessage &message) { - ImapFolderListStrategy::messageFetched(context, message); + bool result = ImapFolderListStrategy::messageFetched(context, message); if (_transferState == Preview) context->progressChanged(_progress++, _total); + return result; } void ImapSynchronizeBaseStrategy::messageFlushed(ImapStrategyContextBase *context, QMailMessage &message) @@ -3877,12 +3888,12 @@ void ImapCopyMessagesStrategy::messageCreated(ImapStrategyContextBase *context, ImapFetchSelectedMessagesStrategy::messageCreated(context, id, createdUid); } -void ImapCopyMessagesStrategy::messageFetched(ImapStrategyContextBase *context, QMailMessage &message) +bool ImapCopyMessagesStrategy::messageFetched(ImapStrategyContextBase *context, QMailMessage &message) { QString sourceUid = copiedMessageFetched(context, message); _remember[message.serverUid()] = sourceUid; - ImapFetchSelectedMessagesStrategy::messageFetched(context, message); + return ImapFetchSelectedMessagesStrategy::messageFetched(context, message); } void ImapCopyMessagesStrategy::messageFlushed(ImapStrategyContextBase *context, QMailMessage &message) @@ -4196,11 +4207,11 @@ void ImapExternalizeMessagesStrategy::handleGenUrlAuth(ImapStrategyContextBase * resolveNextMessage(context); } -void ImapExternalizeMessagesStrategy::messageFetched(ImapStrategyContextBase *context, QMailMessage &message) +bool ImapExternalizeMessagesStrategy::messageFetched(ImapStrategyContextBase *context, QMailMessage &message) { copiedMessageFetched(context, message); - ImapFetchSelectedMessagesStrategy::messageFetched(context, message); + return ImapFetchSelectedMessagesStrategy::messageFetched(context, message); } void ImapExternalizeMessagesStrategy::messageFlushed(ImapStrategyContextBase *context, QMailMessage &message) diff --git a/src/plugins/messageservices/imap/imapstrategy.h b/src/plugins/messageservices/imap/imapstrategy.h index 48a4948e..0ea26489 100644 --- a/src/plugins/messageservices/imap/imapstrategy.h +++ b/src/plugins/messageservices/imap/imapstrategy.h @@ -137,7 +137,7 @@ public: virtual void transition(ImapStrategyContextBase*, const ImapCommand, const OperationStatus) = 0; virtual void mailboxListed(ImapStrategyContextBase *context, QMailFolder& folder, const QString &flags); - virtual void messageFetched(ImapStrategyContextBase *context, QMailMessage &message); + virtual bool messageFetched(ImapStrategyContextBase *context, QMailMessage &message); virtual void messageFlushed(ImapStrategyContextBase *context, QMailMessage &message); virtual void dataFetched(ImapStrategyContextBase *context, QMailMessage &message, const QString &uid, const QString §ion); virtual void dataFlushed(ImapStrategyContextBase *context, QMailMessage &message, const QString &uid, const QString §ion); @@ -314,7 +314,7 @@ public: virtual void transition(ImapStrategyContextBase*, const ImapCommand, const OperationStatus); virtual void downloadSize(ImapStrategyContextBase*, const QString &uid, int length); - virtual void messageFetched(ImapStrategyContextBase *context, QMailMessage &message); + virtual bool messageFetched(ImapStrategyContextBase *context, QMailMessage &message); virtual void messageFlushed(ImapStrategyContextBase *context, QMailMessage &message); virtual void dataFetched(ImapStrategyContextBase *context, QMailMessage &message, const QString &uid, const QString §ion); virtual void dataFlushed(ImapStrategyContextBase *context, QMailMessage &message, const QString &uid, const QString §ion); @@ -441,7 +441,7 @@ public: virtual void newConnection(ImapStrategyContextBase *context); - virtual void messageFetched(ImapStrategyContextBase *context, QMailMessage &message); + virtual bool messageFetched(ImapStrategyContextBase *context, QMailMessage &message); virtual void messageFlushed(ImapStrategyContextBase *context, QMailMessage &message); protected: @@ -623,7 +623,7 @@ protected: virtual void handleUidFetch(ImapStrategyContextBase *context); virtual void folderListFolderAction(ImapStrategyContextBase *context); - virtual void messageFetched(ImapStrategyContextBase *context, QMailMessage &message); + virtual bool messageFetched(ImapStrategyContextBase *context, QMailMessage &message); virtual void messageFlushed(ImapStrategyContextBase *context, QMailMessage &message); virtual void messageListCompleted(ImapStrategyContextBase *context); @@ -677,7 +677,7 @@ public: virtual void messageCopied(ImapStrategyContextBase *context, const QString &copiedUid, const QString &createdUid); virtual void messageCreated(ImapStrategyContextBase *context, const QMailMessageId &id, const QString &createdUid); - virtual void messageFetched(ImapStrategyContextBase *context, QMailMessage &message); + virtual bool messageFetched(ImapStrategyContextBase *context, QMailMessage &message); virtual void messageFlushed(ImapStrategyContextBase *context, QMailMessage &message); protected: @@ -750,7 +750,7 @@ public: virtual void newConnection(ImapStrategyContextBase *context); virtual void transition(ImapStrategyContextBase*, const ImapCommand, const OperationStatus); - virtual void messageFetched(ImapStrategyContextBase *context, QMailMessage &message); + virtual bool messageFetched(ImapStrategyContextBase *context, QMailMessage &message); virtual void messageFlushed(ImapStrategyContextBase *context, QMailMessage &message); virtual void urlAuthorized(ImapStrategyContextBase *context, const QString &url); @@ -839,7 +839,7 @@ public: void commandTransition(const ImapCommand command, const OperationStatus status) { _strategy->transition(this, command, status); } void mailboxListed(QMailFolder& folder, const QString &flags) { _strategy->mailboxListed(this, folder, flags); } - void messageFetched(QMailMessage &message) { _strategy->messageFetched(this, message); } + bool messageFetched(QMailMessage &message) { return _strategy->messageFetched(this, message); } void messageFlushed(QMailMessage &message) { _strategy->messageFlushed(this, message); } void dataFetched(QMailMessage &message, const QString &uid, const QString §ion) { _strategy->dataFetched(this, message, uid, section); } void dataFlushed(QMailMessage &message, const QString &uid, const QString §ion) { _strategy->dataFlushed(this, message, uid, section); } |
