📄 mtmsexampleengine.cpp
字号:
// Get the default SC address, if valid, Otherwise just get the first from the list.
if ((settings.DefaultSC() >= 0) && (settings.DefaultSC() < numSCAddresses))
serviceCentreNumber = &(settings.SCAddress(settings.DefaultSC()));
else
serviceCentreNumber = &(settings.SCAddress(0));
iSmsMtm->SmsHeader().SetServiceCenterAddressL(serviceCentreNumber->Address());
}
else
{
// report panic, programming error - there should never be a missing service number,
}
// Save the message
iSmsMtm->SaveMessageL();
// Update the index entry
TMsvEntry indexEntry = iSmsMtm->Entry().Entry();
indexEntry.SetInPreparation(EFalse);
indexEntry.SetSendingState(KMsvSendStateWaiting);
iSmsMtm->Entry().ChangeL(indexEntry);
// Now send
Cancel(); // prepare iOp for use
iEntrySelection->Reset();
iEntrySelection->AppendL(iSmsId);
TBuf8<1> dummyParams;
iOp = iSmsMtm->InvokeAsyncFunctionL(ESmsMtmCommandScheduleCopy, *iEntrySelection, dummyParams, iStatus);
SetActive();
}
//
// MMS Functions
//
void CMtmsExampleEngine::CreateDraftMMSL(const TDesC& aAddress)
{
// Set the context of the MMS MTM to Drafts
iMmsMtm->SwitchCurrentEntryL(KMsvDraftEntryId);
// Create a new message using the default service,
// and store its ID for later reference
iMmsMtm->CreateMessageL(iMmsMtm->DefaultSettingsL());
iMmsId = iMmsMtm->Entry().EntryId();
// Add any phone number and email addressees
iMmsMtm->AddAddresseeL(aAddress);
// Add attachments (also known as "media objects")
AddMMSAttachmentsL();
// Set subject
iMmsMtm->SetSubjectL(KMMSSubject);
// Finally, save the message to commit changes to the store
iMmsMtm->SaveMessageL();
}
void CMtmsExampleEngine::AddMMSAttachmentsL()
{
TMsvId attachmentId = KMsvNullIndexEntryId;
// Add a JPEG attachment
TFileName attachmentName(KMMSImageFilename);
User::LeaveIfError(CompleteWithAppPath(attachmentName));
iMmsMtm->CreateAttachment2L(attachmentId, attachmentName);
// Add the text attachment
iMmsMtm->CreateTextAttachmentL(attachmentId, KMMSText, KMMSTextFilename);
// Add the SMIL part
attachmentName = KMMSSmilFilename;
User::LeaveIfError(CompleteWithAppPath(attachmentName));
iMmsMtm->CreateAttachment2L(attachmentId, attachmentName);
iMmsMtm->SetMessageRootL(attachmentId);
}
TBool CMtmsExampleEngine::ValidateMMS()
{
TMsvPartList msgCheckParts =
KMsvMessagePartBody | KMsvMessagePartRecipient |
KMsvMessagePartOriginator | KMsvMessagePartDate |
KMsvMessagePartAttachments | KMsvMessagePartDescription;
TMsvPartList msgFailParts = iMmsMtm->ValidateMessage(msgCheckParts);
return msgFailParts == KMsvMessagePartNone;
}
void CMtmsExampleEngine::SendMMSL()
{
iMmsMtm->SwitchCurrentEntryL(iMmsId);
// Mark the message as complete
TMsvEntry indexEntry = iMmsMtm->Entry().Entry();
indexEntry.SetInPreparation(EFalse);
indexEntry.SetVisible(ETrue);
// Commit changes to index entry
iMmsMtm->Entry().ChangeL(indexEntry);
// Now send
Cancel(); // prepare iOp for use
iOp = iMmsMtm->SendL(iStatus);
SetActive();
}
void CMtmsExampleEngine::HandleSessionEventL(TMsvSessionEvent aEvent, TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/)
{
switch (aEvent)
{
// This event tells us that the session has been opened
case EMsvServerReady:
CompleteConstructL();
break;
default:
// do nothing
break;
}
}
void CMtmsExampleEngine::GetFolderSMSMessageInformation(TMsvId aFolderID, CDesCArrayFlat*& aIsRead, CDesCArrayFlat*& aMobile, CDesCArrayFlat*& aMessage)
{
iSmsMtm->SwitchCurrentEntryL( aFolderID );
CMsvEntry& entry = iSmsMtm->Entry();
// Remember to delete this entry after no longer needed!
// Only intrested in messages. Filter out service etries.
CMsvEntrySelection* entries = entry.ChildrenWithMtmL(KUidMsgTypeSMS);
TBuf<2> sTmp;
// CDesCArrayFlat* arrayRead = new (ELeave) CDesCArrayFlat(10);
// CDesCArrayFlat* arrayAddr = new (ELeave) CDesCArrayFlat(10);
// CDesCArrayFlat* arrayMsgBody = new (ELeave) CDesCArrayFlat(10);
if(iIdArray)
{
iIdArray->Reset();
delete iIdArray;
iIdArray = NULL;
}
iIdArray = new (ELeave) RArray<TMsvId>;
for (TInt i = entries->Count()-1; i >= 0; i-- )
{
// TBuf<KMessageBodySize> body;
// TBuf<KMessageAddressLength> address;
iIdArray->Append((*entries)[i]);
//of READ FLAG
iSmsMtm->SwitchCurrentEntryL( (*entries)[i] );
sTmp.Format(_L("%d"), !iSmsMtm->Entry().Entry().Unread());
aIsRead->AppendL(sTmp);
//of message.
iSmsMtm->SwitchCurrentEntryL( (*entries)[i] );
aMessage->AppendL(iSmsMtm->Entry().Entry().iDescription);
//of mobile
iSmsMtm->SwitchCurrentEntryL( (*entries)[i] );
iSmsMtm->LoadMessageL();
// CSmsHeader& header = iSmsMtm->SmsHeader();
// aMobile->AppendL(header.FromAddress());
aMobile->AppendL(iSmsMtm->Entry().Entry().iDetails );
}
// Delete entries. This is your responsibility.
entries->Reset();
delete entries;
entries = 0;
// aIsRead = arrayRead;
// aMobile = arrayAddr; // address array
// aMessage = arrayMsgBody; // msg body array
}
void CMtmsExampleEngine::GetMessageAddressL( TMsvId aMessageId, TDes& aAddress )
{
iSmsMtm->SwitchCurrentEntryL( aMessageId );
// Remember to load before using the SmsHeader
iSmsMtm->LoadMessageL();
// CSmsHeader& header = iSmsMtm->SmsHeader();
// aAddress.Append( header.FromAddress() );
// Other possibility is this: (It's little bit faster than the previous one).
aAddress.Append( iSmsMtm->Entry().Entry().iDetails );
}
// ----------------------------------------------------------------------------
// CMtmsEngine::GetMessageL( TMsvId aMessageId, TDes& aMessage)
//
// Get message body from entry storage (CMsvStore). CMsvStore stores whole
// message, not summary information ( see GetMessageIndexBodyTextL() ).
// ----------------------------------------------------------------------------
TBool CMtmsExampleEngine::GetMessageL( TMsvId aMessageId, TDes& aMessage)
{
iSmsMtm->SwitchCurrentEntryL( aMessageId );
if ( iSmsMtm->Entry().HasStoreL() )
{
// SMS message is stored inside Messaging store.
CMsvStore* store = iSmsMtm->Entry().ReadStoreL();
CleanupStack::PushL(store);
if (store->HasBodyTextL())
{
CRichText* richText = CRichText::NewL(
CEikonEnv::Static()->SystemParaFormatLayerL(),
CEikonEnv::Static()->SystemCharFormatLayerL());
richText->Reset();
CleanupStack::PushL(richText);
// Get the SMS body text.
store->RestoreBodyTextL(*richText);
const TInt length = richText->DocumentLength();
TBuf<256> message;
// Check length because message is read to limited size TBuf.
if ( length >= 256 )
{
message.Append( richText->Read(0, 256 -1) );
}
else
{
message.Append( richText->Read(0, length) );
}
aMessage.Append( message );
CleanupStack::PopAndDestroy(richText);
}
CleanupStack::PopAndDestroy(store);
}
else
{
return EFalse;
}
return ETrue;
}
void CMtmsExampleEngine::DeleteMessageL(TInt nCurrent)
{
iSmsMtm->SwitchCurrentEntryL( (*iIdArray)[nCurrent] );
TMsvId parent = iSmsMtm->Entry().Entry().Parent();
iSmsMtm->SwitchCurrentEntryL( parent );
iSmsMtm->Entry().DeleteL( (*iIdArray)[nCurrent] );
iIdArray->Remove(nCurrent);
}
void CMtmsExampleEngine::MoveToFolderL(TInt aIndex, TMsvId aFolder)
{
iSmsMtm->SwitchCurrentEntryL( (*iIdArray)[aIndex] );
TMsvSelectionOrdering selection;
selection.SetShowInvisibleEntries(ETrue);
CMsvEntry* parentEntry = CMsvEntry::NewL( iSmsMtm->Session(),
iSmsMtm->Entry().Entry().Parent(), selection );
CleanupStack::PushL(parentEntry);
// Move the message
parentEntry->MoveL( (*iIdArray)[aIndex], aFolder );
CleanupStack::PopAndDestroy(); // parentEntry
}
// End of File
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -