summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarko Minkkinen <marko.minkkinen@digia.com>2010-10-11 17:58:02 +0300
committerMarko Minkkinen <marko.minkkinen@digia.com>2010-10-11 17:58:02 +0300
commit3358d2bf00dff3ef10963f90ebebc04330a666a1 (patch)
treef96f3fc584c0f4a19945ea581f565860e35778aa
parent715778a57b8557c306817d6c96b862424b1f69f4 (diff)
MOBILITY-1479 fix, multiple email accounts crash fixed, retrieve message sender crash fixed
-rw-r--r--src/messaging/qfsengine_symbian.cpp52
-rw-r--r--src/messaging/qfsengine_symbian_p.h2
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: