smbmusicaplibmwfunc.cpp

来自「索爱手机代码」· C++ 代码 · 共 1,300 行 · 第 1/4 页

CPP
1,300
字号
/* Copyright (C) 2006 Sony Ericsson Mobile Communications Japan, Inc. */
/*--------------------------------------------------------------------*/
// FileName:
//	SmbMusicAPLibMWFunc.cpp
//
// Description:
//	PTX824 Music傾僾儕 嫟捠儔僀僽儔儕 夋憸庢摼 僋儔僗
/*--------------------------------------------------------------------*/
//曄峏棜楌
//擔晅			|曄峏幰			|撪梕
//--------------+---------------+--------------------------------------
//2006/06/09	|娵壀			| 怴婯嶌惉
//2006/09/04	|憊				| TRK8003懳墳
//2006/09/09	|娵壀			| TRK8888懳墳
//2006/09/26	|娵壀			| TRK10436懳墳
//-----PTX824---+---------------+--------------------------------------
//2007/03/20	|K3悪杮			| PTX824懳墳
//2007/03/22	|K3悪杮			| 夋憸僼傽僀儖庢摼帠慜僠僃僢僋張棟嶍彍
//2007/03/30	|K3悪杮			| PTX824懳墳(API張棟捛壛)
//2007/04/02	|K3悪杮			| PTX824懳墳(奼戝儕僒僀僘張棟懳墳)
//2007/04/04	|K3悪杮			| 儗價儏乕寢壥斀塮
//2007/06/22	|K3悪杮			| PTX824懳墳(AAA夋憸懳墳)


#ifndef __SMBMUSICAPLIBMWFUNC_H__
#include "SmbMusicAPLibMWFunc.h"
#endif

#ifndef __SMBMUSICAPLIBIMAGEFUNC_H__
#include "SmbMusicAPLibImageFunc.h"
#endif

#ifndef __SMBMUSICAPLIBMWANALYZEITEM_H__
#include "SmbMusicAPLibMWAnalyzeItem.h"
#endif

#ifndef	__SMBMUSICAPLIBLOG_H__
#include "SmbMusicAPLibLog.h"
#endif


USING_NAMESPACE_SEMCJ

/**
 *  僼傽僋僩儕娭悢
 *  @param[in]	aSession	MusicMW儔僀僽儔儕僙僢僔儑儞偺嶲徠
 *  @return	夋憸庢摼僋儔僗偺億僀儞僞
 **/
EXPORT_C CSmbMusicAPLibMWFunc* CSmbMusicAPLibMWFunc::NewL(RSmbMusicMWLibSession& aSession)
	{
	CSmbMusicAPLibMWFunc* self = new(ELeave) CSmbMusicAPLibMWFunc(aSession);
	CleanupStack::PushL(self);
	self->ConstructL();
	CleanupStack::Pop(self);
	return self;
	}


/**
 *  僐儞僗僩儔僋僞
 *  @param[in]	aSession	MusicMW儔僀僽儔儕僙僢僔儑儞偺嶲徠
 **/
CSmbMusicAPLibMWFunc::CSmbMusicAPLibMWFunc(RSmbMusicMWLibSession& aSession)
	:CActive(CActive::EPriorityStandard)
	,iMWSession(aSession)
	{
	//傾僋僥傿僽僗働僕儏乕儔偵帺暘帺恎傪捛壛偡傞
	CActiveScheduler::Add(this);
	}


/**
 *  戞擇僼僃乕僘僐儞僗僩儔僋僞
 **/
