📄 playhpnv.cpp
字号:
// if alternate hypernavigation says it doesn't implement if (hxrResult != HXR_NOTIMPL) return(hxrResult); return HandleCommands(pURL, pTargetInstance, pParams);}STDMETHODIMP PlayerHyperNavigate::Hint(const char* pURL, const char* pTarget, IHXValues* pParams){ HX_RESULT hxrResult = HXR_NOTIMPL; IHXHyperNavigateHint* pHyperNavigateHint = NULL; if (m_pHyperNavigateWithContext) { m_pHyperNavigateWithContext->QueryInterface(IID_IHXHyperNavigateHint, (void**) &pHyperNavigateHint); } if (!pHyperNavigateHint && m_pHyperNavigate) { m_pHyperNavigate->QueryInterface(IID_IHXHyperNavigateHint, (void**) &pHyperNavigateHint); } if (pHyperNavigateHint) { hxrResult = pHyperNavigateHint->Hint(pURL, pTarget, pParams); HX_RELEASE(pHyperNavigateHint); } return hxrResult;}HX_RESULTPlayerHyperNavigate::HandleCommands(const char* pURL, const char* pTarget, IHXValues* pParams){ HX_RESULT hxrResult = HXR_NOTIMPL; char* pArgument = NULL; // // Check for player commands. // if (strnicmp(pURL, URL_COMMAND, sizeof(URL_COMMAND) - 1) == 0) { const char *pOpen = HXFindChar(pURL, '('); const char *pClose = HXReverseFindChar(pURL, ')'); if (! pOpen || ! pClose || (pOpen > pClose)) { return HXR_FAILED; } // beginning of actual player command const char* pCommand = pURL + sizeof(URL_COMMAND) - 1; int iLength = pClose - (pOpen + 1); if (strnicmp(pCommand, URL_COMMAND_SEEK, sizeof(URL_COMMAND_SEEK) - 1) == 0) { if (m_pPlayer) { pArgument = new_string(pOpen + 1, iLength); if (!pArgument) { return HXR_OUTOFMEMORY; } NPTime time(pArgument); hxrResult = m_pPlayer->Seek(time); } } else if (strnicmp(pCommand, URL_COMMAND_PLAY, sizeof(URL_COMMAND_PLAY) - 1) == 0) { if ((iLength == 0) && m_pPlayer) { hxrResult = m_pPlayer->Begin(); } } else if (strnicmp(pCommand, URL_COMMAND_PAUSE, sizeof(URL_COMMAND_PAUSE) - 1) == 0) { if ((iLength == 0) && m_pPlayer) { hxrResult = m_pPlayer->Pause(); } } else if (strnicmp(pCommand, URL_COMMAND_STOP, sizeof(URL_COMMAND_STOP) - 1) == 0) { if ((iLength == 0) && m_pPlayer) { hxrResult = m_pPlayer->Stop(); } } else if (strnicmp(pCommand, URL_COMMAND_PREVIOUSCLIP, sizeof(URL_COMMAND_PREVIOUSCLIP) - 1) == 0) { if ((iLength == 0) && m_pGroupManager) { UINT16 iCurrent = 0; m_pGroupManager->GetCurrentGroup(iCurrent); // play previous clip if one exists if ((iCurrent > 0) && ((iCurrent - 1) < m_pGroupManager->GetGroupCount())) { hxrResult = m_pGroupManager->SetCurrentGroup(iCurrent - 1); } } } else if (strnicmp(pCommand, URL_COMMAND_NEXTCLIP, sizeof(URL_COMMAND_NEXTCLIP) - 1) == 0) { if ((iLength == 0) && m_pGroupManager) { UINT16 iCurrent = 0; m_pGroupManager->GetCurrentGroup(iCurrent); // play next clip if one exists if (iCurrent < m_pGroupManager->GetGroupCount()) { hxrResult = m_pGroupManager->SetCurrentGroup(iCurrent + 1); } } } else if (strnicmp(pCommand, URL_COMMAND_ADSCOOKIES, sizeof(URL_COMMAND_ADSCOOKIES) - 1) == 0) { pArgument = new_string(pOpen + 1, iLength); if (!pArgument) { return HXR_OUTOFMEMORY; } hxrResult = SendAdsCookies(pArgument); } HX_VECTOR_DELETE(pArgument); return hxrResult; } else if (pTarget && stricmp(pTarget, "_player") == 0) { /* we want to unwind the stack...since it may come from * an OnTimeSync() into syncMM renderer...and if we call * OpenURL() syncronously, bad things happen in the * core (srcinfo gets deleted). * use our friendly scheduler... */ HX_RELEASE(m_pPendingRequest); IHXCommonClassFactory* pCommonClassFactory = NULL; m_pPlayer->QueryInterface(IID_IHXCommonClassFactory, (void**)&pCommonClassFactory); if (pCommonClassFactory) { pCommonClassFactory->CreateInstance(IID_IHXRequest, (void**) &m_pPendingRequest); HX_ASSERT(m_pPendingRequest); if (m_pPendingRequest) { m_pPendingRequest->SetURL(pURL); if (pParams) { m_pPendingRequest->SetRequestHeaders(pParams); } } HX_RELEASE(pCommonClassFactory); } if (m_pScheduler && m_pPendingRequest) { if (!m_CallbackHandle) { m_CallbackHandle = m_pScheduler->RelativeEnter((IHXCallback*) this, 0); } } else { Func(); } return HXR_OK; } return HXR_FAILED;}/////////////////////////////////////////////////////////////////////////// Method:// IHXHyperNavigateRedirectResponse::RedirectDone//STDMETHODIMPPlayerHyperNavigate::RedirectDone(IHXBuffer* pBuffer){ if (pBuffer && m_pHyperNavigate) { // deligate to alternate hypernavigation interface return m_pHyperNavigate->GoToURL((const char*)pBuffer->GetBuffer(), NULL); } return HXR_OK;}/************************************************************************ * Method: * IHXFileSystemManagerResponse::InitDone * Purpose: */STDMETHODIMPPlayerHyperNavigate::InitDone(HX_RESULT status){ return HXR_OK;}STDMETHODIMPPlayerHyperNavigate::FileObjectReady(HX_RESULT status, IUnknown* pObject){ HX_RESULT theErr = HXR_OK; IHXHTTPRedirect* pRedirect = NULL; if (!pObject) { theErr = HXR_FAILED; } else if (HXR_OK != pObject->QueryInterface(IID_IHXFileObject, (void**)&m_pFileObject)) { theErr = HXR_FAILED; } else if (HXR_OK != pObject->QueryInterface(IID_IHXHTTPRedirect, (void**)&pRedirect)) { theErr = HXR_FAILED; } else { theErr = pRedirect->Init((IHXHTTPRedirectResponse*)this); } HX_RELEASE(pRedirect); return theErr;}/* * The following method is deprecated and should return HXR_NOTIMPL */STDMETHODIMPPlayerHyperNavigate::DirObjectReady(HX_RESULT status, IUnknown* pDirObject){ return HXR_NOTIMPL;}/* * IHXCallback methods */STDMETHODIMPPlayerHyperNavigate::Func(){ m_CallbackHandle = 0; if (m_pPlayer && m_pPendingRequest) { IHXPlayer2* pPlayer2 = NULL; m_pPlayer->QueryInterface(IID_IHXPlayer2, (void**) &pPlayer2); pPlayer2->OpenRequest(m_pPendingRequest); m_pPlayer->Begin(); pPlayer2->Release(); HX_RELEASE(m_pPendingRequest); } return HXR_OK;}HX_RESULTPlayerHyperNavigate::SendAdsCookies(char* pURL){ HX_RESULT hr = HXR_OK; IHXRequest* pRequest = NULL; IHXFileSystemManager* pFileSystemManager = NULL; IHXCommonClassFactory* pCommonClassFactory = NULL; if (HXR_OK != m_pPlayer->QueryInterface(IID_IHXCommonClassFactory, (void**)&pCommonClassFactory)) { hr = HXR_FAILED; } else if (HXR_OK != pCommonClassFactory->CreateInstance(CLSID_IHXFileSystemManager, (void**)&pFileSystemManager)) { hr = HXR_FAILED; } else if (HXR_OK != pFileSystemManager->Init((IHXFileSystemManagerResponse*)this)) { hr = HXR_FAILED; } else { IHXPreferences* pPreferences = NULL; if (m_pPlayer->QueryInterface(IID_IHXPreferences, (void **) &pPreferences) == HXR_OK) { IHXRegistry* pRegistry = NULL; m_pPlayer->QueryInterface(IID_IHXRegistry, (void**)&pRegistry); ::SetRequest(pURL, FALSE, pPreferences, pRegistry, NULL, pRequest); HX_RELEASE(pRegistry); } HX_RELEASE(pPreferences); hr = pFileSystemManager->GetNewFileObject(pRequest, 0); } HX_RELEASE(pRequest); HX_RELEASE(pFileSystemManager); HX_RELEASE(pCommonClassFactory); return hr; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -