|
|
/******************************************************************************
Copyright (c) 2000 Microsoft Corporation
Module Name: pchupdate.h
Abstract: This file contains the declaration of the CPCHUpdate class, that implements the IPCHUpdate interface.
Revision History: Davide Massarenti (Dmassare) 00/00/2000 created
******************************************************************************/
#ifndef __PCHUPDATE_H_
#define __PCHUPDATE_H_
#include <SvcResource.h>
#include <TaxonomyDatabase.h>
namespace HCUpdate { class Engine; class VersionItem;
////////////////////
class ATL_NO_VTABLE VersionItem : public CComObjectRootEx<MPC::CComSafeMultiThreadModel>, public IDispatchImpl<IPCHVersionItem, &IID_IPCHVersionItem, &LIBID_HelpServiceTypeLib> { friend class Engine;
Taxonomy::Package m_pkg;
////////////////////////////////////////
public: BEGIN_COM_MAP(VersionItem) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(IPCHVersionItem) END_COM_MAP()
// IHCPHelpSessionItem
STDMETHOD(get_SKU )( /*[out, retval]*/ BSTR *pVal ); STDMETHOD(get_Language )( /*[out, retval]*/ BSTR *pVal ); STDMETHOD(get_VendorID )( /*[out, retval]*/ BSTR *pVal ); STDMETHOD(get_VendorName)( /*[out, retval]*/ BSTR *pVal ); STDMETHOD(get_ProductID )( /*[out, retval]*/ BSTR *pVal ); STDMETHOD(get_Version )( /*[out, retval]*/ BSTR *pVal );
STDMETHOD(Uninstall)(); };
/////////////////////////////////////////////////////////////////////////////
// Engine
class ATL_NO_VTABLE Engine : public CComObjectRootEx<MPC::CComSafeMultiThreadModel>, public IDispatchImpl< IPCHUpdate, &IID_IPCHUpdate, &LIBID_HelpServiceTypeLib >, public CComCoClass < Engine , &CLSID_PCHUpdate >, public Taxonomy::InstallationEngine { friend class VersionItem;
MPC::wstring m_strWinDir; Taxonomy::Logger m_log; Taxonomy::Updater m_updater; Taxonomy::Settings m_ts; Taxonomy::InstalledInstance* m_sku; Taxonomy::Package* m_pkg;
bool m_fCreationMode; DWORD m_dwRefCount; JetBlue::SessionHandle m_handle; JetBlue::Session* m_sess; JetBlue::Database* m_db;
////////////////////////////////////////////////////////////////////////////////
typedef enum { ACTION_ADD, ACTION_DELETE } Action;
static const LPCWSTR s_ActionText[];
////////////////////////////////////////////////////////////////////////////////
static long CountNodes( /*[in]*/ IXMLDOMNodeList* poNodeList );
////////////////////////////////////////////////////////////////////////////////
void DeleteTempFile ( /*[in/out]*/ MPC::wstring& strFile ); HRESULT PrepareTempFile( /*[in/out]*/ MPC::wstring& strFile );
////////////////////////////////////////////////////////////////////////////////
HRESULT AppendVendorDir( LPCWSTR szURL, LPCWSTR szOwnerID, LPCWSTR szWinDir, LPWSTR szDest, int iMaxLen );
HRESULT LookupAction ( /*[in]*/ LPCWSTR szAction, /*[out]*/ Action& id ); HRESULT LookupBoolean ( /*[in]*/ LPCWSTR szString, /*[out]*/ bool& fVal, /*[in]*/ bool fDefault = false ); HRESULT LookupNavModel( /*[in]*/ LPCWSTR szString, /*[out]*/ long& lVal, /*[in]*/ long lDefault = QR_DEFAULT );
HRESULT UpdateStopSign( /*[in]*/ Action idAction, /*[in]*/ const MPC::wstring& strContext , /*[in]*/ const MPC::wstring& strStopSign ); HRESULT UpdateStopWord( /*[in]*/ Action idAction, /*[in]*/ const MPC::wstring& strStopWord ); HRESULT UpdateOperator( /*[in]*/ Action idAction, /*[in]*/ const MPC::wstring& strOperator, /*[in]*/ const MPC::wstring& strOperation );
////////////////////////////////////////////////////////////////////////////////
bool IsMicrosoft() { return m_pkg->m_fMicrosoft; }
bool IsAborted() { return (Taxonomy::InstalledInstanceStore::s_GLOBAL && Taxonomy::InstalledInstanceStore::s_GLOBAL->IsShutdown()); }
////////////////////////////////////////////////////////////////////////////////
HRESULT GetNodeDepth( /*[in]*/ LPCWSTR szCategory, /*[out]*/ int& iDepth );
HRESULT CheckNode( /*[in]*/ LPCWSTR szCategory, /*[out]*/ bool& fExist, /*[out]*/ bool& fCanCreate );
HRESULT CheckTopic( /*[in]*/ long ID_node, /*[in]*/ LPCWSTR szURI, /*[in]*/ LPCWSTR szCategory );
////////////////////////////////////////////////////////////////////////////////
HRESULT InsertNode( /*[in]*/ Action idAction , /*[in]*/ LPCWSTR szCategory , /*[in]*/ LPCWSTR szEntry , /*[in]*/ LPCWSTR szTitle , /*[in]*/ LPCWSTR szDescription , /*[in]*/ LPCWSTR szURI , /*[in]*/ LPCWSTR szIconURI , /*[in]*/ bool fVisible , /*[in]*/ bool fSubsite , /*[in]*/ long lNavModel , /*[in]*/ long lPos );
HRESULT InsertTaxonomy( /*[in]*/ MPC::XmlUtil& oXMLUtil , /*[in]*/ IXMLDOMNode* poNode );
////////////////////////////////////////////////////////////////////////////////
HRESULT AcquireDatabase(); void ReleaseDatabase();
HRESULT ProcessHHTFile( /*[in]*/ LPCWSTR szHHTName , /*[in]*/ MPC::XmlUtil& oXMLUtil );
HRESULT ProcessRegisterContent( /*[in]*/ Action idAction , /*[in]*/ LPCWSTR szURI );
HRESULT ProcessInstallFile( /*[in]*/ Action idAction , /*[in]*/ LPCWSTR szSource , /*[in]*/ LPCWSTR szDestination , /*[in]*/ bool fSys , /*[in]*/ bool fSysHelp );
HRESULT ProcessSAFFile( /*[in]*/ Action idAction , /*[in]*/ LPCWSTR szSAFName , /*[in]*/ MPC::XmlUtil& oXMLUtil );
////////////////////////////////////////////////////////////////////////////////
public: DECLARE_REGISTRY_RESOURCEID(IDR_HCUPDATE) DECLARE_NOT_AGGREGATABLE(Engine)
BEGIN_COM_MAP(Engine) COM_INTERFACE_ENTRY(IPCHUpdate) COM_INTERFACE_ENTRY(IDispatch) END_COM_MAP()
Engine();
HRESULT FinalConstruct(); void FinalRelease ();
////////////////////////////////////////
HRESULT StartLog ( ) { return m_log.StartLog ( ); } HRESULT EndLog ( ) { return m_log.EndLog ( ); } HRESULT WriteLogV( /*[in]*/ HRESULT hr, /*[in]*/ LPCWSTR szLogFormat, /*[in]*/ va_list arglist ) { return m_log.WriteLogV( hr, szLogFormat, arglist ); } HRESULT WriteLog ( /*[in]*/ HRESULT hr, /*[in]*/ LPCWSTR szLogFormat, ... );
Taxonomy::Logger& GetLogger() { return m_log; }
////////////////////////////////////////
HRESULT SetSkuInfo( /*[in]*/ LPCWSTR szSKU, /*[in]*/ long lLCID );
HRESULT PopulateDatabase( /*[in]*/ LPCWSTR szCabinet , /*[in]*/ LPCWSTR szHHTFile , /*[in]*/ LPCWSTR szLogFile , /*[in]*/ LPCWSTR szSKU , /*[in]*/ long lLCID , /*[in]*/ JetBlue::Session* sess , /*[in]*/ JetBlue::Database* db );
HRESULT InternalCreateIndex( /*[in]*/ VARIANT_BOOL bForce );
HRESULT InternalUpdatePkg( /*[in]*/ LPCWSTR szPathname, /*[in]*/ bool fImpersonate ); HRESULT InternalRemovePkg( /*[in]*/ LPCWSTR szPathname, /*[in]*/ Taxonomy::Package* pkg, /*[in]*/ bool fImpersonate );
HRESULT ForceSystemRestore();
// IPCHUpdate
public: STDMETHOD(get_VersionList)( /*[out, retval]*/ IPCHCollection* *ppC );
STDMETHOD(LatestVersion)( /*[in ]*/ BSTR bstrVendorID , /*[in ]*/ BSTR bstrProductID , /*[in,optional]*/ VARIANT vSKU , /*[in,optional]*/ VARIANT vLanguage , /*[out, retval]*/ BSTR *pVal );
STDMETHOD(CreateIndex)( /*[in ]*/ VARIANT_BOOL bForce , /*[in,optional]*/ VARIANT vSKU , /*[in,optional]*/ VARIANT vLanguage );
STDMETHOD(UpdatePkg )( /*[in]*/ BSTR bstrPathname, /*[in]*/ VARIANT_BOOL bSilent ); STDMETHOD(RemovePkg )( /*[in]*/ BSTR bstrPathname ); STDMETHOD(RemovePkgByID)( /*[in]*/ BSTR bstrVendorID, /*[in]*/ BSTR bstrProductID, /*[in,optional]*/ VARIANT vVersion );
// Taxonomy::InstallationEngine
HRESULT ProcessPackage( /*[in]*/ Taxonomy::InstalledInstance& instance, /*[in]*/ Taxonomy::Package& pkg ); HRESULT RecreateIndex ( /*[in]*/ Taxonomy::InstalledInstance& instance, /*[in]*/ bool fForce ); }; };
#endif //__PCHUPDATE_H_
|