void CSmbMusicAPLibMWFunc::ConstructL()
	{
	//ImageFunc僆僽僕僃僋僩傪惗惉
	iImageFunc = CSmbMusicAPLibImageFunc::NewL();
	//AnalyzeItem僆僽僕僃僋僩傪惗惉
	iAnalyzeItem = new(ELeave) CSmbMusicAPLibMWAnalyzeItem();

	RFs fs;
	//僼傽僀儖僒乕僶偵愙懕偡傞
	TInt ret = fs.Connect();
	if(KErrNone != ret)
		{
		//儘僌傪弌椡
		TUint32 logCode = EMusicAPLibClassNumber_CSmbMusicAPLibMWFunc | EMusicAPLibLocationNumber00;
		_LIT(KMusicAPLibMWFunc00, "CSmbMusicAPLibMWFunc::ConstructL() [ErrFile]: fs.Connect() = %d");
		SmbMusicAPLibLog(logCode, ELogLevelHigh, KMusicAPLibMWFunc00, ret);

		User::Leave(KErrCouldNotConnect);
		}

	//巜掕偟偨僼傽僀儖僷僗偵僨傿儗僋僩儕傪惗惉偡傞丟傕偟婛偵惗惉偟偨傜丄偦傟傪巊偆
	ret = fs.MkDirAll(KAPLibImageFilePath());
	if((KErrNone != ret) && (KErrAlreadyExists != ret))
		{
		//儘僌傪弌椡
		TUint32 logCode = EMusicAPLibClassNumber_CSmbMusicAPLibMWFunc | EMusicAPLibLocationNumber01;
		_LIT(KMusicAPLibMWFunc01, "CSmbMusicAPLibMWFunc::ConstructL() [ErrFile]: fs.MkDir() = %d");
		SmbMusicAPLibLog(logCode, ELogLevelHigh, KMusicAPLibMWFunc01, ret);

		//僙僢僔儑儞傪僋儘乕僘偡傞
		fs.Close();

		User::Leave(ret);
		}

	//僙僢僔儑儞傪僋儘乕僘偡傞
	fs.Close();
	}


/**
 *  僨僗僩儔僋僞
 **/
EXPORT_C CSmbMusicAPLibMWFunc::~CSmbMusicAPLibMWFunc()
	{
	//AO傪僉儍儞僙儖偡傞
	Cancel();

	//惗惉偟偨僆僽僕僃僋僩傪嶍彍
	delete iImageFunc;
	delete iAnalyzeItem;

	//攝楍偺拞偺Bitmap忣曬傪嶍彍偡傞
 	DeleteBitmapArray();
 	//Array傪僋儘乕僘偡傞
 	iDstBitmapArray.Close();

	//惗惉偟偨夋憸僼傽僀儖傪僨儕乕僩偡傞
	if(NULL != iFileName)
		{
		//夋憸僼傽僀儖傪嶍彍
		DeleteFile();

		delete iFileName;
		}
	}

/**
 *  夋憸忣曬傪庢摼偡傞丗僕儍働僢僩夋憸(懸偪庴偗夋憸娷傓)丄壧帉夋憸偺忣曬偺攝楍庢摼
 *  @param[in]		aItem	夋憸忣曬傪庢摼偡傞妝嬋傾僀僥儉偺僆僽僕僃僋僩
 *  @param[in,out]	aInfo	庢摼偟偨僕儍働僢僩夋憸(懸偪庴偗夋憸娷傓)丄壧帉夋憸偺忣曬偺攝楍
 *  @param[in,out]	aStatus	旕摨婜墳摎梡偺傾僋僥傿僽僆僽僕僃僋僩僗僥乕僞僗
 *  @param[in]		aExType	奼挘僼儔僌(僨僼僅儖僩:AAA夋憸庢摼)
 *  @return	張棟寢壥
 **/
