117 ); |
120 ); |
118 Q_UNUSED(err) |
121 Q_UNUSED(err) |
119 |
122 |
120 // Create & Add SMS Account |
123 // Create & Add SMS Account |
121 TRAPD(accountError, |
124 TRAPD(accountError, |
122 iSMSAccountidAsString = QString::number(mtmServiceEntryIdL(CMTMEngine::MTMTypeSMS)); |
125 iSMSAccountidAsString = SymbianHelpers::addIdPrefix(QString::number(mtmServiceEntryIdL(CMTMEngine::MTMTypeSMS)),SymbianHelpers::EngineTypeMTM); |
123 QMessageAccount smsAcc = QMessageAccountPrivate::from(QMessageAccountId(iSMSAccountidAsString), |
126 QMessageAccount smsAcc = QMessageAccountPrivate::from(QMessageAccountId(iSMSAccountidAsString), |
124 QString("SMS"), |
127 QString("SMS"), |
125 mtmServiceEntryIdL(CMTMEngine::MTMTypeSMS), |
128 mtmServiceEntryIdL(CMTMEngine::MTMTypeSMS), |
126 0, |
129 0, |
127 QMessage::Sms); |
130 QMessage::Sms); |
128 iAccounts.insert(iSMSAccountidAsString, smsAcc); |
131 iAccounts.insert(iSMSAccountidAsString, smsAcc); |
129 |
132 |
130 |
133 |
131 // Create & Add MMS Account |
134 // Create & Add MMS Account |
132 iMMSAccountidAsString = QString::number(mtmServiceEntryIdL(CMTMEngine::MTMTypeMMS)); |
135 iMMSAccountidAsString = SymbianHelpers::addIdPrefix(QString::number(mtmServiceEntryIdL(CMTMEngine::MTMTypeMMS)),SymbianHelpers::EngineTypeMTM); |
133 QMessageAccount mmsAcc = QMessageAccountPrivate::from(QMessageAccountId(iMMSAccountidAsString), |
136 QMessageAccount mmsAcc = QMessageAccountPrivate::from(QMessageAccountId(iMMSAccountidAsString), |
134 QString("MMS"), |
137 QString("MMS"), |
135 mtmServiceEntryIdL(CMTMEngine::MTMTypeMMS), |
138 mtmServiceEntryIdL(CMTMEngine::MTMTypeMMS), |
136 0, |
139 0, |
137 QMessage::Mms | QMessage::Email); |
140 QMessage::Mms | QMessage::Email); |
373 TSmtpAccount defaultAccount; |
376 TSmtpAccount defaultAccount; |
374 TInt err = pEmailAccounts->DefaultSmtpAccountL(defaultAccount); |
377 TInt err = pEmailAccounts->DefaultSmtpAccountL(defaultAccount); |
375 if (err == KErrNone) { |
378 if (err == KErrNone) { |
376 QString idAsString; |
379 QString idAsString; |
377 if (defaultAccount.iRelatedService != 0) { |
380 if (defaultAccount.iRelatedService != 0) { |
378 idAsString = QString::number(defaultAccount.iRelatedService); |
381 idAsString = SymbianHelpers::addIdPrefix(QString::number(defaultAccount.iRelatedService),SymbianHelpers::EngineTypeMTM); |
379 } else { |
382 } else { |
380 idAsString = QString::number(defaultAccount.iSmtpService); |
383 idAsString = SymbianHelpers::addIdPrefix(QString::number(defaultAccount.iSmtpService),SymbianHelpers::EngineTypeMTM); |
381 } |
384 } |
382 if (!iAccounts.contains(idAsString)) { |
385 if (!iAccounts.contains(idAsString)) { |
383 QMessageAccount account = QMessageAccountPrivate::from(QMessageAccountId(idAsString), |
386 QMessageAccount account = QMessageAccountPrivate::from(QMessageAccountId(idAsString), |
384 QString::fromUtf16(defaultAccount.iSmtpAccountName.Ptr(), defaultAccount.iSmtpAccountName.Length()), |
387 QString::fromUtf16(defaultAccount.iSmtpAccountName.Ptr(), defaultAccount.iSmtpAccountName.Length()), |
385 defaultAccount.iRelatedService, |
388 defaultAccount.iRelatedService, |
396 |
399 |
397 RArray<TImapAccount> imapAccounts(10); |
400 RArray<TImapAccount> imapAccounts(10); |
398 pEmailAccounts->GetImapAccountsL(imapAccounts); |
401 pEmailAccounts->GetImapAccountsL(imapAccounts); |
399 CleanupClosePushL(imapAccounts); |
402 CleanupClosePushL(imapAccounts); |
400 for (int i=0; i < imapAccounts.Count(); i++) { |
403 for (int i=0; i < imapAccounts.Count(); i++) { |
401 QString idAsString = QString::number(imapAccounts[i].iImapService); |
404 QString idAsString = SymbianHelpers::addIdPrefix(QString::number(imapAccounts[i].iImapService),SymbianHelpers::EngineTypeMTM); |
402 if (!iAccounts.contains(idAsString)) { |
405 if (!iAccounts.contains(idAsString)) { |
403 QMessageAccount account = QMessageAccountPrivate::from(QMessageAccountId(idAsString), |
406 QMessageAccount account = QMessageAccountPrivate::from(QMessageAccountId(idAsString), |
404 QString::fromUtf16(imapAccounts[i].iImapAccountName.Ptr(), imapAccounts[i].iImapAccountName.Length()), |
407 QString::fromUtf16(imapAccounts[i].iImapAccountName.Ptr(), imapAccounts[i].iImapAccountName.Length()), |
405 imapAccounts[i].iImapService, |
408 imapAccounts[i].iImapService, |
406 imapAccounts[i].iSmtpService, |
409 imapAccounts[i].iSmtpService, |
414 |
417 |
415 RArray<TPopAccount> popAccounts(10); |
418 RArray<TPopAccount> popAccounts(10); |
416 pEmailAccounts->GetPopAccountsL(popAccounts); |
419 pEmailAccounts->GetPopAccountsL(popAccounts); |
417 CleanupClosePushL(popAccounts); |
420 CleanupClosePushL(popAccounts); |
418 for (int i=0; i < popAccounts.Count(); i++) { |
421 for (int i=0; i < popAccounts.Count(); i++) { |
419 QString idAsString = QString::number(popAccounts[i].iPopService); |
422 QString idAsString = SymbianHelpers::addIdPrefix(QString::number(popAccounts[i].iPopService),SymbianHelpers::EngineTypeMTM); |
420 if (!iAccounts.contains(idAsString)) { |
423 if (!iAccounts.contains(idAsString)) { |
421 QMessageAccount account = QMessageAccountPrivate::from(QMessageAccountId(QString::number(popAccounts[i].iPopService)), |
424 QMessageAccount account = QMessageAccountPrivate::from(QMessageAccountId(SymbianHelpers::addIdPrefix(QString::number(popAccounts[i].iPopService),SymbianHelpers::EngineTypeMTM)), |
422 QString::fromUtf16(popAccounts[i].iPopAccountName.Ptr(), popAccounts[i].iPopAccountName.Length()), |
425 QString::fromUtf16(popAccounts[i].iPopAccountName.Ptr(), popAccounts[i].iPopAccountName.Length()), |
423 popAccounts[i].iPopService, |
426 popAccounts[i].iPopService, |
424 popAccounts[i].iSmtpService, |
427 popAccounts[i].iSmtpService, |
425 QMessage::Email); |
428 QMessage::Email); |
426 iAccounts.insert(idAsString, account); |
429 iAccounts.insert(idAsString, account); |
433 RArray<TSmtpAccount> smtpAccounts(10); |
436 RArray<TSmtpAccount> smtpAccounts(10); |
434 pEmailAccounts->GetSmtpAccountsL(smtpAccounts); |
437 pEmailAccounts->GetSmtpAccountsL(smtpAccounts); |
435 CleanupClosePushL(smtpAccounts); |
438 CleanupClosePushL(smtpAccounts); |
436 for (int i=0; i < smtpAccounts.Count(); i++) { |
439 for (int i=0; i < smtpAccounts.Count(); i++) { |
437 if (smtpAccounts[i].iRelatedService == 0) { |
440 if (smtpAccounts[i].iRelatedService == 0) { |
438 QString idAsString = QString::number(smtpAccounts[i].iSmtpService); |
441 QString idAsString = SymbianHelpers::addIdPrefix(QString::number(smtpAccounts[i].iSmtpService),SymbianHelpers::EngineTypeMTM); |
439 if (!iAccounts.contains(idAsString)) { |
442 if (!iAccounts.contains(idAsString)) { |
440 QMessageAccount account = QMessageAccountPrivate::from(QMessageAccountId(QString::number(smtpAccounts[i].iSmtpService)), |
443 QMessageAccount account = QMessageAccountPrivate::from(QMessageAccountId(SymbianHelpers::addIdPrefix(QString::number(smtpAccounts[i].iSmtpService),SymbianHelpers::EngineTypeMTM)), |
441 QString::fromUtf16(smtpAccounts[i].iSmtpAccountName.Ptr(), smtpAccounts[i].iSmtpAccountName.Length()), |
444 QString::fromUtf16(smtpAccounts[i].iSmtpAccountName.Ptr(), smtpAccounts[i].iSmtpAccountName.Length()), |
442 smtpAccounts[i].iRelatedService, |
445 smtpAccounts[i].iRelatedService, |
443 smtpAccounts[i].iSmtpService, |
446 smtpAccounts[i].iSmtpService, |
444 QMessage::Email); |
447 QMessage::Email); |
445 iAccounts.insert(idAsString, account); |
448 iAccounts.insert(idAsString, account); |
1810 switch (pf->_field) { |
1814 switch (pf->_field) { |
1811 case QMessageFolderFilterPrivate::Id: |
1815 case QMessageFolderFilterPrivate::Id: |
1812 { |
1816 { |
1813 if (pf->_comparatorType == QMessageFolderFilterPrivate::Equality) { |
1817 if (pf->_comparatorType == QMessageFolderFilterPrivate::Equality) { |
1814 QMessageDataComparator::EqualityComparator cmp(static_cast<QMessageDataComparator::EqualityComparator>(pf->_comparatorValue)); |
1818 QMessageDataComparator::EqualityComparator cmp(static_cast<QMessageDataComparator::EqualityComparator>(pf->_comparatorValue)); |
1815 if (pf->_value.toString().length() > 0) { |
1819 if (pf->_value.toString().length() > QString(SymbianHelpers::mtmPrefix).length()) { |
1816 bool folderOk = false; |
1820 bool folderOk = false; |
1817 long int folderId = folderIdFromQMessageFolderId(QMessageFolderId(pf->_value.toString())); |
1821 long int folderId = folderIdFromQMessageFolderId(QMessageFolderId(pf->_value.toString())); |
1818 CMsvEntry* pEntry = retrieveCMsvEntryAndPushToCleanupStack(folderId); |
1822 CMsvEntry* pEntry = retrieveCMsvEntryAndPushToCleanupStack(folderId); |
1819 if (pEntry) { |
1823 if (pEntry) { |
1820 if (pEntry->Entry().iType == KUidMsvFolderEntry) { |
1824 if (pEntry->Entry().iType == KUidMsvFolderEntry) { |
1924 case QMessageFolderFilterPrivate::ParentAccountId: |
1928 case QMessageFolderFilterPrivate::ParentAccountId: |
1925 { |
1929 { |
1926 if (pf->_comparatorType == QMessageFolderFilterPrivate::Equality) { |
1930 if (pf->_comparatorType == QMessageFolderFilterPrivate::Equality) { |
1927 QMessageDataComparator::EqualityComparator cmp(static_cast<QMessageDataComparator::EqualityComparator>(pf->_comparatorValue)); |
1931 QMessageDataComparator::EqualityComparator cmp(static_cast<QMessageDataComparator::EqualityComparator>(pf->_comparatorValue)); |
1928 if (cmp == QMessageDataComparator::Equal) { |
1932 if (cmp == QMessageDataComparator::Equal) { |
1929 if (pf->_value.toString().length() > 0) { |
1933 if (pf->_value.toString().length() > QString(SymbianHelpers::mtmPrefix).length()) { |
1930 ids = folderIdsByAccountId(QMessageAccountId(pf->_value.toString())); |
1934 ids = folderIdsByAccountId(QMessageAccountId(pf->_value.toString())); |
1931 } |
1935 } |
1932 } else { // NotEqual |
1936 } else { // NotEqual |
1933 ids = allFolders(); |
1937 ids = allFolders(); |
1934 if (pf->_value.toString().length() > 0) { |
1938 if (pf->_value.toString().length() > QString(SymbianHelpers::mtmPrefix).length()) { |
1935 QMessageFolderIdList ids2 = folderIdsByAccountId(QMessageAccountId(pf->_value.toString())); |
1939 QMessageFolderIdList ids2 = folderIdsByAccountId(QMessageAccountId(pf->_value.toString())); |
1936 for (int i = 0; i < ids2.count(); i++) { |
1940 for (int i = 0; i < ids2.count(); i++) { |
1937 ids.removeOne(ids2[i]); |
1941 ids.removeOne(ids2[i]); |
1938 } |
1942 } |
1939 } |
1943 } |
2090 QString nullString = "00000000"; |
2094 QString nullString = "00000000"; |
2091 QString serviceEntryIdString = QString::number(serviceEntryId); |
2095 QString serviceEntryIdString = QString::number(serviceEntryId); |
2092 serviceEntryIdString = nullString.left(8-serviceEntryIdString.length()) + serviceEntryIdString; |
2096 serviceEntryIdString = nullString.left(8-serviceEntryIdString.length()) + serviceEntryIdString; |
2093 QString folderIdString = QString::number(folderId); |
2097 QString folderIdString = QString::number(folderId); |
2094 folderIdString = nullString.left(8-folderIdString.length()) + folderIdString; |
2098 folderIdString = nullString.left(8-folderIdString.length()) + folderIdString; |
2095 return serviceEntryIdString+folderIdString; |
2099 return SymbianHelpers::addIdPrefix(serviceEntryIdString+folderIdString,SymbianHelpers::EngineTypeMTM); |
2096 } |
2100 } |
2097 |
2101 |
2098 TMsvId CMTMEngine::serviceEntryIdFromQMessageFolderId(const QMessageFolderId& folderId) const |
2102 TMsvId CMTMEngine::serviceEntryIdFromQMessageFolderId(const QMessageFolderId& folderId) const |
2099 { |
2103 { |
2100 return folderId.toString().left(8).toLong(); |
2104 return SymbianHelpers::stripIdPrefix(folderId.toString()).left(8).toLong(); |
2101 } |
2105 } |
2102 |
2106 |
2103 TMsvId CMTMEngine::folderIdFromQMessageFolderId(const QMessageFolderId& folderId) const |
2107 TMsvId CMTMEngine::folderIdFromQMessageFolderId(const QMessageFolderId& folderId) const |
2104 { |
2108 { |
2105 return folderId.toString().right(8).toLong(); |
2109 return SymbianHelpers::stripIdPrefix(folderId.toString()).right(8).toLong(); |
2106 } |
2110 } |
2107 |
2111 |
2108 void CMTMEngine::handleNestedFiltersFromFolderFilter(QMessageFolderFilter &filter) const |
2112 void CMTMEngine::handleNestedFiltersFromFolderFilter(QMessageFolderFilter &filter) const |
2109 { |
2113 { |
2110 QMessageFolderFilterPrivate* pMFFilter = QMessageFolderFilterPrivate::implementation(filter); |
2114 QMessageFolderFilterPrivate* pMFFilter = QMessageFolderFilterPrivate::implementation(filter); |
2427 // parentFolderId was not defined for new Message |
2431 // parentFolderId was not defined for new Message |
2428 // => Message will be created into defined standard Folder (Default value is Drafts Folder) |
2432 // => Message will be created into defined standard Folder (Default value is Drafts Folder) |
2429 destinationFolderId = standardFolderId(message.standardFolder()); |
2433 destinationFolderId = standardFolderId(message.standardFolder()); |
2430 } |
2434 } |
2431 |
2435 |
2432 // Current entry is the Draft folder. |
2436 // Switch current SMS MTM context to folder entry |
2433 ipSmsMtm->SwitchCurrentEntryL(destinationFolderId); |
2437 ipSmsMtm->SwitchCurrentEntryL(destinationFolderId); |
2434 // Create a new SMS message entry as a child of the current context. |
2438 |
2435 ipSmsMtm->CreateMessageL(KUidMsgTypeSMS.iUid); |
2439 // Create a new SMS message entry as a child of the current context |
2436 TMsvEntry entry = ipSmsMtm->Entry().Entry(); |
2440 // |
2437 |
2441 // Note: CreateMessageL sets following values to new message entry: |
|
2442 // entry.iType = KUidMsvMessageEntry; |
|
2443 // entry.iRelatedId = <ID of the current SMS service>; |
|
2444 // entry.iServiceId = KMsvLocalServiceIndexEntryId; |
|
2445 // entry.iMtm = <SMS Message Type UID>; |
|
2446 // entry.SetVisible(EFalse); |
|
2447 // entry.SetInPreparation(ETrue); |
|
2448 // entry.iDate.UniversalTime(); <= Not set in older platforms |
|
2449 // |
|
2450 // Note: CreateMessageL automatically creates SMS header |
|
2451 // that contains default service settings & default |
|
2452 // service center address |
|
2453 // |
|
2454 // Note: CreateMessageL switches current SMS MTM context to |
|
2455 // a new SMS message context |
|
2456 ipSmsMtm->CreateMessageL(KUidMsgTypeSMS.iUid); |
|
2457 |
|
2458 // Get the current context (new message context) |
|
2459 CMsvEntry& newMessageContext = ipSmsMtm->Entry(); |
|
2460 |
|
2461 // Copy entry values from the new message context index entry |
|
2462 TMsvEntry entry = newMessageContext.Entry(); |
|
2463 |
|
2464 // Set priority values to message entry |
2438 switch (message.priority()) { |
2465 switch (message.priority()) { |
2439 case QMessage::HighPriority: |
2466 case QMessage::HighPriority: |
2440 entry.SetPriority(EMsvHighPriority); |
2467 entry.SetPriority(EMsvHighPriority); |
2441 break; |
2468 break; |
2442 case QMessage::NormalPriority: |
2469 case QMessage::NormalPriority: |
2444 break; |
2471 break; |
2445 case QMessage::LowPriority: |
2472 case QMessage::LowPriority: |
2446 entry.SetPriority(EMsvLowPriority); |
2473 entry.SetPriority(EMsvLowPriority); |
2447 break; |
2474 break; |
2448 } |
2475 } |
|
2476 |
|
2477 // Set message read status to message entry |
2449 if (message.status() & QMessage::Read) { |
2478 if (message.status() & QMessage::Read) { |
2450 entry.SetUnread(false); |
2479 entry.SetUnread(false); |
2451 entry.SetNew(false); |
2480 entry.SetNew(false); |
2452 } else { |
2481 } else { |
2453 entry.SetUnread(true); |
2482 entry.SetUnread(true); |
2454 entry.SetNew(true); |
2483 entry.SetNew(true); |
2455 } |
2484 } |
2456 ipSmsMtm->Entry().ChangeL(entry); |
2485 |
2457 |
2486 // Set first message addressee to message entry |
|
2487 // and all message addressees to SMS message |
2458 QList<QMessageAddress> list(message.to()); |
2488 QList<QMessageAddress> list(message.to()); |
2459 if (!list.empty()){ |
2489 if (!list.empty()){ |
2460 TPtrC16 receiver(KNullDesC); |
2490 TPtrC16 receiver(KNullDesC); |
2461 QString qreceiver; |
2491 QString qreceiver; |
2462 for (int i = 0; i < list.size(); ++i) { |
2492 for (int i = 0; i < list.size(); ++i) { |
2463 qreceiver = list.at(i).addressee(); |
2493 qreceiver = list.at(i).addressee(); |
2464 receiver.Set(reinterpret_cast<const TUint16*>(qreceiver.utf16())); |
2494 receiver.Set(reinterpret_cast<const TUint16*>(qreceiver.utf16())); |
|
2495 if (i == 0) { |
|
2496 // Set addressee to message entry |
|
2497 entry.iDetails.Set(receiver); |
|
2498 } |
|
2499 // Add addressee to SMS message |
2465 ipSmsMtm->AddAddresseeL(receiver); |
2500 ipSmsMtm->AddAddresseeL(receiver); |
2466 ipSmsMtm->SaveMessageL(); |
2501 } |
2467 } |
2502 } |
2468 } |
2503 |
2469 |
2504 // Set body to message entry and SMS message |
2470 CMsvStore* store = ipSmsMtm->Entry().EditStoreL(); |
|
2471 CleanupStack::PushL(store); |
|
2472 |
|
2473 QString body = message.textContent(); |
2505 QString body = message.textContent(); |
2474 if (!body.isEmpty()){ |
2506 if (!body.isEmpty()){ |
2475 TPtrC16 msg(reinterpret_cast<const TUint16*>(body.utf16())); |
2507 TPtrC16 msg(reinterpret_cast<const TUint16*>(body.utf16())); |
2476 if (!ipRichText) { |
2508 |
2477 ipCharFormatLayer = CCharFormatLayer::NewL(); |
2509 // Set body to message entry |
2478 ipParaFormatLayer = CParaFormatLayer::NewL(); |
2510 entry.iDescription.Set(msg); |
2479 ipRichText=CRichText::NewL(ipParaFormatLayer,ipCharFormatLayer); |
2511 |
2480 } |
2512 // Set body to SMS message |
2481 ipRichText->Reset(); |
2513 CRichText& body = ipSmsMtm->Body(); |
2482 ipRichText->InsertL(0, msg); |
2514 body.Reset(); |
2483 store->StoreBodyTextL(*ipRichText); |
2515 body.InsertL(0, msg); |
2484 store->CommitL(); |
2516 } |
2485 } |
2517 |
2486 CleanupStack::PopAndDestroy(store); |
2518 // Set date to message entry |
2487 |
2519 if (!message.receivedDate().isNull() || !message.date().isNull()) { |
|
2520 if (!message.date().isNull()) { |
|
2521 entry.iDate = qDateTimeToSymbianTTime(message.date()); |
|
2522 } else { |
|
2523 entry.iDate = qDateTimeToSymbianTTime(message.receivedDate()); |
|
2524 } |
|
2525 } |
|
2526 |
|
2527 // Set new message's context's index entry to the specified values. |
|
2528 // <=> Changes are set into cache only |
|
2529 newMessageContext.ChangeL(entry); |
|
2530 |
|
2531 // Commit cached changes to the storage |
|
2532 // Note: SaveMessageL sets following values to message entry: |
|
2533 // entry.SetVisible(ETrue); |
|
2534 // entry.SetInPreparation(EFalse); |
|
2535 ipSmsMtm->SaveMessageL(); |
|
2536 |
|
2537 // Get message id from new SMS message index entry |
2488 QMessagePrivate* privateMessage = QMessagePrivate::implementation(message); |
2538 QMessagePrivate* privateMessage = QMessagePrivate::implementation(message); |
2489 privateMessage->_id = QMessageId(QString::number(entry.Id())); |
2539 privateMessage->_id = QMessageId(SymbianHelpers::addIdPrefix(QString::number(entry.Id()))); |
2490 |
|
2491 if (!message.receivedDate().isNull() || !message.date().isNull()) { |
|
2492 // Change the date to given date |
|
2493 CMsvEntry* pEntry = ipMsvSession->GetEntryL(entry.Id()); |
|
2494 CleanupStack::PushL(pEntry); |
|
2495 TMsvEntry changedEntry = pEntry->Entry(); |
|
2496 if (!message.date().isNull()) { |
|
2497 changedEntry.iDate = qDateTimeToSymbianTTime(message.date()); |
|
2498 } else { |
|
2499 changedEntry.iDate = qDateTimeToSymbianTTime(message.receivedDate()); |
|
2500 } |
|
2501 pEntry->ChangeL(changedEntry); |
|
2502 CleanupStack::PopAndDestroy(pEntry); |
|
2503 } |
|
2504 } |
2540 } |
2505 |
2541 |
2506 bool CMTMEngine::sendSMS(QMessage &message) |
2542 bool CMTMEngine::sendSMS(QMessage &message) |
2507 { |
2543 { |
2508 if (!iSessionReady) { |
2544 if (!iSessionReady) { |
2515 } |
2551 } |
2516 |
2552 |
2517 return true; |
2553 return true; |
2518 } |
2554 } |
2519 |
2555 |
|
2556 bool CMTMEngine::validateSMS() |
|
2557 { |
|
2558 |
|
2559 // Validate SMS body. |
|
2560 TMsvPartList result(KMsvMessagePartNone); |
|
2561 result = ipSmsMtm->ValidateMessage(KMsvMessagePartBody); |
|
2562 if (result != KMsvMessagePartNone ) { |
|
2563 return false; |
|
2564 } |
|
2565 |
|
2566 // Validate SMS recipient |
|
2567 result = ipSmsMtm->ValidateMessage(KMsvMessagePartRecipient); |
|
2568 if ( result != KMsvMessagePartNone ) { |
|
2569 return false; |
|
2570 } |
|
2571 |
|
2572 return true; |
|
2573 } |
|
2574 |
2520 void CMTMEngine::sendSMSL(QMessage &message) |
2575 void CMTMEngine::sendSMSL(QMessage &message) |
2521 { |
2576 { |
2522 if (!iSessionReady) { |
2577 if (!iSessionReady) { |
2523 User::Leave(KErrNotReady); |
2578 User::Leave(KErrNotReady); |
2524 } |
2579 } |
2525 |
2580 |
2526 if (!message.id().isValid()) { |
2581 if (!message.id().isValid()) { |
2527 QMessagePrivate::setStandardFolder(message, QMessage::DraftsFolder); |
2582 QMessagePrivate::setStandardFolder(message, QMessage::DraftsFolder); |
2528 storeSMSL(message); |
2583 storeSMSL(message); |
2529 } |
2584 } |
2530 |
2585 |
2531 long int messageId = message.id().toString().toLong(); |
2586 long int messageId = SymbianHelpers::stripIdPrefix(message.id().toString()).toLong(); |
2532 if (messageId == 0) { |
2587 if (messageId == 0) { |
2533 User::Leave(KErrNotReady); |
2588 User::Leave(KErrNotReady); |
2534 } |
2589 } |
2535 |
2590 |
2536 CMsvEntry* pMsvEntry = retrieveCMsvEntryAndPushToCleanupStack(messageId); |
2591 // Switch current SMS MTM context to message entry |
2537 CMsvOperationWait* pMsvOperationWait = CMsvOperationWait::NewLC(); |
2592 ipSmsMtm->SwitchCurrentEntryL(messageId); |
2538 |
2593 |
2539 ipSmsMtm->SwitchCurrentEntryL(pMsvEntry->Entry().Parent()); |
2594 // Load the cache with the message data |
2540 // Following sends SMS and _moves_ SMS from Drafts Folder to Sent Folder |
2595 ipSmsMtm->LoadMessageL(); |
2541 CMsvOperation* pMsvOperation = ipSmsMtm->Entry().CopyL(messageId, ipSmsMtm->ServiceId(), pMsvOperationWait->iStatus); |
2596 |
2542 pMsvOperationWait->Start(); |
2597 // Copy entry values from the message context index entry |
2543 CActiveScheduler::Start(); |
2598 TMsvEntry entry = ipSmsMtm->Entry().Entry(); |
2544 delete pMsvOperation; |
2599 |
2545 |
2600 // Update date to UniversalTime |
2546 CleanupStack::PopAndDestroy(pMsvOperationWait); |
2601 // <=> Date field is used to control message send time |
2547 releaseCMsvEntryAndPopFromCleanupStack(pMsvEntry); |
2602 entry.iDate.UniversalTime(); |
|
2603 |
|
2604 // Update message sending state |
|
2605 entry.SetSendingState(KMsvSendStateWaiting); |
|
2606 |
|
2607 // Set SMS Service & delivery settings to the SMS header |
|
2608 CSmsHeader& smsHeader = ipSmsMtm->SmsHeader(); |
|
2609 CSmsSettings* pSmsSettings = CSmsSettings::NewL(); |
|
2610 CleanupStack::PushL(pSmsSettings); |
|
2611 |
|
2612 pSmsSettings->CopyL(ipSmsMtm->ServiceSettings()); |
|
2613 pSmsSettings->SetDelivery(ESmsDeliveryImmediately); |
|
2614 pSmsSettings->SetDeliveryReport(EFalse); |
|
2615 smsHeader.SetSmsSettingsL(*pSmsSettings); |
|
2616 |
|
2617 if (smsHeader.Message().ServiceCenterAddress().Length() == 0) { |
|
2618 CSmsSettings* pSmsServiceSettings = &(ipSmsMtm->ServiceSettings()); |
|
2619 if (!pSmsServiceSettings->ServiceCenterCount()) { |
|
2620 User::Leave(KErrNotReady); |
|
2621 } else { |
|
2622 CSmsNumber* pSmsCenterNumber = CSmsNumber::NewL(); |
|
2623 CleanupStack::PushL(pSmsCenterNumber); |
|
2624 pSmsCenterNumber->SetAddressL((pSmsServiceSettings->GetServiceCenter(pSmsServiceSettings->DefaultServiceCenter())).Address()); |
|
2625 smsHeader.Message().SetServiceCenterAddressL(pSmsCenterNumber->Address()); |
|
2626 CleanupStack::PopAndDestroy(pSmsCenterNumber); |
|
2627 } |
|
2628 } |
|
2629 |
|
2630 CleanupStack::PopAndDestroy(pSmsSettings); |
|
2631 |
|
2632 // Update message's context's index entry to the new values. |
|
2633 // <=> Changes are set into cache only |
|
2634 ipSmsMtm->Entry().ChangeL(entry); |
|
2635 |
|
2636 // Commit cached changes to the storage |
|
2637 ipSmsMtm->SaveMessageL(); |
|
2638 |
|
2639 if (validateSMS()) { |
|
2640 // Switch current SMS MTM context to SMS message parent folder entry |
|
2641 ipSmsMtm->SwitchCurrentEntryL(ipSmsMtm->Entry().Entry().Parent()); |
|
2642 |
|
2643 CMsvOperationWait* pMsvOperationWait = CMsvOperationWait::NewLC(); |
|
2644 |
|
2645 // Move SMS Message to Outbox |
|
2646 CMsvOperation* pMsvOperation = ipSmsMtm->Entry().MoveL(messageId, |
|
2647 KMsvGlobalOutBoxIndexEntryId, |
|
2648 pMsvOperationWait->iStatus); |
|
2649 pMsvOperationWait->Start(); |
|
2650 CActiveScheduler::Start(); |
|
2651 delete pMsvOperation; |
|
2652 |
|
2653 // Send SMS Message |
|
2654 CMsvEntrySelection* pMsvEntrySelection = new(ELeave) CMsvEntrySelection; |
|
2655 CleanupStack::PushL(pMsvEntrySelection); |
|
2656 |
|
2657 // Add SMS Message Id to selection |
|
2658 pMsvEntrySelection->AppendL(messageId); |
|
2659 |
|
2660 // Add selection (containing SMS Message Id) to task scheduler |
|
2661 TBuf8<1> dummyParams; |
|
2662 pMsvOperation = ipSmsMtm->InvokeAsyncFunctionL(ESmsMtmCommandScheduleCopy, |
|
2663 *pMsvEntrySelection, |
|
2664 dummyParams, |
|
2665 pMsvOperationWait->iStatus); |
|
2666 pMsvOperationWait->Start(); |
|
2667 CActiveScheduler::Start(); |
|
2668 delete pMsvOperation; |
|
2669 |
|
2670 CleanupStack::PopAndDestroy(pMsvEntrySelection); |
|
2671 |
|
2672 CleanupStack::PopAndDestroy(pMsvOperationWait); |
|
2673 } else { |
|
2674 User::Leave(KErrCorrupt); |
|
2675 } |
2548 } |
2676 } |
2549 |
2677 |
2550 void CMTMEngine::storeMMSL(QMessage &message) |
2678 void CMTMEngine::storeMMSL(QMessage &message) |
2551 { |
2679 { |
2552 if (!iSessionReady) { |
2680 if (!iSessionReady) { |
4436 aMsgType == KUidMsgTypeIMAP4) { |
4564 aMsgType == KUidMsgTypeIMAP4) { |
4437 message.setType(QMessage::Email); |
4565 message.setType(QMessage::Email); |
4438 } else { |
4566 } else { |
4439 message.setType(QMessage::NoType); |
4567 message.setType(QMessage::NoType); |
4440 } |
4568 } |
4441 } else if ((privateMessageFilter->_field == QMessageFilterPrivate::StandardFolder) && |
4569 } else if ((privateMessageFilter->_field == QMessageFilterPrivate::StandardFolder) && |
4442 (aMsgType == KUidMsgTypeSMS || aMsgType == KUidMsgTypeMultimedia)) { |
4570 (aMsgType == KUidMsgTypeSMS || aMsgType == KUidMsgTypeMultimedia)) { |
4443 if (aFolderId == KMsvGlobalInBoxIndexEntryId) { |
4571 if (aFolderId == KMsvGlobalInBoxIndexEntryId) { |
4444 QMessagePrivate::setStandardFolder(message,QMessage::InboxFolder); |
4572 QMessagePrivate::setStandardFolder(message,QMessage::InboxFolder); |
4445 } else if (aFolderId == KMsvDraftEntryId) { |
4573 } else if (aFolderId == KMsvDraftEntryId) { |
4446 QMessagePrivate::setStandardFolder(message,QMessage::DraftsFolder); |
4574 QMessagePrivate::setStandardFolder(message,QMessage::DraftsFolder); |
4447 } else if (aFolderId == KMsvSentEntryId) { |
4575 } else if (aFolderId == KMsvSentEntryId) { |
4448 QMessagePrivate::setStandardFolder(message,QMessage::SentFolder); |
4576 QMessagePrivate::setStandardFolder(message,QMessage::SentFolder); |
4449 } else if (aFolderId == KMsvDeletedEntryFolderEntryId) { |
4577 } else if (aFolderId == KMsvDeletedEntryFolderEntryId) { |
4450 QMessagePrivate::setStandardFolder(message,QMessage::TrashFolder); |
4578 QMessagePrivate::setStandardFolder(message,QMessage::TrashFolder); |
4451 } |
4579 } |
4452 } else if (!messageRetrieved) { |
4580 } else if (!messageRetrieved) { |
4453 message = this->message(QMessageId(QString::number(aMessageId))); |
4581 message = this->message(QMessageId(SymbianHelpers::addIdPrefix(QString::number(aMessageId),SymbianHelpers::EngineTypeMTM))); |
4454 if (message.type() == QMessage::NoType) { |
4582 if (message.type() == QMessage::NoType) { |
4455 unableToReadAndFilterMessage = true; |
4583 unableToReadAndFilterMessage = true; |
4456 matchingFilters.clear(); |
4584 matchingFilters.clear(); |
4457 break; |
4585 break; |
4458 } else { |
4586 } else { |
4536 while (count--) { |
4664 while (count--) { |
4537 // Try to deliver the oldest message event notification first |
4665 // Try to deliver the oldest message event notification first |
4538 MessageEvent event = iUndeliveredMessageEvents[0]; |
4666 MessageEvent event = iUndeliveredMessageEvents[0]; |
4539 bool eventHandlingPossible = true; |
4667 bool eventHandlingPossible = true; |
4540 if (event.notificationType != QMessageStorePrivate::Removed && event.unfiltered) { |
4668 if (event.notificationType != QMessageStorePrivate::Removed && event.unfiltered) { |
4541 QMessage message = this->message(QMessageId(QString::number(event.messageId))); |
4669 QMessage message = this->message(QMessageId(SymbianHelpers::addIdPrefix(QString::number(event.messageId),SymbianHelpers::EngineTypeMTM))); |
4542 if (message.type() == QMessage::NoType) { |
4670 if (message.type() == QMessage::NoType) { |
4543 eventHandlingPossible = false; |
4671 eventHandlingPossible = false; |
4544 } else { |
4672 } else { |
4545 event.matchingFilters.clear(); |
4673 event.matchingFilters.clear(); |
4546 // Copy the filter map to protect against modification during traversal |
4674 // Copy the filter map to protect against modification during traversal |
4567 iUndeliveredMessageEvents.removeFirst(); |
4695 iUndeliveredMessageEvents.removeFirst(); |
4568 iDeliveryTriesCounter = 0; |
4696 iDeliveryTriesCounter = 0; |
4569 if (event.matchingFilters.count() > 0) { |
4697 if (event.matchingFilters.count() > 0) { |
4570 // Deliver message event notification |
4698 // Deliver message event notification |
4571 ipMessageStorePrivate->messageNotification(event.notificationType, |
4699 ipMessageStorePrivate->messageNotification(event.notificationType, |
4572 QMessageId(QString::number(event.messageId)), |
4700 QMessageId(SymbianHelpers::addIdPrefix(QString::number(event.messageId),SymbianHelpers::EngineTypeMTM)), |
4573 event.matchingFilters); |
4701 event.matchingFilters); |
4574 } |
4702 } |
4575 } else { |
4703 } else { |
4576 // New message entry was NOT ready to be read |
4704 // New message entry was NOT ready to be read |
4577 iDeliveryTriesCounter++; |
4705 iDeliveryTriesCounter++; |
4791 case QMessageFilterPrivate::Id: |
4919 case QMessageFilterPrivate::Id: |
4792 { |
4920 { |
4793 iNumberOfHandledFilters++; |
4921 iNumberOfHandledFilters++; |
4794 if (pf->_comparatorType == QMessageFilterPrivate::Equality) { // QMessageId |
4922 if (pf->_comparatorType == QMessageFilterPrivate::Equality) { // QMessageId |
4795 QMessageDataComparator::EqualityComparator cmp(static_cast<QMessageDataComparator::EqualityComparator>(pf->_comparatorValue)); |
4923 QMessageDataComparator::EqualityComparator cmp(static_cast<QMessageDataComparator::EqualityComparator>(pf->_comparatorValue)); |
4796 if (!pf->_value.isNull() && pf->_value.toString().length() > 0) { |
4924 if (!pf->_value.isNull() && pf->_value.toString().length() > QString(SymbianHelpers::mtmPrefix).length()) { |
4797 if (cmp == QMessageDataComparator::Equal) { |
4925 if (cmp == QMessageDataComparator::Equal) { |
4798 long int messageId = pf->_value.toString().toLong(); |
4926 long int messageId = SymbianHelpers::stripIdPrefix(pf->_value.toString()).toLong(); |
4799 CMsvEntry* pEntry = iOwner.retrieveCMsvEntryAndPushToCleanupStack(messageId); |
4927 CMsvEntry* pEntry = iOwner.retrieveCMsvEntryAndPushToCleanupStack(messageId); |
4800 if (pEntry) { |
4928 if (pEntry) { |
4801 const TMsvEntry& entry = pEntry->Entry(); |
4929 const TMsvEntry& entry = pEntry->Entry(); |
4802 if (entry.iType == KUidMsvMessageEntry) { |
4930 if (entry.iType == KUidMsvMessageEntry) { |
4803 ipEntrySelection = new(ELeave)CMsvEntrySelection; |
4931 ipEntrySelection = new(ELeave)CMsvEntrySelection; |
4827 QMessageDataComparator::InclusionComparator cmp(static_cast<QMessageDataComparator::InclusionComparator>(pf->_comparatorValue)); |
4955 QMessageDataComparator::InclusionComparator cmp(static_cast<QMessageDataComparator::InclusionComparator>(pf->_comparatorValue)); |
4828 if (pf->_ids.count() > 0) { // QMessageIdList |
4956 if (pf->_ids.count() > 0) { // QMessageIdList |
4829 if (cmp == QMessageDataComparator::Includes) { |
4957 if (cmp == QMessageDataComparator::Includes) { |
4830 ipEntrySelection = new(ELeave)CMsvEntrySelection; |
4958 ipEntrySelection = new(ELeave)CMsvEntrySelection; |
4831 for (int i=0; i < pf->_ids.count(); i++) { |
4959 for (int i=0; i < pf->_ids.count(); i++) { |
4832 long int messageId = pf->_ids[i].toString().toLong(); |
4960 long int messageId = SymbianHelpers::stripIdPrefix(pf->_ids[i].toString()).toLong(); |
4833 CMsvEntry* pEntry = iOwner.retrieveCMsvEntryAndPushToCleanupStack(messageId); |
4961 CMsvEntry* pEntry = iOwner.retrieveCMsvEntryAndPushToCleanupStack(messageId); |
4834 if (pEntry) { |
4962 if (pEntry) { |
4835 const TMsvEntry& entry = pEntry->Entry(); |
4963 const TMsvEntry& entry = pEntry->Entry(); |
4836 if (entry.iType == KUidMsvMessageEntry) { |
4964 if (entry.iType == KUidMsvMessageEntry) { |
4837 ipEntrySelection->AppendL(messageId); |
4965 ipEntrySelection->AppendL(messageId); |
4942 case QMessageFilterPrivate::ParentFolderId: |
5070 case QMessageFilterPrivate::ParentFolderId: |
4943 { |
5071 { |
4944 if (pf->_comparatorType == QMessageFilterPrivate::Equality) { // QMessageFolderId |
5072 if (pf->_comparatorType == QMessageFilterPrivate::Equality) { // QMessageFolderId |
4945 QMessageDataComparator::EqualityComparator cmp(static_cast<QMessageDataComparator::EqualityComparator>(pf->_comparatorValue)); |
5073 QMessageDataComparator::EqualityComparator cmp(static_cast<QMessageDataComparator::EqualityComparator>(pf->_comparatorValue)); |
4946 if (cmp == QMessageDataComparator::Equal) { |
5074 if (cmp == QMessageDataComparator::Equal) { |
4947 long int folderId = iOwner.folderIdFromQMessageFolderId(QMessageFolderId(pf->_value.toString())); |
5075 long int folderId = iOwner.folderIdFromQMessageFolderId(QMessageFolderId(pf->_value.toString())); |
4948 long int serviceEntryId = iOwner.serviceEntryIdFromQMessageFolderId(QMessageFolderId(pf->_value.toString())); |
5076 long int serviceEntryId = iOwner.serviceEntryIdFromQMessageFolderId(QMessageFolderId(pf->_value.toString())); |
4949 QMessageAccount messageAccount = iOwner.account(iOwner.accountIdByServiceId(serviceEntryId)); |
5077 QMessageAccount messageAccount = iOwner.account(iOwner.accountIdByServiceId(serviceEntryId)); |
4950 if (messageAccount.messageTypes() == QMessage::Email) { |
5078 if (messageAccount.messageTypes() == QMessage::Email) { |
4951 iNumberOfHandledFilters++; |
5079 iNumberOfHandledFilters++; |
4952 CMsvEntryFilter* pFilter = CMsvEntryFilter::NewLC(); |
5080 CMsvEntryFilter* pFilter = CMsvEntryFilter::NewLC(); |
5365 } else { |
5493 } else { |
5366 if (ipMsvFindOperation) { |
5494 if (ipMsvFindOperation) { |
5367 const CMsvFindResultSelection& findResultSelection = ipMsvFindOperation->GetFindResult(); |
5495 const CMsvFindResultSelection& findResultSelection = ipMsvFindOperation->GetFindResult(); |
5368 QMessageIdList msgIds; |
5496 QMessageIdList msgIds; |
5369 for (int i=0; i < findResultSelection.Count(); i++) { |
5497 for (int i=0; i < findResultSelection.Count(); i++) { |
5370 msgIds.append(QMessageId(QString::number(findResultSelection[i].iId))); |
5498 msgIds.append(QMessageId(SymbianHelpers::addIdPrefix(QString::number(findResultSelection[i].iId),SymbianHelpers::EngineTypeMTM))); |
5371 } |
5499 } |
5372 iOwner.filterAndOrderMessagesReady(true, iOperationId, msgIds, iNumberOfHandledFilters, iResultCorrectlyOrdered); |
5500 iOwner.filterAndOrderMessagesReady(true, iOperationId, msgIds, iNumberOfHandledFilters, iResultCorrectlyOrdered); |
5373 } else { |
5501 } else { |
5374 iOwner.filterAndOrderMessagesReady(true, iOperationId, iIdList, iNumberOfHandledFilters, iResultCorrectlyOrdered); |
5502 iOwner.filterAndOrderMessagesReady(true, iOperationId, iIdList, iNumberOfHandledFilters, iResultCorrectlyOrdered); |
5375 } |
5503 } |