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

📄 smbmusicaplibreportcounter.cpp

📁 索爱手机代码
💻 CPP
字号:
/* Copyright (C) 2006 Sony Ericsson Mobile Communications Japan, Inc. */
/*--------------------------------------------------------------------*/
// FileName:
//	CSmbMusicAPLibReportCounter.h
//
// Description:
//	PTX810 Music傾僾儕 儈儏乕僕僢僋嫟捠儔僀僽儔儕
/*--------------------------------------------------------------------*/
//曄峏棜楌
//擔晅			|曄峏幰			|撪梕
//--------------+---------------+--------------------------------------
//2007/03/09	|K3娸			|怴婯嶌惉
//2007/07/05	|K3娸			|QAC巜揈懳墳

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

#include    "SmbMusicAPLibReportCounter.h"     // for self

const TInt KMiriSecond = 1000;
const TInt KCounterTimeup = 45;		//45昩

USING_NAMESPACE_SEMCJ

/**
 * 僼傽僋僩儕娭悢
 *
 *  杮僋儔僗偺僀儞僗僞儞僗傪怴婯偵惗惉偟丄弶婜壔偟丄曉媝偡傞丅
 *
 *  @return 怴偨偵惗惉丒弶婜壔偝傟偨僀儞僗僞儞僗丅
 */
EXPORT_C CSmbMusicAPLibReportCounter* CSmbMusicAPLibReportCounter::NewL(TCallBack aCallBack)
    {
    CSmbMusicAPLibReportCounter* self = new(ELeave) CSmbMusicAPLibReportCounter(aCallBack);
    CleanupStack::PushL( self );
    self->ConstructL();
    CleanupStack::Pop( self );
    return self;
    }

/**
 *  僨僗僩儔僋僞丅
 *
 *  偡傋偰偺 Has-a 儕僜乕僗傪奐曻偡傞丅
 */
EXPORT_C CSmbMusicAPLibReportCounter::~CSmbMusicAPLibReportCounter()
	{
	if(NULL != iTimer)
		{
		iTimer->Cancel();
		}
	delete iTimer;
	}

/**
 *  僇僂儞僞乕傪奐巒偡傞丅
 *
 *  @param[in]  aPlayTime		嵞惗宱夁帪娫(GetPlayTime偱庢摼偟偨帪娫)
 *  @param[in]  aTotalPlayTime	憤嵞惗帪娫(墘憈帪娫)
 *  @return 寢壥
 */
EXPORT_C TInt CSmbMusicAPLibReportCounter::Start(TUint32 aPlayTime, TUint32 aTotalPlayTime)
    {
    //婛偵僇僂儞僞偑奐巒偝傟偰偄傞
    if(iTimer->IsActive())
    	{
    	return KErrNotReady;
    	}
    //婛偵僇僂儞僩偝傟偰偄傞嬋偵懳偟偰Start偝傟偨
	if(EFalse != iCountUp)
		{
		return KErrNone;
		}

	//憤嵞惗帪娫偑愝掕偝傟偰偄側偗傟偽曐懚偡傞
	if(0 == iTotalPlayTime)
		{
		iSongPlayTime = aTotalPlayTime;
		iTotalPlayTime = Min(aTotalPlayTime, KCounterTimeup * KMiriSecond);
		}

	//僇僂儞僩傾僢僾僞僀儅傪愝掕偡傞
	//枮椆帪娫 - 棙梡帪娫 - (柭摦奐巒傑偱偺嵎暘)
	TInt time = iTotalPlayTime - iPlayTime - (aPlayTime - iStartTime);
	//掆巭埵抲傛傝慜偐傜嵞惗偑奐巒偝傟偨応崌偼曗惓偡傞
	if(aPlayTime < iStartTime)
		{
		iStartTime = aPlayTime;
		}
	if (0 < time)
		{
		iTimer->After(time * KMiriSecond, TCallBack(CallBack, this));

#ifdef __SMBMUSICAPLIB_ENABLEALLLOG__
		TUint32 logCode = EMusicAPLibClassNumber_CSmbMusicAPLibReportCounter | EMusicAPLibLocationNumber01;
		_LIT(KMusicAPLibReportCounter01, "CSmbMusicAPLibReportCounter::Start(%d, %d) After=%d");
		SmbMusicAPLibLog(logCode, ELogLevelLowest, KMusicAPLibReportCounter01, aPlayTime, aTotalPlayTime, time);
#endif
		}

	return KErrNone;
    }

/**
 *  僇僂儞僞傪堦帪掆巭偡傞丅
 *
 *  @param[in]  aPlayTime		嵞惗宱夁帪娫(GetPlayTime偱庢摼偟偨帪娫)
 *  @param[in]  aCause			掆巭棟桼
 *  @return	寢壥
 */
