|
|
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ //
// bindstcb.cpp
//
// Bind status callback object. Called by cdf file parser.
//
// History:
//
// 3/31/97 edwardp Created.
//
////////////////////////////////////////////////////////////////////////////////
//
// Includes
//
#include "stdinc.h"
#include "cdfidl.h"
#include "xmlutil.h"
#include "persist.h"
#include "bindstcb.h"
#include "chanapi.h"
#include "chanenum.h"
#include "dll.h"
#include "resource.h"
//
// Constructor and destructor.
//
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ //
// *** CBindStatusCallback::CBindStatusCallback ***
//
// Constructor.
//
////////////////////////////////////////////////////////////////////////////////
CBindStatusCallback::CBindStatusCallback ( IXMLDocument* pIXMLDocument, LPCWSTR pszURLW ) : m_cRef(1) { ASSERT(pIXMLDocument); ASSERT(pszURLW);
pIXMLDocument->AddRef(); m_pIXMLDocument = pIXMLDocument;
int cb = StrLenW(pszURLW) + 1;
m_pszURL = new TCHAR[cb];
if (m_pszURL) SHUnicodeToTChar(pszURLW, m_pszURL, cb);
return; }
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ //
// *** CBindStatusCallback::~CBindStatusCallback ***
//
// Destructor.
//
////////////////////////////////////////////////////////////////////////////////
CBindStatusCallback::~CBindStatusCallback ( void ) { ASSERT(0 == m_cRef);
if (m_pIXMLDocument) m_pIXMLDocument->Release();
if (m_pszURL) delete [] m_pszURL;
if (m_pPrevIBindStatusCallback) m_pPrevIBindStatusCallback->Release();
return; }
//
// IUnknown methods.
//
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ //
// *** CBindStatusCallback::QueryInterface ***
//
// CBindStatusCallback QI.
//
////////////////////////////////////////////////////////////////////////////////
STDMETHODIMP CBindStatusCallback::QueryInterface ( REFIID riid, void **ppv ) { HRESULT hr;
ASSERT(ppv);
if (IID_IUnknown == riid || IID_IBindStatusCallback == riid) { AddRef(); *ppv = (IBindStatusCallback*)this; hr = S_OK; } else { *ppv = NULL; hr = E_NOINTERFACE; }
ASSERT((SUCCEEDED(hr) && *ppv) || (FAILED(hr) && NULL == *ppv));
return hr; }
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ //
// *** CBindStatusCallback::AddRef ***
//
// CBindStatusCallback AddRef.
//
////////////////////////////////////////////////////////////////////////////////
STDMETHODIMP_(ULONG) CBindStatusCallback::AddRef ( void ) { ASSERT(m_cRef != 0); ASSERT(m_cRef < (ULONG)-1);
return ++m_cRef; }
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ //
// *** CBindStatusCallback::Release ***
//
// CContextMenu Release.
//
////////////////////////////////////////////////////////////////////////////////
STDMETHODIMP_(ULONG) CBindStatusCallback::Release ( void ) { ASSERT (m_cRef != 0);
ULONG cRef = --m_cRef; if (0 == cRef) delete this;
return cRef; }
//
// IBindStatusCallback methods.
//
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ //
// *** CBindStatusCallback::GetBindInfo ***
//
//
// Description:
//
//
// Parameters:
//
//
// Return:
//
//
// Comments:
//
//
////////////////////////////////////////////////////////////////////////////////
STDMETHODIMP CBindStatusCallback::GetBindInfo( DWORD* pgrfBINDF, BINDINFO* pbindinfo ) { //ASSERT(pgrfBINDF);
//*pgrfBINDF &= ~BINDF_ASYNCHRONOUS;
return S_OK; }
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ //
// *** CBindStatusCallback::OnStartBinding ***
//
//
// Description:
//
//
// Parameters:
//
//
// Return:
//
//
// Comments:
//
//
////////////////////////////////////////////////////////////////////////////////
STDMETHODIMP CBindStatusCallback::OnStartBinding( DWORD dwReserved, IBinding* pIBinding ) { return S_OK; }
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ //
// *** CBindStatusCallback::GetPriority ***
//
//
// Description:
//
//
// Parameters:
//
//
// Return:
//
//
// Comments:
//
//
////////////////////////////////////////////////////////////////////////////////
STDMETHODIMP CBindStatusCallback::GetPriority( LONG *pnPriority ) { return S_OK; }
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ //
// *** CBindStatusCallback::OnProgress ***
//
//
// Description:
//
//
// Parameters:
//
//
// Return:
//
//
// Comments:
//
//
////////////////////////////////////////////////////////////////////////////////
STDMETHODIMP CBindStatusCallback::OnProgress( ULONG ulProgress, ULONG ulProgressMax, ULONG ulStatusCode, LPCWSTR szStatusText ) { HRESULT hr;
if (m_pPrevIBindStatusCallback) { hr = m_pPrevIBindStatusCallback->OnProgress(ulProgress, ulProgressMax, ulStatusCode, szStatusText); } else { hr = S_OK; }
return hr; }
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ //
// *** CBindStatusCallback::OnDataAvailable ***
//
//
// Description:
//
//
// Parameters:
//
//
// Return:
//
//
// Comments:
//
//
////////////////////////////////////////////////////////////////////////////////
STDMETHODIMP CBindStatusCallback::OnDataAvailable( DWORD grfBSCF, DWORD dwSize, FORMATETC* pfmtect, STGMEDIUM* pstgmed ) { return S_OK; }
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ //
// *** CBindStatusCallback::OnObjectAvialable ***
//
//
// Description:
//
//
// Parameters:
//
//
// Return:
//
//
// Comments:
//
//
////////////////////////////////////////////////////////////////////////////////
STDMETHODIMP CBindStatusCallback::OnObjectAvailable( REFIID riid, IUnknown* pIUnknown ) { return S_OK; }
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ //
// *** CBindStatusCallback::OnLowResource ***
//
//
// Description:
//
//
// Parameters:
//
//
// Return:
//
//
// Comments:
//
//
////////////////////////////////////////////////////////////////////////////////
STDMETHODIMP CBindStatusCallback::OnLowResource( DWORD dwReserved ) { return S_OK; }
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ //
// *** CBindStatusCallback::OnStopBinding ***
//
//
// Description:
//
//
// Parameters:
//
//
// Return:
//
//
// Comments:
//
//
////////////////////////////////////////////////////////////////////////////////
STDMETHODIMP CBindStatusCallback::OnStopBinding( HRESULT hrStatus, LPCWSTR szStatusText ) { if (m_pPrevIBindStatusCallback) m_pPrevIBindStatusCallback->OnStopBinding(hrStatus, szStatusText);
HRESULT hr = hrStatus;
if (SUCCEEDED(hr)) { if (m_pszURL) { ASSERT(m_pIXMLDocument);
XML_DownloadImages(m_pIXMLDocument);
// Moved to constructor.
//Cache_AddItem(m_pszURL, m_pIXMLDocument, PARSE_NET);
XML_MarkCacheEntrySticky(m_pszURL);
//
// Update the item now that the download is complete.
//
WCHAR wszURL[INTERNET_MAX_URL_LENGTH];
if (SHTCharToUnicode(m_pszURL, wszURL, ARRAYSIZE(wszURL))) Channel_SendUpdateNotifications(wszURL); } else { hr = E_OUTOFMEMORY; } }
return hr; }
//
// Helper functions.
//
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ //
// *** CBindStatusCallback::Wait ***
//
//
// Description:
//
//
// Parameters:
//
//
// Return:
//
//
// Comments:
//
//
////////////////////////////////////////////////////////////////////////////////
HRESULT CBindStatusCallback::Init( IBindStatusCallback* pPrevIBindStatusCallback ) { ASSERT(NULL == m_pPrevIBindStatusCallback);
m_pPrevIBindStatusCallback = pPrevIBindStatusCallback;
return S_OK; }
//
// Constructor and destructor.
//
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ //
// *** CBindStatusCallback::CBindStatusCallback ***
//
// Constructor.
//
////////////////////////////////////////////////////////////////////////////////
CBindStatusCallback2::CBindStatusCallback2 ( HWND hwnd ) : m_cRef(1), m_hwnd(hwnd) { DllAddRef();
return; }
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ //
// *** CBindStatusCallback::~CBindStatusCallback ***
//
// Destructor.
//
////////////////////////////////////////////////////////////////////////////////
CBindStatusCallback2::~CBindStatusCallback2 ( void ) { ASSERT(0 == m_cRef);
DllRelease();
return; }
//
// IUnknown methods.
//
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ //
// *** CBindStatusCallback::QueryInterface ***
//
// CBindStatusCallback QI.
//
////////////////////////////////////////////////////////////////////////////////
STDMETHODIMP CBindStatusCallback2::QueryInterface ( REFIID riid, void **ppv ) { HRESULT hr;
ASSERT(ppv);
if (IID_IUnknown == riid || IID_IBindStatusCallback == riid) { AddRef(); *ppv = (IBindStatusCallback*)this; hr = S_OK; } else { *ppv = NULL; hr = E_NOINTERFACE; }
ASSERT((SUCCEEDED(hr) && *ppv) || (FAILED(hr) && NULL == *ppv));
return hr; }
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ //
// *** CBindStatusCallback::AddRef ***
//
// CBindStatusCallback AddRef.
//
////////////////////////////////////////////////////////////////////////////////
STDMETHODIMP_(ULONG) CBindStatusCallback2::AddRef ( void ) { ASSERT(m_cRef != 0); ASSERT(m_cRef < (ULONG)-1);
return ++m_cRef; }
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ //
// *** CBindStatusCallback::Release ***
//
// CContextMenu Release.
//
////////////////////////////////////////////////////////////////////////////////
STDMETHODIMP_(ULONG) CBindStatusCallback2::Release ( void ) { ASSERT (m_cRef != 0);
ULONG cRef = --m_cRef; if (0 == cRef) delete this;
return cRef; }
//
// IBindStatusCallback methods.
//
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ //
// *** CBindStatusCallback::GetBindInfo ***
//
//
// Description:
//
//
// Parameters:
//
//
// Return:
//
//
// Comments:
//
//
////////////////////////////////////////////////////////////////////////////////
STDMETHODIMP CBindStatusCallback2::GetBindInfo( DWORD* pgrfBINDF, BINDINFO* pbindinfo ) { return S_OK; }
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ //
// *** CBindStatusCallback::OnStartBinding ***
//
//
// Description:
//
//
// Parameters:
//
//
// Return:
//
//
// Comments:
//
//
////////////////////////////////////////////////////////////////////////////////
STDMETHODIMP CBindStatusCallback2::OnStartBinding( DWORD dwReserved, IBinding* pIBinding ) { return S_OK; }
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ //
// *** CBindStatusCallback::GetPriority ***
//
//
// Description:
//
//
// Parameters:
//
//
// Return:
//
//
// Comments:
//
//
////////////////////////////////////////////////////////////////////////////////
STDMETHODIMP CBindStatusCallback2::GetPriority( LONG *pnPriority ) { return S_OK; }
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ //
// *** CBindStatusCallback::OnProgress ***
//
//
// Description:
//
//
// Parameters:
//
//
// Return:
//
//
// Comments:
//
//
////////////////////////////////////////////////////////////////////////////////
STDMETHODIMP CBindStatusCallback2::OnProgress( ULONG ulProgress, ULONG ulProgressMax, ULONG ulStatusCode, LPCWSTR szStatusText ) { PostMessage(m_hwnd, WM_COMMAND, DOWNLOAD_PROGRESS, 0);
return S_OK; }
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ //
// *** CBindStatusCallback::OnDataAvailable ***
//
//
// Description:
//
//
// Parameters:
//
//
// Return:
//
//
// Comments:
//
//
////////////////////////////////////////////////////////////////////////////////
STDMETHODIMP CBindStatusCallback2::OnDataAvailable( DWORD grfBSCF, DWORD dwSize, FORMATETC* pfmtect, STGMEDIUM* pstgmed ) { return S_OK; }
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ //
// *** CBindStatusCallback::OnObjectAvialable ***
//
//
// Description:
//
//
// Parameters:
//
//
// Return:
//
//
// Comments:
//
//
////////////////////////////////////////////////////////////////////////////////
STDMETHODIMP CBindStatusCallback2::OnObjectAvailable( REFIID riid, IUnknown* pIUnknown ) { return S_OK; }
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ //
// *** CBindStatusCallback::OnLowResource ***
//
//
// Description:
//
//
// Parameters:
//
//
// Return:
//
//
// Comments:
//
//
////////////////////////////////////////////////////////////////////////////////
STDMETHODIMP CBindStatusCallback2::OnLowResource( DWORD dwReserved ) { return S_OK; }
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ //
// *** CBindStatusCallback::OnStopBinding ***
//
//
// Description:
//
//
// Parameters:
//
//
// Return:
//
//
// Comments:
//
//
////////////////////////////////////////////////////////////////////////////////
STDMETHODIMP CBindStatusCallback2::OnStopBinding( HRESULT hrStatus, LPCWSTR szStatusText ) { HRESULT hr = hrStatus;
PostMessage(m_hwnd, WM_COMMAND, DOWNLOAD_COMPLETE, SUCCEEDED(hr) ? TRUE : FALSE);
return hr; }
|