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

📄 msvemailutils.cpp

📁 Symbian C++ of Nokia下的源码
💻 CPP
字号:
/*
* ============================================================================
*  Name     : CMsvEmailUtils from MsvEmailUtils.cpp
*  Part of  : EmailExample
*  Created  : 09/11/2003 by Forum Nokia
*  Implementation notes:
*		Common helpers for different internet email protocols
*
*  Version  : 1.0
*  Copyright: Nokia Corporation
* ============================================================================
*/

#include <mtclreg.h>	//for CClientMtmRegistry
#include <popcmtm.h>	//for POP commands
#include <impcmtm.h>	//for IMAP commmands
#include "MsvEmailUtils.h"

//	static creation. Removes object from clean up stack
CMsvEmailUtils* CMsvEmailUtils::NewL(CMsvSession& aSession)
	{
	CMsvEmailUtils* self = NewLC(aSession);
	CleanupStack::Pop(self);
	return self;
	}

// static creation. Leaves object on clean up stack
CMsvEmailUtils* CMsvEmailUtils::NewLC(CMsvSession& aSession)
	{
	CMsvEmailUtils* self = new (ELeave)CMsvEmailUtils(aSession);
	CleanupStack::PushL(self);
	self->ConstructL();
	return self;
	}

CMsvEmailUtils::CMsvEmailUtils(CMsvSession& aSession):
	iMsvSession(aSession)
	{}

CMsvEmailUtils::~CMsvEmailUtils()
	{
	delete iMtmReg;
	}

void CMsvEmailUtils::ConstructL()
	{}

// find the messaging type ID of the given service UID
TMsvId CMsvEmailUtils::GetServiceIdL(TUid aType)
	{
	return FindServiceL(aType);
	}

// find the messaging type ID of the given folder then service UID
TMsvId CMsvEmailUtils::GetFolderThenServiceIdL(TUid aType)
	{
	return FindFolderThenServiceL(aType);
	}

// create an imap4 client mtm
CImap4ClientMtm* CMsvEmailUtils::InstantiateImapClientMtmL(TMsvId aService)
	{

	// make sure we have created the mtm registry.
	if (!iMtmReg)
		{
		iMtmReg = CClientMtmRegistry::NewL(iMsvSession);
		}

	// create a imap4 client mtm
	CImap4ClientMtm* newMtm = static_cast<CImap4ClientMtm*>(iMtmReg->NewMtmL(KUidMsgTypeIMAP4));
	CleanupStack::PushL(newMtm);
	// get the entry associated with the given servive ID
	CMsvEntry* entry = iMsvSession.GetEntryL(aService);
	CleanupStack::PushL(entry);
	// set the entry as the current entry
	// mtm takes ownership of the entry
	newMtm->SetCurrentEntryL(entry);
	CleanupStack::Pop(entry);
	CleanupStack::Pop(newMtm);
	return newMtm;
	}

// create a pop3 client mtm
CPop3ClientMtm* CMsvEmailUtils::InstantiatePopClientMtmL(TMsvId aService)
	{

	// make sure we have created the mtm registry.
	if (!iMtmReg)
		{
		iMtmReg = CClientMtmRegistry::NewL(iMsvSession);
		}

	// create a pop3 client mtm
	CPop3ClientMtm* newMtm = static_cast<CPop3ClientMtm*>(iMtmReg->NewMtmL(KUidMsgTypePOP3));
	CleanupStack::PushL(newMtm);
	// get the entry associated with the given servive ID
	CMsvEntry* entry = iMsvSession.GetEntryL(aService);
	CleanupStack::PushL(entry);
	// set the entry as the current entry
	// mtm takes ownership of the entry
	newMtm->SetCurrentEntryL(entry);
	CleanupStack::Pop(entry);
	CleanupStack::Pop(newMtm);
	return newMtm;
	}

// this function will return the first folder of first
// service of given type if and only if folder exists
// else it returns first service entry id or if not exists root id
TMsvId CMsvEmailUtils::FindFolderThenServiceL(TUid aType)
    {

	// select the root index to start the search
	CMsvEntry* currentEntry = iMsvSession.GetEntryL(KMsvRootIndexEntryId);
	CleanupStack::PushL(currentEntry);

	// don't sort the entries
    currentEntry->SetSortTypeL(TMsvSelectionOrdering(KMsvNoGrouping,EMsvSortByNone, ETrue));

	TMsvId rc = KMsvRootIndexEntryId;
    TInt count=currentEntry->Count();
	// loop for every child entry of the root index
    for(TInt i = 0;i<count;i++)
        {
        const TMsvEntry& child = (*currentEntry)[i];

		// is the current child the same type as the type we are looking for ?
	    if (child.iMtm == aType)
            {
			// selects first entry as index entry
			CMsvEntry* firstEntry = iMsvSession.GetEntryL(child.Id());
			CleanupStack::PushL(firstEntry);
			TInt innercount=firstEntry->Count();
			if( innercount )
				{ //if has childs == folders take first
				const TMsvEntry& folder = (*firstEntry)[0];
				rc=folder.Id();
				}
			else
				{
				rc=child.Id();
				}
			CleanupStack::PopAndDestroy(firstEntry);
			break;
            }
        }//for

	CleanupStack::PopAndDestroy(currentEntry);
	// return the service id of the type if found.
	// otherwise return the root index
    return rc;
    }

// find the message id of a service given a UID
// this function will return the first service id for given type
TMsvId CMsvEmailUtils::FindServiceL(TUid aType)
    {

	// select the root index to start the search
	CMsvEntry* currentEntry = iMsvSession.GetEntryL(KMsvRootIndexEntryId);
	CleanupStack::PushL(currentEntry);

	// don't sort the entries
    currentEntry->SetSortTypeL(TMsvSelectionOrdering(KMsvNoGrouping,EMsvSortByNone, ETrue));

	TMsvId rc = KMsvRootIndexEntryId;
    TInt count=currentEntry->Count();
	// loop for every child entry of the root index
    for(TInt i = 0;i<count;i++)
        {
        const TMsvEntry& child = (*currentEntry)[i];

		// is the current child the same type as the type we are looking for ?
	    if (child.iMtm == aType)
            {
				// selects first entry as index entry
				rc=child.Id();
				break;
            }
        }//for

	CleanupStack::PopAndDestroy(currentEntry);
	// return the service id of the type if found.
	// otherwise return the root index
    return rc;
    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -