smbmusicapmainplayerfilterprocessregistertoplaylist.cpp

来自「symbian」· C++ 代码 · 共 420 行

CPP
420
字号
/* Copyright (C) 2005-2006 Sony Ericsson Mobile Communications Japan, Inc. */
/*-------------------------------------------------------------------------*/
// FileName:
//	SmbMusicAPMainPlayerFilterProcessRegisterToPlaylist.cpp
//
// Description:
//	儈儏乕僕僢僋儊僀儞僾儗僀儎
//	傾僀僥儉忣曬庢摼張棟僋儔僗
/*-------------------------------------------------------------------------*/
//曄峏棜楌
//擔晅				|曄峏幰			|撪梕
//---------------------------------------------------------------------------
//2006/08/14		|SDNA壀嶳		|怴婯嶌惉

#include <FjAfEnv.h>
#include "SmbMusicAPMainPlayerUtility.h"
#include "SmbMusicAPMainPlayerFilterProcessRegisterToPlaylist.h"

USING_NAMESPACE_DCM
SEMCJ_NAMESPACE_BEGIN

/**
 僐儞僗僩儔僋僞
 * @param[in]	aObserver				僆僽僓乕僶偺億僀儞僞
 * @param[in]	aSyncServerController	摨婜僒乕僶惂屼偺嶲徠
 * @return	側偟
 */
CSmbMusicAPMainPlayerFilterProcessRegisterToPlaylist::CSmbMusicAPMainPlayerFilterProcessRegisterToPlaylist(
																MSmbMusicAPMainPlayerFilterProcessObserver&			aObserver,
																CSmbMusicAPMainPlayerFilterSyncServerController&	aSyncServerController)
	:CSmbMusicAPMainPlayerFilterProcess(aObserver)
	, iEvent(EFilterProcessRegisterToPlaylistEventStart)
	, iState(EFilterProcessRegisterToPlaylistStateIdle)
	, iSyncServer(aSyncServerController)
	, iLog(CAfEnv::Static()->Log())
	{
	}

/**
 僨僗僩儔僋僞
 * @param	側偟
 * @return	側偟
 */
CSmbMusicAPMainPlayerFilterProcessRegisterToPlaylist::~CSmbMusicAPMainPlayerFilterProcessRegisterToPlaylist()
	{
	if(EFilterProcessRegisterToPlaylistStateRegister == iState)
		{
		iSyncServer.CancelRequest(iRequestId, EFalse);
		}
	
	iTempIndexArray.Close();
	}


/**
 * 僷儔儊乕僞愝掕
 * @param[in]	aAllItem		慡審/巜掕僼儔僌
 * @param[in]	aListHandle		儕僗僩僴儞僪儖
 * @param[in]	aCount			捛壛悢
 * @param[in]	aIndexArray		僀儞僨僢僋僗攝楍
 * @param[in]	aListHandle		僾儗僀儕僗僩傾僀僥儉偺儕僗僩僴儞僪儖
 * @param[in]	aIndex			僾儗僀儕僗僩傾僀僥儉偺Index斣崋
 * @param[in]	aInsertIndex	捛壛愭僾儗僀儕僗僩嬋堦棗偵偍偗傞憓擖埵抲乮Index斣崋乯
 *								晧偺抣偺応崌偼OverWritePlaylist, 侽埲忋偱偁傟偽InsertItemsToPlaylist
 */
TBool CSmbMusicAPMainPlayerFilterProcessRegisterToPlaylist::SetParam( 	TBool 				aAllItem, 
																		TInt 				aSrcListHandle, 
																		TInt 				aCount, 
																		const RArray<TInt>*	aIndexArray,
																		TInt 				aListHandle, 
																		TInt 				aIndex,
																		TInt 				aInsertIndex)
	{
	if( EFilterProcessRegisterToPlaylistStateIdle		== iState ||
		EFilterProcessRegisterToPlaylistStateWaitStart	== iState )
		{
		iAllItem		= aAllItem;
		iSrcListHandle	= aSrcListHandle;
		iCount			= aCount;
		iIndexArray		= aIndexArray;
		iListHandle		= aListHandle;
		iIndex			= aIndex;
		iInsertIndex	= aInsertIndex;
		
		if(0<=iInsertIndex)
			{
			iState = EFilterProcessRegisterToPlaylistStateWaitStart;
			}
		else
			{
			iState = EFilterProcessRegisterToPlaylistStateWaitStartOverwrite;
			}
		return ETrue;
		}
	else
		{
		return EFalse;
		}
	}

/**
 * 梫媮姰椆
 *
 * @param[in]		aKind				梫媮庬暿
 * @param[in]		aResult				張棟寢壥
 * @param[in]		aResponse			墳摎僋儔僗偺嶲徠乮忣曬庢摼梡乯
 */
