winamp/Src/Plugins/Portable/pmp_p4s/MyProgress.cpp

96 lines
1.8 KiB
C++

#include "MyProgress.h"
extern LPARAM ipc_transfer;
MyProgress::MyProgress(TransferItem *_t)
: t(_t), refcount(1), estTicks(0)
{
}
MyProgress::~MyProgress() {}
HRESULT MyProgress::Begin(DWORD dwEstimatedTicks)
{
estTicks = dwEstimatedTicks / 100;
return S_OK;
}
HRESULT MyProgress::Progress(DWORD dwTranspiredTicks)
{
if (estTicks > 0) {
int pc = dwTranspiredTicks / estTicks;
if(pc > 100) pc = 100;
t->pc = pc;
}
else t->pc = 0;
wchar_t buf[100] = {0};
wsprintf(buf,WASABI_API_LNGSTRINGW(IDS_TRANSFERRING_PERCENT), t->pc);
t->callback(t->callbackContext,buf);
if (*(t->killswitch))
return WMDM_E_USER_CANCELLED;
return S_OK;
}
#define PHASE_START 1
#define PHASE_INPROGRESS 2
#define PHASE_FINISH 3
#define PHASE_DONE 4
#define PHASE_ERROR 5
HRESULT MyProgress::End()
{
t->phase = PHASE_FINISH;
return S_OK;
}
#define IMPLEMENTS(ifc) if (riid == IID_ ## ifc) { ++refcount; *ppvObject = static_cast<ifc *>(this); return S_OK; }
HRESULT MyProgress::QueryInterface(REFIID riid,void __RPC_FAR *__RPC_FAR *ppvObject)
{
IMPLEMENTS(IUnknown);
IMPLEMENTS(IWMDMProgress);
IMPLEMENTS(IWMDMProgress2);
IMPLEMENTS(IWMDMProgress3);
*ppvObject = NULL;
return E_NOINTERFACE;
}
ULONG MyProgress::AddRef()
{
return ++refcount;
}
ULONG MyProgress::Release()
{
int x = --refcount;
if (x == 0)
delete this;
return x;
}
HRESULT MyProgress::End2(HRESULT hrCompletionCode)
{
return End();
}
HRESULT MyProgress::Begin3(GUID EventId,DWORD dwEstimatedTicks,OPAQUECOMMAND* pContext)
{
return Begin(dwEstimatedTicks);
}
HRESULT MyProgress::Progress3(GUID EventId,DWORD dwTranspiredTicks,OPAQUECOMMAND* pContext)
{
return Progress(dwTranspiredTicks);
}
HRESULT MyProgress::End3(GUID EventId,HRESULT hrCompletionCode,OPAQUECOMMAND* pContext)
{
return End2( hrCompletionCode);
}