EXPORT_C TInt CSmbMusicAPLibMWFunc::GetImageInfo(
		CSmbMusicMWLibSongItem& aItem,
		TSmbMusicAPLibImageInfo& aInfo,
		TRequestStatus& aStatus,
		TInt aExType/*=ESmbMusicAPLibExTypeEnableAAA*/
		)
	{
#ifdef __SMBMUSICAPLIB_ENABLEALLLOG__
	TUint32 logCode = EMusicAPLibClassNumber_CSmbMusicAPLibMWFunc | EMusicAPLibLocationNumber02;
	_LIT(KMusicAPLibMWFunc02, "CSmbMusicAPLibMWFunc::GetImageInfo()");
	SmbMusicAPLibLog(logCode, ELogLevelLowest, KMusicAPLibMWFunc02);
#endif

	//忬懺偑ESmbMusicAPLibIdle偱側偄応崌丄僄儔乕偱栠傞
	if(ESmbMusicAPLibIdle != State())
		{
		TUint32 logCode = EMusicAPLibClassNumber_CSmbMusicAPLibMWFunc | EMusicAPLibLocationNumber03;
		_LIT(KMusicAPLibMWFunc03, "CSmbMusicAPLibMWFunc::GetImageInfo() [ErrState]:Not Idle State. State = %d");
		SmbMusicAPLibLog(logCode, ELogLevelHigh, KMusicAPLibMWFunc03, State());

		return KErrInUse;
		}

	TInt countJacket = aInfo.iImageJacketInfo.Count();
	TInt countLyric = aInfo.iImageLyricInfo.Count();

	//堷悢偺攝楍偵帠慜偵梫慺偑擖偭偰偄傞応崌丄僄儔乕傪曉偡
	if(0 != countJacket || 0 != countLyric)
		{
		TUint32 logCode = EMusicAPLibClassNumber_CSmbMusicAPLibMWFunc | EMusicAPLibLocationNumber04;
		_LIT(KMusicAPLibMWFunc04, "CSmbMusicAPLibMWFunc::GetImageInfo() [ErrArg]:Image Array Count Not Zero. Jacket = %d, Lyric = %d");
		SmbMusicAPLibLog(logCode, ELogLevelHigh, KMusicAPLibMWFunc04, countJacket, countLyric);

		return KErrArgument;
		}

	//夋憸忣曬夝愅僋儔僗偺夋憸忣曬庢摼娭悢傪屇傃弌偡丟AO帺懱偺iStatus傪搉偡
	TInt ret = iAnalyzeItem->GetImageInfo(aItem, aExType, aInfo, iStatus);
	if(KErrNone != ret)
		{
		TUint32 logCode = EMusicAPLibClassNumber_CSmbMusicAPLibMWFunc | EMusicAPLibLocationNumber05;
		_LIT(KMusicAPLibMWFunc05, "CSmbMusicAPLibMWFunc::GetImageInfo() [ErrCall]:AnalyzeItem->GetImageInfo() = %d");
		SmbMusicAPLibLog(logCode, ELogLevelHigh, KMusicAPLibMWFunc05, ret);

		return ret;
		}

	//旕摨婜梫媮傪僗僞乕僩偡傞乮SetActive偡傞乯
	Start();

	//僀儊乕僕忣曬庢摼懸偪忬懺偵擖傞
	SetState(ESmbMusicAPLibWaitImageInfoRes);

	//aStatus傪曐懚偡傞
	iClientStatus = &aStatus;

	//僋儔僀傾儞僩懁AO偺梫媮傪Pending偡傞
	if(NULL != iClientStatus)
		{
		*iClientStatus = KRequestPending;
		}

	return KErrNone;
	}

/**
 *  夋憸忣曬偺庢摼傪僉儍儞僙儖偡傞
 *  @return	張棟寢壥
 **/
EXPORT_C TInt CSmbMusicAPLibMWFunc::CancelGetImageInfo()
	{
#ifdef __SMBMUSICAPLIB_ENABLEALLLOG__
	TUint32 logCode = EMusicAPLibClassNumber_CSmbMusicAPLibMWFunc | EMusicAPLibLocationNumber06;
	_LIT(KMusicAPLibMWFunc06, "CSmbMusicAPLibMWFunc::CancelGetImageInfo() State = %d");
	SmbMusicAPLibLog(logCode, ELogLevelLowest, KMusicAPLibMWFunc06, State());
#endif

	TSmbMusicAPLibMWFuncState curState = State();

	//忬懺偑ESmbMusicAPLibIdle偺応崌丄旕摨婜張棟偑婛偵姰椆偟偨働乕僗偑偁傞
	if(ESmbMusicAPLibIdle == curState)
		{
#ifdef __SMBMUSICAPLIB_ENABLEALLLOG__
		TUint32 logCode = EMusicAPLibClassNumber_CSmbMusicAPLibMWFunc | EMusicAPLibLocationNumber07;
		_LIT(KMusicAPLibMWFunc07, "CSmbMusicAPLibMWFunc::CancelGetImageInfo() [In Idle State]: ret = %d");
		SmbMusicAPLibLog(logCode, ELogLevelLowest, KMusicAPLibMWFunc07, KErrCompletion);
#endif

		return KErrCompletion;
		}

	//忬懺偑ESmbMusicAPLibWaitImageInfoRes埲奜偺応崌丄懳墳忬懺偱側偄偨傔僄儔乕傪曉偡
	if(ESmbMusicAPLibWaitImageInfoRes != curState)
		{
		TUint32 logCode = EMusicAPLibClassNumber_CSmbMusicAPLibMWFunc | EMusicAPLibLocationNumber08;
		_LIT(KMusicAPLibMWFunc08, "CSmbMusicAPLibMWFunc::CancelGetImageInfo() [ErrState]:State Not Supported. State = %d");
		SmbMusicAPLibLog(logCode, ELogLevelHigh, KMusicAPLibMWFunc08, curState);

		return KErrNotSupported;
		}

	TInt retVal = KErrNone;

	//僉儍儞僙儖梫媮傪弌偡丄傕偟旕摨婜張棟偑姰椆偟偨傜丄偦偺巪傪僋儔僀傾儞僩偵曉偡
	TInt ret = iAnalyzeItem->CancelImageInfo();
	if(KErrNone != ret)
		{
#ifdef __SMBMUSICAPLIB_ENABLEALLLOG__
		TUint32 logCode = EMusicAPLibClassNumber_CSmbMusicAPLibMWFunc | EMusicAPLibLocationNumber09;
		_LIT(KMusicAPLibMWFunc09, "CSmbMusicAPLibMWFunc::CancelGetImageInfo() [AnalyzeItem class in Idle State]:ret = %d");
		SmbMusicAPLibLog(logCode, ELogLevelLowest, KMusicAPLibMWFunc09, ret);
#endif

		retVal = KErrCompletion;
		}

	//AO偺僉儍儞僙儖傪屇傃弌偡
	Cancel();

	//惗惉偟偨僆僽僕僃僋僩傪嶍彍偟丄旕摨婜梫媮偺僉儍儞僙儖傪姰椆偡傞
 	DeleteObjectsAndComplete(KErrCancel);

	return retVal;
	}