void CSmbMusicAPMainPlayerFilterProcessRegisterToPlaylist::RequestComplete(TSmbMusicAPMainPlayerRequest 					aKind, 
																	 TInt 													aResult, 
																	 MSmbMusicAPMainPlayerFilterSyncServerProcessResponse&	/*aResponse*/)
	{
	if(EEditRequestInsertItemsToPlaylist == aKind
	|| EEditRequestOverWritePlaylist == aKind)
		{
		if(KErrNone == aResult)
			{
			iEvent	= EFilterProcessRegisterToPlaylistEventSyncServerComplete;
			}
		else if(KErrOverflow == aResult)
			{
			iEvent	= EFilterProcessRegisterToPlaylistEventSyncServerErrOverFlow;
			}
		else
			{
			iResult	= aResult;
			iEvent	= EFilterProcessRegisterToPlaylistEventSyncServerErr;
			}
		DoSequence();
		}
	else
		{
		}
	}


/**
 * 梫媮僉儍儞僙儖
 *
 * @param[in]		aKind				梫媮庬暿
 * @param[in]		aResponse			墳摎僋儔僗偺嶲徠乮忣曬庢摼梡乯
 */
void CSmbMusicAPMainPlayerFilterProcessRegisterToPlaylist::RequestCancel( TSmbMusicAPMainPlayerRequest 							aKind, 
																	MSmbMusicAPMainPlayerFilterSyncServerProcessResponse&	/*aResponse*/)
	{
	if(EEditRequestInsertItemsToPlaylist == aKind
	|| EEditRequestOverWritePlaylist == aKind)
		{
		iEvent = EFilterProcessRegisterToPlaylistEventSyncServerCancel;
		DoSequence();
		}
	else
		{
		}
	}

/**
 * 僐儅儞僪張棟傪幚峴偡傞
 * @param	側偟
 * @return	側偟
 */
void CSmbMusicAPMainPlayerFilterProcessRegisterToPlaylist::DoSequence()
	{
	switch(iState)
		{
	case EFilterProcessRegisterToPlaylistStateWaitStart:	// 張棟奐巒懸偪
		{
		if(EFilterProcessRegisterToPlaylistEventStart == iEvent)
			{
			if(EFalse != GetNextIndex())
				{
				TInt result = iSyncServer.InsertItemsToPlaylist(EFalse,iSrcListHandle,&iTempIndexArray,iListHandle,iIndex,iInsertIndex,EOwnerType_Filter,iRequestId,*this);
	
				if(KErrNone == result)
					{
					iState	= EFilterProcessRegisterToPlaylistStateRegister;
					}
				else
					{
					iResult	= result;
					iState	= EFilterProcessRegisterToPlaylistStateErr;
					NextState();
					}
				}
			else
				{
				if(iCount == iCompleteCount)
					{
					iResult	= KErrNone;
					iState	= EFilterProcessRegisterToPlaylistStateEnd;
					}
				else
					{
					iResult	= KErrGeneral;
					iState	= EFilterProcessRegisterToPlaylistStateErr;
					}
				NextState();
				}
			}
		else
			{
			}
		}
		break;

	case EFilterProcessRegisterToPlaylistStateWaitStartOverwrite:	// 張棟奐巒懸偪
		{
		if(EFilterProcessRegisterToPlaylistEventStart == iEvent)
			{
			if(EFalse != GetNextIndex())
				{
				TInt result = iSyncServer.OverWritePlaylist(EFalse,iSrcListHandle,&iTempIndexArray,iListHandle,iIndex,EOwnerType_Filter,iRequestId,*this);
	
				if(KErrNone == result)
					{
					iState	= EFilterProcessRegisterToPlaylistStateRegister;
					}
				else
					{
					iResult	= result;
					iState	= EFilterProcessRegisterToPlaylistStateErr;
					NextState();
					}
				}
			else
				{
				iResult	= KErrNone;
				iState	= EFilterProcessRegisterToPlaylistStateEnd;
				NextState();
				}
			}
		else
			{
			}
		}
		break;

	case EFilterProcessRegisterToPlaylistStateRegister:	// 搊榐拞
		{
		
		switch(iEvent)
			{
		
		case EFilterProcessRegisterToPlaylistEventSyncServerComplete:
			{
			iCompleteCount++;
			iEvent = EFilterProcessRegisterToPlaylistEventStart;
			iState	= EFilterProcessRegisterToPlaylistStateWaitStart;
			NextState();
			iObserver.ProcessProgress(KErrNone,*this);
			}
			break;
			
		case EFilterProcessRegisterToPlaylistEventSyncServerCancel:
			{
			iResult	= KErrCancel;
			iState	= EFilterProcessRegisterToPlaylistStateEnd;
			NextState();
			iObserver.ProcessProgress(KErrNone,*this);
			}
			break;

		case EFilterProcessRegisterToPlaylistEventSyncServerErr:
			{
			iEvent = EFilterProcessRegisterToPlaylistEventStart;
			iState	= EFilterProcessRegisterToPlaylistStateWaitStart;
			NextState();
			iObserver.ProcessProgress(iResult,*this);
			}
			break;

		case EFilterProcessRegisterToPlaylistEventSyncServerErrOverFlow:
			{
			iResult	= KErrOverflow;
			iState	= EFilterProcessRegisterToPlaylistStateEnd;
			NextState();
			}
			break;

		default:
			{
			}
			break;
			}
		}
		break;

	case EFilterProcessRegisterToPlaylistStateCancel:	// 僉儍儞僙儖
		{
		if(EFilterProcessRegisterToPlaylistEventSyncServerComplete == iEvent)
			{
			iCompleteCount++;
			}

		if(iCount == iCompleteCount)
			{
			iResult	= KErrNone;
			iState	= EFilterProcessRegisterToPlaylistStateEnd;
			}
		else
			{
			iResult	= KErrCancel;
			iState	= EFilterProcessRegisterToPlaylistStateEnd;
			}
		NextState();

		}
		break;

	case EFilterProcessRegisterToPlaylistStateIdle:		// 枹張棟
	case EFilterProcessRegisterToPlaylistStateEnd:		// 張棟廔椆
	case EFilterProcessRegisterToPlaylistStateErr:		// 僄儔乕廔椆
	default:
		{
		}
		break;
		}
	}

