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

📄 playhpnv.cpp

📁 symbian 下的helix player源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    // 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_RESULT
PlayerHyperNavigate::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
//
STDMETHODIMP
PlayerHyperNavigate::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:
 */
STDMETHODIMP
PlayerHyperNavigate::InitDone(HX_RESULT status)
{
    return HXR_OK;
}

STDMETHODIMP
PlayerHyperNavigate::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
 */
STDMETHODIMP
PlayerHyperNavigate::DirObjectReady(HX_RESULT status,
				    IUnknown* pDirObject)
{
    return HXR_NOTIMPL;
}

/*
 *	IHXCallback methods
 */
STDMETHODIMP
PlayerHyperNavigate::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_RESULT
PlayerHyperNavigate::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 + -