diff options
author | Marko Minkkinen <marko.minkkinen@digia.com> | 2010-10-11 17:58:02 +0300 |
---|---|---|
committer | Marko Minkkinen <marko.minkkinen@digia.com> | 2010-10-11 17:58:02 +0300 |
commit | 3358d2bf00dff3ef10963f90ebebc04330a666a1 (patch) | |
tree | f96f3fc584c0f4a19945ea581f565860e35778aa | |
parent | 715778a57b8557c306817d6c96b862424b1f69f4 (diff) |
MOBILITY-1479 fix, multiple email accounts crash fixed, retrieve message sender crash fixed
-rw-r--r-- | src/messaging/qfsengine_symbian.cpp | 52 | ||||
-rw-r--r-- | src/messaging/qfsengine_symbian_p.h | 2 |
2 files changed, 43 insertions, 11 deletions
diff --git a/src/messaging/qfsengine_symbian.cpp b/src/messaging/qfsengine_symbian.cpp index 835bcadd2b..27cf19f7a8 100644 --- a/src/messaging/qfsengine_symbian.cpp +++ b/src/messaging/qfsengine_symbian.cpp @@ -2101,10 +2101,13 @@ QMessage CFSEngine::CreateQMessageL(MEmailMessage* aMessage) const attachments.Close(); //from - TPtrC from = aMessage->SenderAddressL()->Address(); - if (from.Length() > 0) { - message.setFrom(QMessageAddress(QMessageAddress::Email, QString::fromUtf16(from.Ptr(), from.Length()))); - QMessagePrivate::setSenderName(message, QString::fromUtf16(from.Ptr(), from.Length())); + MEmailAddress* pSenderAddress = aMessage->SenderAddressL(); + if (pSenderAddress) { + TPtrC from = pSenderAddress->Address(); + if (from.Length() > 0) { + message.setFrom(QMessageAddress(QMessageAddress::Email, QString::fromUtf16(from.Ptr(), from.Length()))); + QMessagePrivate::setSenderName(message, QString::fromUtf16(from.Ptr(), from.Length())); + } } //to @@ -2775,11 +2778,14 @@ void CFSMessagesFindOperation::getAccountSpecificMessagesL(QMessageAccount& mess TMailboxId mailboxId(stripIdPrefix(messageAccount.id().toString()).toInt()); FSSearchOperation operation; operation.m_mailbox = m_clientApi->MailboxL(mailboxId); - operation.m_search = operation.m_mailbox->MessageSearchL(); - operation.m_search->AddSearchKeyL(_L("*")); - operation.m_search->SetSortCriteriaL( sortCriteria ); - operation.m_search->StartSearchL( *this ); // this implements MEmailSearchObserver - m_activeSearchCount++; + operation.m_emailSortCriteria = sortCriteria; + if (m_searchOperations.isEmpty()) { + operation.m_search = operation.m_mailbox->MessageSearchL(); + operation.m_search->AddSearchKeyL(_L("*")); + operation.m_search->SetSortCriteriaL(operation.m_emailSortCriteria); + operation.m_search->StartSearchL(*this); // this implements MEmailSearchObserver + m_activeSearchCount++; + } m_searchOperations.append(operation); } @@ -2830,15 +2836,39 @@ void CFSMessagesFindOperation::SearchCompletedL() if (m_receiveNewMessages) { m_receiveNewMessages = false; } else { - m_activeSearchCount--; - if (m_activeSearchCount <= 0) { + if (m_searchOperations.count() > 1) { + // At least two searchOperations in the list + // => Search continues + QMetaObject::invokeMethod(this, "continueSearch", Qt::QueuedConnection); + } else { + // Only one handled searchOperation in the list + // => Search completed + m_activeSearchCount--; QMetaObject::invokeMethod(this, "SearchCompleted", Qt::QueuedConnection); } } } + +void CFSMessagesFindOperation::continueSearch() +{ + // Remove previous search + m_searchOperations.first().m_search->Release(); + m_searchOperations.first().m_mailbox->Release(); + m_searchOperations.removeFirst(); + // Start next search + m_searchOperations.first().m_search = m_searchOperations.first().m_mailbox->MessageSearchL(); + m_searchOperations.first().m_search->AddSearchKeyL(_L("*")); + m_searchOperations.first().m_search->SetSortCriteriaL(m_searchOperations.first().m_emailSortCriteria); + m_searchOperations.first().m_search->StartSearchL(*this); // this implements MEmailSearchObserver +} void CFSMessagesFindOperation::SearchCompleted() { + if (m_searchOperations.count() > 0) { + m_searchOperations.first().m_search->Release(); + m_searchOperations.first().m_mailbox->Release(); + m_searchOperations.removeFirst(); + } if (m_searchField != None) { QMessageIdList idList; foreach (QMessageId messageId, m_idList) { diff --git a/src/messaging/qfsengine_symbian_p.h b/src/messaging/qfsengine_symbian_p.h index 62d5a0e9b1..110e391379 100644 --- a/src/messaging/qfsengine_symbian_p.h +++ b/src/messaging/qfsengine_symbian_p.h @@ -99,6 +99,7 @@ struct FSSearchOperation { MEmailMailbox* m_mailbox; MEmailMessageSearchAsync* m_search; + TEmailSortCriteria m_emailSortCriteria; }; #ifdef FREESTYLEMAILBOXOBSERVERUSED @@ -272,6 +273,7 @@ public: public slots: + void continueSearch(); void SearchCompleted(); private: |