--- a/qtmobility/src/messaging/qmtmengine_symbian.cpp Fri May 14 16:41:33 2010 +0300
+++ b/qtmobility/src/messaging/qmtmengine_symbian.cpp Thu May 27 13:42:11 2010 +0300
@@ -88,8 +88,11 @@
#include <miutmsg.h>
#include <charconv.h>
#include <imcvtext.h> // KImcvMultipart declaration
+#include <smscmds.h>
#include <QTextCodec>
+#include <messagingutil_p.h>
+
QTM_BEGIN_NAMESPACE
@@ -105,7 +108,7 @@
CActiveScheduler::Add(this);
iTimer.CreateLocal();
- TRAPD(err,
+ TRAPD(err,
ipMsvSession = CMsvSession::OpenSyncL(*this);
iSessionReady = ETrue;
ipClientMtmReg = CClientMtmRegistry::NewL(*ipMsvSession);
@@ -119,7 +122,7 @@
// Create & Add SMS Account
TRAPD(accountError,
- iSMSAccountidAsString = QString::number(mtmServiceEntryIdL(CMTMEngine::MTMTypeSMS));
+ iSMSAccountidAsString = SymbianHelpers::addIdPrefix(QString::number(mtmServiceEntryIdL(CMTMEngine::MTMTypeSMS)),SymbianHelpers::EngineTypeMTM);
QMessageAccount smsAcc = QMessageAccountPrivate::from(QMessageAccountId(iSMSAccountidAsString),
QString("SMS"),
mtmServiceEntryIdL(CMTMEngine::MTMTypeSMS),
@@ -129,7 +132,7 @@
// Create & Add MMS Account
- iMMSAccountidAsString = QString::number(mtmServiceEntryIdL(CMTMEngine::MTMTypeMMS));
+ iMMSAccountidAsString = SymbianHelpers::addIdPrefix(QString::number(mtmServiceEntryIdL(CMTMEngine::MTMTypeMMS)),SymbianHelpers::EngineTypeMTM);
QMessageAccount mmsAcc = QMessageAccountPrivate::from(QMessageAccountId(iMMSAccountidAsString),
QString("MMS"),
mtmServiceEntryIdL(CMTMEngine::MTMTypeMMS),
@@ -375,9 +378,9 @@
if (err == KErrNone) {
QString idAsString;
if (defaultAccount.iRelatedService != 0) {
- idAsString = QString::number(defaultAccount.iRelatedService);
+ idAsString = SymbianHelpers::addIdPrefix(QString::number(defaultAccount.iRelatedService),SymbianHelpers::EngineTypeMTM);
} else {
- idAsString = QString::number(defaultAccount.iSmtpService);
+ idAsString = SymbianHelpers::addIdPrefix(QString::number(defaultAccount.iSmtpService),SymbianHelpers::EngineTypeMTM);
}
if (!iAccounts.contains(idAsString)) {
QMessageAccount account = QMessageAccountPrivate::from(QMessageAccountId(idAsString),
@@ -398,7 +401,7 @@
pEmailAccounts->GetImapAccountsL(imapAccounts);
CleanupClosePushL(imapAccounts);
for (int i=0; i < imapAccounts.Count(); i++) {
- QString idAsString = QString::number(imapAccounts[i].iImapService);
+ QString idAsString = SymbianHelpers::addIdPrefix(QString::number(imapAccounts[i].iImapService),SymbianHelpers::EngineTypeMTM);
if (!iAccounts.contains(idAsString)) {
QMessageAccount account = QMessageAccountPrivate::from(QMessageAccountId(idAsString),
QString::fromUtf16(imapAccounts[i].iImapAccountName.Ptr(), imapAccounts[i].iImapAccountName.Length()),
@@ -416,9 +419,9 @@
pEmailAccounts->GetPopAccountsL(popAccounts);
CleanupClosePushL(popAccounts);
for (int i=0; i < popAccounts.Count(); i++) {
- QString idAsString = QString::number(popAccounts[i].iPopService);
+ QString idAsString = SymbianHelpers::addIdPrefix(QString::number(popAccounts[i].iPopService),SymbianHelpers::EngineTypeMTM);
if (!iAccounts.contains(idAsString)) {
- QMessageAccount account = QMessageAccountPrivate::from(QMessageAccountId(QString::number(popAccounts[i].iPopService)),
+ QMessageAccount account = QMessageAccountPrivate::from(QMessageAccountId(SymbianHelpers::addIdPrefix(QString::number(popAccounts[i].iPopService),SymbianHelpers::EngineTypeMTM)),
QString::fromUtf16(popAccounts[i].iPopAccountName.Ptr(), popAccounts[i].iPopAccountName.Length()),
popAccounts[i].iPopService,
popAccounts[i].iSmtpService,
@@ -435,9 +438,9 @@
CleanupClosePushL(smtpAccounts);
for (int i=0; i < smtpAccounts.Count(); i++) {
if (smtpAccounts[i].iRelatedService == 0) {
- QString idAsString = QString::number(smtpAccounts[i].iSmtpService);
+ QString idAsString = SymbianHelpers::addIdPrefix(QString::number(smtpAccounts[i].iSmtpService),SymbianHelpers::EngineTypeMTM);
if (!iAccounts.contains(idAsString)) {
- QMessageAccount account = QMessageAccountPrivate::from(QMessageAccountId(QString::number(smtpAccounts[i].iSmtpService)),
+ QMessageAccount account = QMessageAccountPrivate::from(QMessageAccountId(SymbianHelpers::addIdPrefix(QString::number(smtpAccounts[i].iSmtpService),SymbianHelpers::EngineTypeMTM)),
QString::fromUtf16(smtpAccounts[i].iSmtpAccountName.Ptr(), smtpAccounts[i].iSmtpAccountName.Length()),
smtpAccounts[i].iRelatedService,
smtpAccounts[i].iSmtpService,
@@ -699,7 +702,7 @@
void CMTMEngine::showMessageL(const QMessageId &id)
{
- long int messageId = id.toString().toLong();
+ long int messageId = SymbianHelpers::stripIdPrefix(id.toString()).toLong();
CMsvEntry* pEntry = ipMsvSession->GetEntryL(messageId);
CleanupStack::PushL(pEntry);
@@ -967,7 +970,7 @@
{
Q_UNUSED(id); // all attachments are retrieved (cannot retrieve only one)
- long int messId = messageId.toString().toLong();
+ long int messId = SymbianHelpers::stripIdPrefix(messageId.toString()).toLong();
CMsvEntry* pEntry = ipMsvSession->GetEntryL(messId);
CleanupStack::PushL(pEntry);
@@ -1074,7 +1077,7 @@
void CMTMEngine::retrieveBodyL(const QMessageId& id) const
{
- long int messageId = id.toString().toLong();
+ long int messageId = SymbianHelpers::stripIdPrefix(id.toString()).toLong();
CMsvEntry* pEntry = ipMsvSession->GetEntryL(messageId);
CleanupStack::PushL(pEntry);
@@ -1181,7 +1184,7 @@
void CMTMEngine::retrieveHeaderL(const QMessageId& id) const
{
- long int messageId = id.toString().toLong();
+ long int messageId = SymbianHelpers::stripIdPrefix(id.toString()).toLong();
CMsvEntry* pEntry = ipMsvSession->GetEntryL(messageId);
CleanupStack::PushL(pEntry);
@@ -1325,7 +1328,7 @@
bool CMTMEngine::removeMessageL(const QMessageId &id, QMessageManager::RemovalOption /*option*/)
{
- long int messageId = id.toString().toLong();
+ long int messageId = SymbianHelpers::stripIdPrefix(id.toString()).toLong();
CMsvEntry* pEntry = ipMsvSession->GetEntryL(messageId);
CleanupStack::PushL(pEntry);
@@ -1764,6 +1767,7 @@
iMessageQueries.removeAt(index);
}
+
void CMTMEngine::applyOffsetAndLimitToMsgIds(QMessageIdList& idList, int offset, int limit) const
{
if (offset > 0) {
@@ -1812,7 +1816,7 @@
{
if (pf->_comparatorType == QMessageFolderFilterPrivate::Equality) {
QMessageDataComparator::EqualityComparator cmp(static_cast<QMessageDataComparator::EqualityComparator>(pf->_comparatorValue));
- if (pf->_value.toString().length() > 0) {
+ if (pf->_value.toString().length() > QString(SymbianHelpers::mtmPrefix).length()) {
bool folderOk = false;
long int folderId = folderIdFromQMessageFolderId(QMessageFolderId(pf->_value.toString()));
CMsvEntry* pEntry = retrieveCMsvEntryAndPushToCleanupStack(folderId);
@@ -1926,12 +1930,12 @@
if (pf->_comparatorType == QMessageFolderFilterPrivate::Equality) {
QMessageDataComparator::EqualityComparator cmp(static_cast<QMessageDataComparator::EqualityComparator>(pf->_comparatorValue));
if (cmp == QMessageDataComparator::Equal) {
- if (pf->_value.toString().length() > 0) {
+ if (pf->_value.toString().length() > QString(SymbianHelpers::mtmPrefix).length()) {
ids = folderIdsByAccountId(QMessageAccountId(pf->_value.toString()));
}
} else { // NotEqual
ids = allFolders();
- if (pf->_value.toString().length() > 0) {
+ if (pf->_value.toString().length() > QString(SymbianHelpers::mtmPrefix).length()) {
QMessageFolderIdList ids2 = folderIdsByAccountId(QMessageAccountId(pf->_value.toString()));
for (int i = 0; i < ids2.count(); i++) {
ids.removeOne(ids2[i]);
@@ -1963,7 +1967,7 @@
CleanupStack::PushL(pSelection);
if (pSelection->Count() > 0) {
for(TInt i = 0; i < pSelection->Count(); i++) {
- ids.append(QMessageFolderId(QString::number(pSelection->At(i))));
+ ids.append(QMessageFolderId(SymbianHelpers::addIdPrefix(QString::number(pSelection->At(i)),SymbianHelpers::EngineTypeMTM)));
}
}
CleanupStack::PopAndDestroy(pSelection);
@@ -2092,17 +2096,17 @@
serviceEntryIdString = nullString.left(8-serviceEntryIdString.length()) + serviceEntryIdString;
QString folderIdString = QString::number(folderId);
folderIdString = nullString.left(8-folderIdString.length()) + folderIdString;
- return serviceEntryIdString+folderIdString;
+ return SymbianHelpers::addIdPrefix(serviceEntryIdString+folderIdString,SymbianHelpers::EngineTypeMTM);
}
TMsvId CMTMEngine::serviceEntryIdFromQMessageFolderId(const QMessageFolderId& folderId) const
{
- return folderId.toString().left(8).toLong();
+ return SymbianHelpers::stripIdPrefix(folderId.toString()).left(8).toLong();
}
TMsvId CMTMEngine::folderIdFromQMessageFolderId(const QMessageFolderId& folderId) const
{
- return folderId.toString().right(8).toLong();
+ return SymbianHelpers::stripIdPrefix(folderId.toString()).right(8).toLong();
}
void CMTMEngine::handleNestedFiltersFromFolderFilter(QMessageFolderFilter &filter) const
@@ -2310,7 +2314,7 @@
{
QMessage message;
- long int messageId = id.toString().toLong();
+ long int messageId = SymbianHelpers::stripIdPrefix(id.toString()).toLong();
CMsvEntry* pEntry = ipMsvSession->GetEntryL(messageId);
CleanupStack::PushL(pEntry);
@@ -2429,12 +2433,35 @@
destinationFolderId = standardFolderId(message.standardFolder());
}
- // Current entry is the Draft folder.
- ipSmsMtm->SwitchCurrentEntryL(destinationFolderId);
- // Create a new SMS message entry as a child of the current context.
- ipSmsMtm->CreateMessageL(KUidMsgTypeSMS.iUid);
- TMsvEntry entry = ipSmsMtm->Entry().Entry();
-
+ // Switch current SMS MTM context to folder entry
+ ipSmsMtm->SwitchCurrentEntryL(destinationFolderId);
+
+ // Create a new SMS message entry as a child of the current context
+ //
+ // Note: CreateMessageL sets following values to new message entry:
+ // entry.iType = KUidMsvMessageEntry;
+ // entry.iRelatedId = <ID of the current SMS service>;
+ // entry.iServiceId = KMsvLocalServiceIndexEntryId;
+ // entry.iMtm = <SMS Message Type UID>;
+ // entry.SetVisible(EFalse);
+ // entry.SetInPreparation(ETrue);
+ // entry.iDate.UniversalTime(); <= Not set in older platforms
+ //
+ // Note: CreateMessageL automatically creates SMS header
+ // that contains default service settings & default
+ // service center address
+ //
+ // Note: CreateMessageL switches current SMS MTM context to
+ // a new SMS message context
+ ipSmsMtm->CreateMessageL(KUidMsgTypeSMS.iUid);
+
+ // Get the current context (new message context)
+ CMsvEntry& newMessageContext = ipSmsMtm->Entry();
+
+ // Copy entry values from the new message context index entry
+ TMsvEntry entry = newMessageContext.Entry();
+
+ // Set priority values to message entry
switch (message.priority()) {
case QMessage::HighPriority:
entry.SetPriority(EMsvHighPriority);
@@ -2446,6 +2473,8 @@
entry.SetPriority(EMsvLowPriority);
break;
}
+
+ // Set message read status to message entry
if (message.status() & QMessage::Read) {
entry.SetUnread(false);
entry.SetNew(false);
@@ -2453,8 +2482,9 @@
entry.SetUnread(true);
entry.SetNew(true);
}
- ipSmsMtm->Entry().ChangeL(entry);
-
+
+ // Set first message addressee to message entry
+ // and all message addressees to SMS message
QList<QMessageAddress> list(message.to());
if (!list.empty()){
TPtrC16 receiver(KNullDesC);
@@ -2462,45 +2492,51 @@
for (int i = 0; i < list.size(); ++i) {
qreceiver = list.at(i).addressee();
receiver.Set(reinterpret_cast<const TUint16*>(qreceiver.utf16()));
- ipSmsMtm->AddAddresseeL(receiver);
- ipSmsMtm->SaveMessageL();
+ if (i == 0) {
+ // Set addressee to message entry
+ entry.iDetails.Set(receiver);
}
- }
-
- CMsvStore* store = ipSmsMtm->Entry().EditStoreL();
- CleanupStack::PushL(store);
-
+ // Add addressee to SMS message
+ ipSmsMtm->AddAddresseeL(receiver);
+ }
+ }
+
+ // Set body to message entry and SMS message
QString body = message.textContent();
if (!body.isEmpty()){
TPtrC16 msg(reinterpret_cast<const TUint16*>(body.utf16()));
- if (!ipRichText) {
- ipCharFormatLayer = CCharFormatLayer::NewL();
- ipParaFormatLayer = CParaFormatLayer::NewL();
- ipRichText=CRichText::NewL(ipParaFormatLayer,ipCharFormatLayer);
+
+ // Set body to message entry
+ entry.iDescription.Set(msg);
+
+ // Set body to SMS message
+ CRichText& body = ipSmsMtm->Body();
+ body.Reset();
+ body.InsertL(0, msg);
+ }
+
+ // Set date to message entry
+ if (!message.receivedDate().isNull() || !message.date().isNull()) {
+ if (!message.date().isNull()) {
+ entry.iDate = qDateTimeToSymbianTTime(message.date());
+ } else {
+ entry.iDate = qDateTimeToSymbianTTime(message.receivedDate());
}
- ipRichText->Reset();
- ipRichText->InsertL(0, msg);
- store->StoreBodyTextL(*ipRichText);
- store->CommitL();
- }
- CleanupStack::PopAndDestroy(store);
-
+ }
+
+ // Set new message's context's index entry to the specified values.
+ // <=> Changes are set into cache only
+ newMessageContext.ChangeL(entry);
+
+ // Commit cached changes to the storage
+ // Note: SaveMessageL sets following values to message entry:
+ // entry.SetVisible(ETrue);
+ // entry.SetInPreparation(EFalse);
+ ipSmsMtm->SaveMessageL();
+
+ // Get message id from new SMS message index entry
QMessagePrivate* privateMessage = QMessagePrivate::implementation(message);
- privateMessage->_id = QMessageId(QString::number(entry.Id()));
-
- if (!message.receivedDate().isNull() || !message.date().isNull()) {
- // Change the date to given date
- CMsvEntry* pEntry = ipMsvSession->GetEntryL(entry.Id());
- CleanupStack::PushL(pEntry);
- TMsvEntry changedEntry = pEntry->Entry();
- if (!message.date().isNull()) {
- changedEntry.iDate = qDateTimeToSymbianTTime(message.date());
- } else {
- changedEntry.iDate = qDateTimeToSymbianTTime(message.receivedDate());
- }
- pEntry->ChangeL(changedEntry);
- CleanupStack::PopAndDestroy(pEntry);
- }
+ privateMessage->_id = QMessageId(SymbianHelpers::addIdPrefix(QString::number(entry.Id())));
}
bool CMTMEngine::sendSMS(QMessage &message)
@@ -2517,34 +2553,126 @@
return true;
}
+bool CMTMEngine::validateSMS()
+{
+
+ // Validate SMS body.
+ TMsvPartList result(KMsvMessagePartNone);
+ result = ipSmsMtm->ValidateMessage(KMsvMessagePartBody);
+ if (result != KMsvMessagePartNone ) {
+ return false;
+ }
+
+ // Validate SMS recipient
+ result = ipSmsMtm->ValidateMessage(KMsvMessagePartRecipient);
+ if ( result != KMsvMessagePartNone ) {
+ return false;
+ }
+
+ return true;
+}
+
void CMTMEngine::sendSMSL(QMessage &message)
{
if (!iSessionReady) {
User::Leave(KErrNotReady);
}
-
+
if (!message.id().isValid()) {
QMessagePrivate::setStandardFolder(message, QMessage::DraftsFolder);
storeSMSL(message);
}
-
- long int messageId = message.id().toString().toLong();
+
+ long int messageId = SymbianHelpers::stripIdPrefix(message.id().toString()).toLong();
if (messageId == 0) {
User::Leave(KErrNotReady);
}
-
- CMsvEntry* pMsvEntry = retrieveCMsvEntryAndPushToCleanupStack(messageId);
- CMsvOperationWait* pMsvOperationWait = CMsvOperationWait::NewLC();
-
- ipSmsMtm->SwitchCurrentEntryL(pMsvEntry->Entry().Parent());
- // Following sends SMS and _moves_ SMS from Drafts Folder to Sent Folder
- CMsvOperation* pMsvOperation = ipSmsMtm->Entry().CopyL(messageId, ipSmsMtm->ServiceId(), pMsvOperationWait->iStatus);
- pMsvOperationWait->Start();
- CActiveScheduler::Start();
- delete pMsvOperation;
-
- CleanupStack::PopAndDestroy(pMsvOperationWait);
- releaseCMsvEntryAndPopFromCleanupStack(pMsvEntry);
+
+ // Switch current SMS MTM context to message entry
+ ipSmsMtm->SwitchCurrentEntryL(messageId);
+
+ // Load the cache with the message data
+ ipSmsMtm->LoadMessageL();
+
+ // Copy entry values from the message context index entry
+ TMsvEntry entry = ipSmsMtm->Entry().Entry();
+
+ // Update date to UniversalTime
+ // <=> Date field is used to control message send time
+ entry.iDate.UniversalTime();
+
+ // Update message sending state
+ entry.SetSendingState(KMsvSendStateWaiting);
+
+ // Set SMS Service & delivery settings to the SMS header
+ CSmsHeader& smsHeader = ipSmsMtm->SmsHeader();
+ CSmsSettings* pSmsSettings = CSmsSettings::NewL();
+ CleanupStack::PushL(pSmsSettings);
+
+ pSmsSettings->CopyL(ipSmsMtm->ServiceSettings());
+ pSmsSettings->SetDelivery(ESmsDeliveryImmediately);
+ pSmsSettings->SetDeliveryReport(EFalse);
+ smsHeader.SetSmsSettingsL(*pSmsSettings);
+
+ if (smsHeader.Message().ServiceCenterAddress().Length() == 0) {
+ CSmsSettings* pSmsServiceSettings = &(ipSmsMtm->ServiceSettings());
+ if (!pSmsServiceSettings->ServiceCenterCount()) {
+ User::Leave(KErrNotReady);
+ } else {
+ CSmsNumber* pSmsCenterNumber = CSmsNumber::NewL();
+ CleanupStack::PushL(pSmsCenterNumber);
+ pSmsCenterNumber->SetAddressL((pSmsServiceSettings->GetServiceCenter(pSmsServiceSettings->DefaultServiceCenter())).Address());
+ smsHeader.Message().SetServiceCenterAddressL(pSmsCenterNumber->Address());
+ CleanupStack::PopAndDestroy(pSmsCenterNumber);
+ }
+ }
+
+ CleanupStack::PopAndDestroy(pSmsSettings);
+
+ // Update message's context's index entry to the new values.
+ // <=> Changes are set into cache only
+ ipSmsMtm->Entry().ChangeL(entry);
+
+ // Commit cached changes to the storage
+ ipSmsMtm->SaveMessageL();
+
+ if (validateSMS()) {
+ // Switch current SMS MTM context to SMS message parent folder entry
+ ipSmsMtm->SwitchCurrentEntryL(ipSmsMtm->Entry().Entry().Parent());
+
+ CMsvOperationWait* pMsvOperationWait = CMsvOperationWait::NewLC();
+
+ // Move SMS Message to Outbox
+ CMsvOperation* pMsvOperation = ipSmsMtm->Entry().MoveL(messageId,
+ KMsvGlobalOutBoxIndexEntryId,
+ pMsvOperationWait->iStatus);
+ pMsvOperationWait->Start();
+ CActiveScheduler::Start();
+ delete pMsvOperation;
+
+ // Send SMS Message
+ CMsvEntrySelection* pMsvEntrySelection = new(ELeave) CMsvEntrySelection;
+ CleanupStack::PushL(pMsvEntrySelection);
+
+ // Add SMS Message Id to selection
+ pMsvEntrySelection->AppendL(messageId);
+
+ // Add selection (containing SMS Message Id) to task scheduler
+ TBuf8<1> dummyParams;
+ pMsvOperation = ipSmsMtm->InvokeAsyncFunctionL(ESmsMtmCommandScheduleCopy,
+ *pMsvEntrySelection,
+ dummyParams,
+ pMsvOperationWait->iStatus);
+ pMsvOperationWait->Start();
+ CActiveScheduler::Start();
+ delete pMsvOperation;
+
+ CleanupStack::PopAndDestroy(pMsvEntrySelection);
+
+ CleanupStack::PopAndDestroy(pMsvOperationWait);
+ } else {
+ User::Leave(KErrCorrupt);
+ }
}
void CMTMEngine::storeMMSL(QMessage &message)
@@ -2737,7 +2865,7 @@
CleanupStack::PopAndDestroy(); // store
QMessagePrivate* privateMessage = QMessagePrivate::implementation(message);
- privateMessage->_id = QMessageId(QString::number(indexEntry));
+ privateMessage->_id = QMessageId(SymbianHelpers::addIdPrefix(QString::number(indexEntry,SymbianHelpers::EngineTypeMTM)));
// Save the changes
ipMmsMtm->SaveMessageL();
@@ -2763,7 +2891,7 @@
}
QMessageId id = message.id();
- long int messageId = id.toString().toLong();
+ long int messageId = SymbianHelpers::stripIdPrefix(id.toString()).toLong();
if (messageId == 0)
return;
@@ -2849,7 +2977,7 @@
}
QMessageId id = message.id();
- long int messageId = id.toString().toLong();
+ long int messageId = SymbianHelpers::stripIdPrefix(id.toString()).toLong();
if (messageId == 0)
return;
@@ -3042,7 +3170,7 @@
}
QMessageId id = message.id();
- long int messageId = id.toString().toLong();
+ long int messageId = SymbianHelpers::stripIdPrefix(id.toString()).toLong();
if (messageId == 0)
return;
@@ -3310,7 +3438,7 @@
messageCreated = true;
}
- long int messageId = message.id().toString().toLong();
+ long int messageId = SymbianHelpers::stripIdPrefix(message.id().toString()).toLong();
if (messageId == 0) {
User::Leave(KErrNotReady);
}
@@ -3654,7 +3782,7 @@
CleanupStack::PopAndDestroy(pMsvOperationWait);
QMessagePrivate* privateMessage = QMessagePrivate::implementation(message);
- privateMessage->_id = QMessageId(QString::number(newMessageId));
+ privateMessage->_id = QMessageId(SymbianHelpers::addIdPrefix(QString::number(newMessageId),SymbianHelpers::EngineTypeMTM));
}
void CMTMEngine::sendEmailL(QMessage &message)
@@ -3683,7 +3811,7 @@
messageCreated = true;
}
- long int messageId = message.id().toString().toLong();
+ long int messageId = SymbianHelpers::stripIdPrefix(message.id().toString()).toLong();
if (messageId == 0) {
User::Leave(KErrNotReady);
}
@@ -4438,7 +4566,7 @@
} else {
message.setType(QMessage::NoType);
}
- } else if ((privateMessageFilter->_field == QMessageFilterPrivate::StandardFolder) &&
+ } else if ((privateMessageFilter->_field == QMessageFilterPrivate::StandardFolder) &&
(aMsgType == KUidMsgTypeSMS || aMsgType == KUidMsgTypeMultimedia)) {
if (aFolderId == KMsvGlobalInBoxIndexEntryId) {
QMessagePrivate::setStandardFolder(message,QMessage::InboxFolder);
@@ -4448,9 +4576,9 @@
QMessagePrivate::setStandardFolder(message,QMessage::SentFolder);
} else if (aFolderId == KMsvDeletedEntryFolderEntryId) {
QMessagePrivate::setStandardFolder(message,QMessage::TrashFolder);
- }
+ }
} else if (!messageRetrieved) {
- message = this->message(QMessageId(QString::number(aMessageId)));
+ message = this->message(QMessageId(SymbianHelpers::addIdPrefix(QString::number(aMessageId),SymbianHelpers::EngineTypeMTM)));
if (message.type() == QMessage::NoType) {
unableToReadAndFilterMessage = true;
matchingFilters.clear();
@@ -4502,7 +4630,7 @@
// No pending notification events for this messageId.
// => Deliver notification immediately
ipMessageStorePrivate->messageNotification(notificationType,
- QMessageId(QString::number(aMessageId)),
+ QMessageId(SymbianHelpers::addIdPrefix(QString::number(aMessageId),SymbianHelpers::EngineTypeMTM)),
matchingFilters);
}
} else if (unableToReadAndFilterMessage) {
@@ -4538,7 +4666,7 @@
MessageEvent event = iUndeliveredMessageEvents[0];
bool eventHandlingPossible = true;
if (event.notificationType != QMessageStorePrivate::Removed && event.unfiltered) {
- QMessage message = this->message(QMessageId(QString::number(event.messageId)));
+ QMessage message = this->message(QMessageId(SymbianHelpers::addIdPrefix(QString::number(event.messageId),SymbianHelpers::EngineTypeMTM)));
if (message.type() == QMessage::NoType) {
eventHandlingPossible = false;
} else {
@@ -4569,7 +4697,7 @@
if (event.matchingFilters.count() > 0) {
// Deliver message event notification
ipMessageStorePrivate->messageNotification(event.notificationType,
- QMessageId(QString::number(event.messageId)),
+ QMessageId(SymbianHelpers::addIdPrefix(QString::number(event.messageId),SymbianHelpers::EngineTypeMTM)),
event.matchingFilters);
}
} else {
@@ -4707,7 +4835,7 @@
getAllMessagesL(iOrdering);
iIdList = QMessageIdList();
for (int i=0; i < ipEntrySelection->Count(); i++) {
- iIdList.append(QMessageId(QString::number((*ipEntrySelection)[i])));
+ iIdList.append(QMessageId(SymbianHelpers::addIdPrefix(QString::number((*ipEntrySelection)[i]),SymbianHelpers::EngineTypeMTM)));
}
}
iNumberOfHandledFilters++;
@@ -4793,9 +4921,9 @@
iNumberOfHandledFilters++;
if (pf->_comparatorType == QMessageFilterPrivate::Equality) { // QMessageId
QMessageDataComparator::EqualityComparator cmp(static_cast<QMessageDataComparator::EqualityComparator>(pf->_comparatorValue));
- if (!pf->_value.isNull() && pf->_value.toString().length() > 0) {
+ if (!pf->_value.isNull() && pf->_value.toString().length() > QString(SymbianHelpers::mtmPrefix).length()) {
if (cmp == QMessageDataComparator::Equal) {
- long int messageId = pf->_value.toString().toLong();
+ long int messageId = SymbianHelpers::stripIdPrefix(pf->_value.toString()).toLong();
CMsvEntry* pEntry = iOwner.retrieveCMsvEntryAndPushToCleanupStack(messageId);
if (pEntry) {
const TMsvEntry& entry = pEntry->Entry();
@@ -4809,7 +4937,7 @@
} else { // NotEqual
ipEntrySelection = new(ELeave)CMsvEntrySelection;
getAllMessagesL(iOrdering);
- long int messageId = pf->_value.toString().toLong();
+ long int messageId = SymbianHelpers::stripIdPrefix(pf->_value.toString()).toLong();
for (int i=0; i < ipEntrySelection->Count(); i++) {
if (ipEntrySelection->At(i) == messageId) {
ipEntrySelection->Delete(i);
@@ -4829,7 +4957,7 @@
if (cmp == QMessageDataComparator::Includes) {
ipEntrySelection = new(ELeave)CMsvEntrySelection;
for (int i=0; i < pf->_ids.count(); i++) {
- long int messageId = pf->_ids[i].toString().toLong();
+ long int messageId = SymbianHelpers::stripIdPrefix(pf->_ids[i].toString()).toLong();
CMsvEntry* pEntry = iOwner.retrieveCMsvEntryAndPushToCleanupStack(messageId);
if (pEntry) {
const TMsvEntry& entry = pEntry->Entry();
@@ -4843,7 +4971,7 @@
ipEntrySelection = new(ELeave)CMsvEntrySelection;
getAllMessagesL(iOrdering);
for (int i=0; i < pf->_ids.count(); i++) {
- long int messageId = pf->_ids[i].toString().toLong();
+ long int messageId = SymbianHelpers::stripIdPrefix(pf->_ids[i].toString()).toLong();
for (int i=0; i < ipEntrySelection->Count(); i++) {
if (ipEntrySelection->At(i) == messageId) {
ipEntrySelection->Delete(i);
@@ -4944,7 +5072,7 @@
if (pf->_comparatorType == QMessageFilterPrivate::Equality) { // QMessageFolderId
QMessageDataComparator::EqualityComparator cmp(static_cast<QMessageDataComparator::EqualityComparator>(pf->_comparatorValue));
if (cmp == QMessageDataComparator::Equal) {
- long int folderId = iOwner.folderIdFromQMessageFolderId(QMessageFolderId(pf->_value.toString()));
+ long int folderId = iOwner.folderIdFromQMessageFolderId(QMessageFolderId(pf->_value.toString()));
long int serviceEntryId = iOwner.serviceEntryIdFromQMessageFolderId(QMessageFolderId(pf->_value.toString()));
QMessageAccount messageAccount = iOwner.account(iOwner.accountIdByServiceId(serviceEntryId));
if (messageAccount.messageTypes() == QMessage::Email) {
@@ -5349,7 +5477,7 @@
} else {
iIdList = QMessageIdList();
for (int i=0; i < ipEntrySelection->Count(); i++) {
- iIdList.append(QMessageId(QString::number((*ipEntrySelection)[i])));
+ iIdList.append(QMessageId(SymbianHelpers::addIdPrefix(QString::number((*ipEntrySelection)[i]),SymbianHelpers::EngineTypeMTM)));
}
iTimer.After(iStatus, 100);
if (!IsActive()) {
@@ -5367,7 +5495,7 @@
const CMsvFindResultSelection& findResultSelection = ipMsvFindOperation->GetFindResult();
QMessageIdList msgIds;
for (int i=0; i < findResultSelection.Count(); i++) {
- msgIds.append(QMessageId(QString::number(findResultSelection[i].iId)));
+ msgIds.append(QMessageId(SymbianHelpers::addIdPrefix(QString::number(findResultSelection[i].iId),SymbianHelpers::EngineTypeMTM)));
}
iOwner.filterAndOrderMessagesReady(true, iOperationId, msgIds, iNumberOfHandledFilters, iResultCorrectlyOrdered);
} else {