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 + -
显示快捷键?