/**
 *  妝嬋僼傽僀儖偵娷傑傟傞夋憸僼傽僀儖傪巜掕偝傟偨僼傽僀儖柤偱惗惉偡傞
 *  @param[in]		aItem		夋憸僼傽僀儖傪強桳偟偰偄傞妝嬋傾僀僥儉偺僆僽僕僃僋僩
 *  @param[in]		aType		夋憸庬暿(僕儍働僢僩夋憸(懸庴夋憸傪娷傓)丄壧帉夋憸)
 *  @param[in]		aIndex		夋憸斣崋巜掕
 *  @param[in]		aFileName	僼傽僀儖柤(僼儖僷僗巜掕)
 *  @param[in,out]	aStatus		旕摨婜墳摎梡偺傾僋僥傿僽僆僽僕僃僋僩僗僥乕僞僗
 *  @param[in]		aExType		奼挘僼儔僌(僨僼僅儖僩:AAA夋憸庢摼)
 *  @return	張棟寢壥
 **/
EXPORT_C TInt CSmbMusicAPLibMWFunc::GetImage(
		CSmbMusicMWLibSongItem& aItem,
		TSmbMusicAPLibImageType aType,
		TInt aIndex,
		const TDesC& aFileName,
		TRequestStatus& aStatus,
		TInt aExType/*=ESmbMusicAPLibExTypeEnableAAA*/
		)
	{
#ifdef __SMBMUSICAPLIB_ENABLEALLLOG__
	TUint32 logCode = EMusicAPLibClassNumber_CSmbMusicAPLibMWFunc | EMusicAPLibLocationNumber10;
	_LIT(KMusicAPLibMWFunc10, "CSmbMusicAPLibMWFunc::GetImage(aType:%d, aIndex:%d, aFileName.Length:%d ExType:%08x)");
	SmbMusicAPLibLog(logCode, ELogLevelLowest, KMusicAPLibMWFunc10, aType, aIndex, aFileName.Length(), aExType);
#endif

	//忬懺偑ESmbMusicAPLibIdle偱側偄応崌丄僄儔乕偱栠傞
	if(ESmbMusicAPLibIdle != State())
		{
		TUint32 logCode = EMusicAPLibClassNumber_CSmbMusicAPLibMWFunc | EMusicAPLibLocationNumber11;
		_LIT(KMusicAPLibMWFunc11, "CSmbMusicAPLibMWFunc::GetImage() [ErrState]:Not Idle State. State = %d");
		SmbMusicAPLibLog(logCode, ELogLevelHigh, KMusicAPLibMWFunc11, State());

		return KErrInUse;
		}

	//嬋傾僀僥儉偺億僀儞僞傪堦帪曐懚偡傞
	iSongItem = &aItem;

//  MODIFY-S AAA懳墳
	TInt result = DecideImageType(aType, aIndex, aExType);
	if (result != KErrNone)
		{
		TUint32 logCode = EMusicAPLibClassNumber_CSmbMusicAPLibMWFunc | EMusicAPLibLocationNumber12;
		_LIT(KMusicAPLibMWFunc12, "CSmbMusicAPLibMWFunc::GetImage() [ErrArg]:illegal Image Type. Type:%d Index:%d ExType;%08x");
		SmbMusicAPLibLog(logCode, ELogLevelHigh, KMusicAPLibMWFunc12, aType, aIndex, aExType);

		//巜掕偝傟偨夋憸僞僀僾偑娫堘偭偰偄傞偺偱丄僄儔乕傪曉偡
		return result;
		}
//  MODIFY-E AAA懳墳

⌨️ 快捷键说明

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