EXPORT_C TInt CSmbMusicAPLibReportCounter::Pause(TUint32 aPlayTime, TSmbMusicApLibReportCounterCause aCause)
    {
    //僇僂儞僩拞偵埵抲偺堏摦偼嬛巭
    if(EPosition == aCause)
    	{
	    if(iTimer->IsActive())
	    	{
	    	return KErrNotReady;
	    	}
    	}
	else
		{
		//憗栠偟丄憗憲傝偑偱掆巭偝傟偨
		if(EPause != aCause)
			{
			iPauseFFFR = ETrue;
			}

	    iTimer->Cancel();
		iPlayTime += Max(0, aPlayTime - iStartTime);
		}

    //奐巒帪娫傪堏摦
	iStartTime = aPlayTime;

#ifdef __SMBMUSICAPLIB_ENABLEALLLOG__
	TUint32 logCode = EMusicAPLibClassNumber_CSmbMusicAPLibReportCounter | EMusicAPLibLocationNumber02;
	_LIT(KMusicAPLibReportCounter02, "CSmbMusicAPLibReportCounter::Pause(%d, %d) playtime=%d");
	SmbMusicAPLibLog(logCode, ELogLevelLowest, KMusicAPLibReportCounter02, aPlayTime, aCause, iPlayTime);
#endif
	return KErrNone;
    }

/**
 *  僇僂儞僞傪儕僙僢僩偡傞
 *
 *  @param[in]  aType		儕僙僢僩庬暿
 */
EXPORT_C void CSmbMusicAPLibReportCounter::Reset(TSmbMusicApLibReportCounterResetType aType)
    {
#ifdef __SMBMUSICAPLIB_ENABLEALLLOG__
	TUint32 logCode = EMusicAPLibClassNumber_CSmbMusicAPLibReportCounter | EMusicAPLibLocationNumber03;
	_LIT(KMusicAPLibReportCounter03, "CSmbMusicAPLibReportCounter::Reset(%d)");
	SmbMusicAPLibLog(logCode, ELogLevelLowest, KMusicAPLibReportCounter03, aType);
#endif

    TBool activeTimer = iTimer->IsActive();
    iTimer->Cancel();

	//宲懕(摢弌偟)側傜偽奐巒帪娫偩偗儕僙僢僩偡傞
	if(EContinue == aType)
		{
	    iStartTime = 0;
		return;
		}

	//嬋廔抂偱僞僀儅枮椆偺捠抦慜偵屇偽傟偨応崌偵
	//FF/FR偑巊梡偝傟偰偄側偄偐丄嵞惗帪娫偑憤嵞惗帪娫傪墇偊偨偰偄偨傜CallBack偡傞
    if(EStart == aType && EFalse == iCountUp && EFalse != activeTimer)
    	{
		if(EFalse == iPauseFFFR || iTotalPlayTime < (iPlayTime + (iSongPlayTime - iStartTime)))
			{
		    iCallBack.CallBack();

#ifdef __SMBMUSICAPLIB_ENABLEALLLOG__
			TUint32 logCode = EMusicAPLibClassNumber_CSmbMusicAPLibReportCounter | EMusicAPLibLocationNumber04;
			_LIT(KMusicAPLibReportCounter04, "CSmbMusicAPLibReportCounter::Reset(CallBack) %d, time=%d");
			SmbMusicAPLibLog(logCode, ELogLevelLowest, KMusicAPLibReportCounter04, iPauseFFFR, iPlayTime + (iSongPlayTime - iStartTime));
#endif
			}
    	}

	iTotalPlayTime = 0;
	iSongPlayTime = 0;
    iPlayTime = 0;
    iStartTime = 0;
	iCountUp = EFalse;
	iPauseFFFR = EFalse;
    }

/**
 *  僐儞僗僩儔僋僞丅
 */
CSmbMusicAPLibReportCounter::CSmbMusicAPLibReportCounter(TCallBack aCallBack): iCallBack(aCallBack)
	{
	}

/**
 *  戞擇僼僃乕僘僐儞僗僩儔僋僞
 *
 *  @param[in]  aFileName   see NewL(const TDesC&)
 */
void CSmbMusicAPLibReportCounter::ConstructL()
	{
	iTimer = DCM::CLaAfterTimer::NewL(CActive::EPriorityStandard);
	}

/**
 *  僞僀儅乕僐乕儖僶僢僋娭悢
 */
TInt CSmbMusicAPLibReportCounter::CallBack(TAny* aAny)
	{
	CSmbMusicAPLibReportCounter* self = static_cast<CSmbMusicAPLibReportCounter*>(aAny);
	self->CallBackEvent();
	return KErrNone;
	}

/**
 * 僞僀儅乕僐乕儖僶僢僋墳摎張棟
 */
void CSmbMusicAPLibReportCounter::CallBackEvent()
	{
    iCallBack.CallBack();
	iCountUp = ETrue;

    iPlayTime = 0;
	iTotalPlayTime = 0;
	iSongPlayTime = 0;

#ifdef __SMBMUSICAPLIB_ENABLEALLLOG__
	TUint32 logCode = EMusicAPLibClassNumber_CSmbMusicAPLibReportCounter | EMusicAPLibLocationNumber05;
	_LIT(KMusicAPLibReportCounter05, "CSmbMusicAPLibReportCounter::CallBackEvent");
	SmbMusicAPLibLog(logCode, ELogLevelLowest, KMusicAPLibReportCounter05);
#endif
	}

// end of SmbMusicAPLibReportCounter.cpp
/** Copyright (C) 2005-2006 Sony Ericsson Mobile Communications Japan, Inc. */

⌨️ 快捷键说明

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