📄 smbmusicaplibreportcounter.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 + -