⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mtmsexampleengine.cpp

📁 个人手机助理套件:包含1、记事本(备忘录)、名片夹、名片夹的上传下载(异地备份)、短消息模块
💻 CPP
📖 第 1 页 / 共 2 页
字号:

        // 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 + -