/**
 * 僐儅儞僪張棟傪拞巭偡傞
 * @param	側偟
 * @return	僉儍儞僙儖偺惉斲(ETrue:僉儍儞僙儖張棟幚巤 EFalse:僉儍儞僙儖枹懳墳)
 */
TBool CSmbMusicAPMainPlayerFilterProcessRegisterToPlaylist::CancelSequence()
	{
	switch(iState)
		{
	case EFilterProcessRegisterToPlaylistStateWaitStart:			// 張棟奐巒懸偪
	case EFilterProcessRegisterToPlaylistStateWaitStartOverwrite:	// 張棟奐巒懸偪
		{
		iState	= EFilterProcessRegisterToPlaylistStateCancel;
		NextState();
		}
		break;
	
	case EFilterProcessRegisterToPlaylistStateRegister:				// 僾儗僀儕僗僩搊榐拞
		{
		iState	= EFilterProcessRegisterToPlaylistStateCancel;
		}
		break;

	case EFilterProcessRegisterToPlaylistStateCancel:				// 僉儍儞僙儖
	case EFilterProcessRegisterToPlaylistStateIdle:					// 枹張棟
	case EFilterProcessRegisterToPlaylistStateEnd:					// 張棟廔椆
	case EFilterProcessRegisterToPlaylistStateErr:					// 僄儔乕廔椆
	default:
		// 壗傕偟側偄
		break;
		}
	
	return ETrue;
	}

/**
 * 偡傋偰偺僐儅儞僪幚峴偑廔傢偭偨偐偳偆偐妋擣偡傞
 * @param	側偟
 * @return	廔椆敾掕(ETrue:姰椆嵪 EFalse丗枹姰椆)
 */
TBool CSmbMusicAPMainPlayerFilterProcessRegisterToPlaylist::IsSequenceFinished()
	{
	TBool finish = EFalse;

	switch(iState)
		{
	case EFilterProcessRegisterToPlaylistStateEnd:
	case EFilterProcessRegisterToPlaylistStateErr:
		finish = ETrue;
		break;

	default:
		break;
		}
	
	return finish;
	}

/**
 * 師偺僀儞僨僢僋僗傪庢摼偡傞
 * @param	側偟
 * @return	師偑偁傞偐偳偆偐(ETrue:桳 EFalse丗柍)
 */
TBool CSmbMusicAPMainPlayerFilterProcessRegisterToPlaylist::GetNextIndex()
	{
	
	if(iExecuteCount >= iCount)
		{
		return EFalse;
		}
	
	if(1 != iTempIndexArray.Count())
		{
		iTempIndexArray.Reset();
		
		// 椞堟偺妋曐
		TInt error = iTempIndexArray.Append(0);
		if(KErrNone != error)
			{
			TInt logCode = CLASS_CODE_CSmbMusicAPMainPlayerFilterProcessRegisterToPlaylist | 01;
			_LIT(KLogFmt, "CSmbMusicAPMainPlayerFilterProcessRegisterToPlaylist::GetNextIndex() Append Err %d");
			SmbMusicAPMainPlayerUtility::OutputLog(iLog, logCode, ELogLevelHighest, KLogFmt, error);
			PANIC(9100009);
			}
		}

	if(EFalse == iAllItem)
		{
		iTempIndexArray[0] = (*iIndexArray)[iExecuteCount];
		}
	else
		{
		iTempIndexArray[0] = iExecuteCount;
		}
	iExecuteCount++;

	return ETrue;
	}


SEMCJ_NAMESPACE_END

⌨️ 快捷键说明

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