windows-nt/Source/XPSP1/NT/admin/pchealth/helpctr/service/include/newslib.h
2020-09-26 16:20:57 +08:00

674 lines
22 KiB
C++

/** Copyright (c) 2000 Microsoft Corporation
******************************************************************************
** Module Name:
**
** Newslib.h
**
** Abstract:
**
** Declaration of News Headlines classes
**
** Author:
**
** Martha Arellano (t-alopez) 06-Dec-2000
**
**
** Revision History:
**
**
******************************************************************************
**/
#if !defined(AFX_NEWSLIB_H__B87C3400_E0B9_48CD_A0A9_0223F4448759__INCLUDED_)
#define AFX_NEWSLIB_H__B87C3400_E0B9_48CD_A0A9_0223F4448759__INCLUDED_
////////////////////////////////////////////////////////////////////////////////
// NewsSet.xml path
#define HC_HCUPDATE_NEWSSETTINGS HC_ROOT_HELPSVC_CONFIG L"\\NewsSet.xml"
// newsver.xml path
#define HC_HCUPDATE_NEWSVER HC_ROOT_HELPSVC_CONFIG L"\\News\\newsver.xml"
// UpdateHeadlines.xml path
#define HC_HCUPDATE_UPDATE HC_ROOT_HELPSVC_CONFIG L"\\News\\UpdateHeadlines.xml"
// NewsHeadlines.xml path
#define HC_HCUPDATE_NEWSHEADLINES HC_ROOT_HELPSVC_CONFIG L"\\News\\NewsHeadlines_"
// default URL for newsver.xml
#define NEWSSETTINGS_DEFAULT_URL L"http://go.microsoft.com/fwlink/?LinkID=11"
//default URL for the icon for Update headlines
#define HC_HCUPDATE_UPDATEBLOCK_ICONURL L"http://go.microsoft.com/fwlink/?LinkId=627"
// default Frequency
#define NEWSSETTINGS_DEFAULT_FREQUENCY 14
// Headlines RegKey Name
#define HEADLINES_REGKEY L"Headlines"
// Default expiration date for news items from HCUpdate
#define HCUPDATE_DEFAULT_TIMEOUT 10
// Current number of OEM headlines
#define NUMBER_OF_OEM_HEADLINES 2
////////////////////////////////////////////////////////////////////////////////
namespace News
{
/////////////////////////////////////////////////////////////////////////////
// NEWSVER
//
// The NEWSVER class loads the newsver.xml file, with the information to update the news headlines
//
// It defines the clases:
// Newsblock
// SKU
// Language
//
// and the variables:
// URL
// Frequency
//
// list of Languages
//
//
// Has the following functions:
// Download ( URL )
// Load( LCID, SKU )
//
// get_NumbeOfNewsblocks
// get_NewsblockURL
// get_URL
// get_Frequency
//
class Newsver : public MPC::Config::TypeConstructor // hungarian: nw
{
public:
//
// The Newsblock class stores the newsfile information from the newsver.xml file:
// URL
//
class Newsblock : public MPC::Config::TypeConstructor
{
DECLARE_CONFIG_MAP(Newsblock);
public:
MPC::wstring m_strURL;
bool m_fNewsblockHasHeadlines;
////////////////////
Newsblock();
////////////////////////////////////////
//
// MPC::Config::TypeConstructor
//
DEFINE_CONFIG_DEFAULTTAG();
DECLARE_CONFIG_METHODS();
//
////////////////////////////////////////
};
typedef std::vector< Newsblock > NewsblockVector;
typedef NewsblockVector::iterator NewsblockIter;
typedef NewsblockVector::const_iterator NewsblockIterConst;
////////////////////////////////////////
//
// The SKU class stores the SKU information from the newsver.xml file:
// SKU Version (Professional, Personal, ...)
//
// vector of newsblocks
//
class SKU : public MPC::Config::TypeConstructor
{
DECLARE_CONFIG_MAP(SKU);
public:
MPC::wstring m_strSKU;
NewsblockVector m_vecNewsblocks; //vector of newsblocks
////////////////////
SKU();
////////////////////////////////////////
//
// MPC::Config::TypeConstructor
//
DEFINE_CONFIG_DEFAULTTAG();
DECLARE_CONFIG_METHODS();
//
////////////////////////////////////////
};
typedef std::list< SKU > SKUList;
typedef SKUList::iterator SKUIter;
typedef SKUList::const_iterator SKUIterConst;
////////////////////////////////////////
//
// The Language class stores the Language information from the newsver.xml file:
// Language LCID
//
// list of SKUs
//
class Language : public MPC::Config::TypeConstructor
{
DECLARE_CONFIG_MAP(Language);
public:
long m_lLCID;
SKUList m_lstSKUs; //list of SKUs
////////////////////
Language();
////////////////////////////////////////
//
// MPC::Config::TypeConstructor
//
DEFINE_CONFIG_DEFAULTTAG();
DECLARE_CONFIG_METHODS();
//
////////////////////////////////////////
};
typedef std::list< Language > LanguageList;
typedef LanguageList::iterator LanguageIter;
typedef LanguageList::const_iterator LanguageIterConst;
////////////////////////////////////////
private:
DECLARE_CONFIG_MAP(Newsver);
MPC::wstring m_strURL;
int m_nFrequency;
bool m_fLoaded;
bool m_fDirty;
LanguageList m_lstLanguages; //list of Languages
SKU* m_data;
public:
Newsver();
////////////////////////////////////////
//
// MPC::Config::TypeConstructor
//
DEFINE_CONFIG_DEFAULTTAG();
DECLARE_CONFIG_METHODS();
//
////////////////////////////////////////
HRESULT Download( /*[in]*/ const MPC::wstring& strNewsverURL );
HRESULT Load( /*[in]*/ long lLCID, /*[in]*/ const MPC::wstring& strSKU );
bool OEMNewsblock( /*[in]*/ size_t nIndex );
size_t get_NumberOfNewsblocks( );
const MPC::wstring* get_NewsblockURL ( /*[in]*/ size_t nIndex );
const MPC::wstring* get_URL ( );
int get_Frequency ( );
};
/////////////////////////////////////////////////////////////////////////////
// Headlines
//
// The Headlines class manipulates the news headlines file (with 1 or more providers headlines)
//
//
// It contains the clases:
// Headline
// Newsblock
//
// the variables:
// Timestamp when was the file created from newsblocks
// Date when was the file modified (and for the UI)
//
// list of Newsblocks
//
//
// and the methods:
// Clear()
// Load( Path )
// Save( Path )
// get_Stream ( Path )
// set_Timestamp()
// get_Timestamp
// get_Number_of_Newsblocks
// check_Number_of_Newsblocks
// Time_To_Update_Newsblock( BOOL )
//
// Add_Provider( Name, URL, PostDate )
// Delete_Provider()
//
// Copy_Newsblock( index, LangSKU, ProvID, Block )
// Add_First_Newsblock( index, LangSKU, BOOL )
//
class Headlines : public MPC::Config::TypeConstructor // hungarian nh
{
public:
//
// The Headline class stores the Headline information from the news headline:
// Icon (path)
// Title
// Link
// Description
// Expires
//
class Headline : public MPC::Config::TypeConstructor
{
DECLARE_CONFIG_MAP(Headline);
public:
MPC::wstring m_strIcon;
MPC::wstring m_strTitle;
MPC::wstring m_strLink;
MPC::wstring m_strDescription;
DATE m_dtExpires;
bool m_fUpdateHeadlines;
////////////////////
Headline( );
Headline( /*[in]*/ const MPC::wstring& strIcon ,
/*[in]*/ const MPC::wstring& strTitle ,
/*[in]*/ const MPC::wstring& strLink ,
/*[in]*/ const MPC::wstring& strDescription ,
/*[in]*/ DATE dtExpires ,
/*[in]*/ bool fUpdateHeadlines);
////////////////////////////////////////
//
// MPC::Config::TypeConstructor
//
DEFINE_CONFIG_DEFAULTTAG();
DECLARE_CONFIG_METHODS();
//
////////////////////////////////////////
};
typedef std::vector< Headline > HeadlineVector;
typedef HeadlineVector::iterator HeadlineIter;
typedef HeadlineVector::const_iterator HeadlineConst;
////////////////////////////////////////
//
// The Newsblock class stores the Provider information from the news headline:
// Provider
// Link
// Icon
// Position
// Timestamp
// Frequency
//
// vector of Headlines
//
class Newsblock : public MPC::Config::TypeConstructor
{
DECLARE_CONFIG_MAP(Newsblock);
private:
void GetFileName( MPC::wstring strURL, MPC::wstring& strFileName );
public:
MPC::wstring m_strProvider;
MPC::wstring m_strLink;
MPC::wstring m_strIcon;
MPC::wstring m_strPosition;
DATE m_dtTimestamp;
int m_nFrequency;
HeadlineVector m_vecHeadlines; //vector of headlines
////////////////////
Newsblock();
////////////////////////////////////////
//
// MPC::Config::TypeConstructor
//
DEFINE_CONFIG_DEFAULTTAG();
DECLARE_CONFIG_METHODS();
//
////////////////////////////////////////
bool TimeToUpdate();
HRESULT Copy( /*[in]*/ const Headlines::Newsblock& block ,
/*[in]*/ const MPC::wstring& strLangSKU ,
/*[in]*/ int nProvID );
};
typedef std::vector< Newsblock > NewsblockVector;
typedef NewsblockVector::iterator NewsblockIter;
typedef NewsblockVector::const_iterator NewsblockIterConst;
////////////////////////////////////////
private:
DECLARE_CONFIG_MAP(Headlines);
DATE m_dtTimestamp;
DATE m_dtDate;
NewsblockVector m_vecNewsblocks; // vector of newsblocks
public:
Headlines();
////////////////////////////////////////
//
// MPC::Config::TypeConstructor
//
DEFINE_CONFIG_DEFAULTTAG();
DECLARE_CONFIG_METHODS();
//
////////////////////////////////////////
HRESULT Clear( );
HRESULT Load ( /*[in]*/ const MPC::wstring& strPath );
HRESULT Save ( /*[in]*/ const MPC::wstring& strPath );
HRESULT get_Stream( /*[in]*/ long lLCID, /*[in]*/ const MPC::wstring& strSKU, /*[in]*/ const MPC::wstring& strPath, /*[out]*/ IUnknown* *pVal );
void set_Timestamp ( );
DATE get_Timestamp ( ) { return m_dtTimestamp; }
size_t get_NumberOfNewsblocks( ) { return m_vecNewsblocks.size(); }
Headlines::Newsblock* get_Newsblock ( /*[in]*/ size_t nBlockIndex );
HRESULT AddNewsblock( /*[in]*/ const Headlines::Newsblock& block, /*[in]*/ const MPC::wstring& strLangSKU );
HRESULT AddHomepageHeadlines( /*[in]*/ const Headlines::Newsblock& block );
};
/////////////////////////////////////////////////////////////////////////////
// UpdateHeadlines
//
// The UpdateHeadlines class loads the UpdateHeadlines.xml file
// that contains update headlines to insert in the news headlines
//
// It defines the classes:
// Headline
// SKU
// Language
//
// and the variables:
//
// list of Languages
//
// functions:
// Load ( LCID, SKU )
// Save ( )
// Add ( LCID, SKU, Icon, Title, Link, #Days )
// Get ( LCID, SKU, list of Headlines )
//
class UpdateHeadlines : public MPC::Config::TypeConstructor // hungarian: uh
{
public:
//
// The Headline class stores the Headline information from the news headline:
// Icon
// Title
// Link
// Expires
//
class Headline : public MPC::Config::TypeConstructor
{
DECLARE_CONFIG_MAP(Headline);
public:
MPC::wstring m_strIcon;
MPC::wstring m_strTitle;
MPC::wstring m_strLink;
MPC::wstring m_strDescription;
DATE m_dtTimeOut;
////////////////////
Headline( );
Headline( /*[in]*/ const MPC::wstring& strIcon ,
/*[in]*/ const MPC::wstring& strTitle ,
/*[in]*/ const MPC::wstring& strLink ,
/*[in]*/ const MPC::wstring& strDescription ,
/*[in]*/ int nDays );
////////////////////////////////////////
//
// MPC::Config::TypeConstructor
//
DEFINE_CONFIG_DEFAULTTAG();
DECLARE_CONFIG_METHODS();
//
////////////////////////////////////////
};
typedef std::vector< Headline > HeadlineVector;
typedef HeadlineVector::iterator HeadlineIter;
typedef HeadlineVector::const_iterator HeadlineConst;
////////////////////////////////////////
//
// The SKU class stores the SKU information:
// SKU Version (Professional, Personal, ...)
//
// vector of Newsfiles
//
class SKU : public MPC::Config::TypeConstructor
{
DECLARE_CONFIG_MAP(SKU);
public:
MPC::wstring m_strSKU;
HeadlineVector m_vecHeadlines; //vector of news files
////////////////////
SKU( );
SKU( /*[in]*/ const MPC::wstring& strSKU );
////////////////////////////////////////
//
// MPC::Config::TypeConstructor
//
DEFINE_CONFIG_DEFAULTTAG();
DECLARE_CONFIG_METHODS();
//
////////////////////////////////////////
};
typedef std::list< SKU > SKUList;
typedef SKUList::iterator SKUIter;
typedef SKUList::const_iterator SKUIterConst;
////////////////////////////////////////
//
// The Language class stores the Language information:
// Language LCID
//
// list of SKUs
//
class Language : public MPC::Config::TypeConstructor
{
DECLARE_CONFIG_MAP(Language);
public:
long m_lLCID;
SKUList m_lstSKUs; //list of SKUs
////////////////////
Language( );
Language( /*[in]*/ long lLCID );
////////////////////////////////////////
//
// MPC::Config::TypeConstructor
//
DEFINE_CONFIG_DEFAULTTAG();
DECLARE_CONFIG_METHODS();
//
////////////////////////////////////////
};
typedef std::list< Language > LanguageList;
typedef LanguageList::iterator LanguageIter;
typedef LanguageList::const_iterator LanguageIterConst;
////////////////////////////////////////
private:
DECLARE_CONFIG_MAP(UpdateHeadlines);
LanguageList m_lstLanguages; //list of Languages
SKU* m_data;
bool m_fLoaded;
bool m_fDirty;
////////////////////
HRESULT Locate( /*[in]*/ long lLCID, /*[in]*/ const MPC::wstring& strSKU, /*[in]*/ bool fCreate );
public:
UpdateHeadlines();
////////////////////////////////////////
//
// MPC::Config::TypeConstructor
//
DEFINE_CONFIG_DEFAULTTAG();
DECLARE_CONFIG_METHODS();
//
////////////////////////////////////////
HRESULT Load( /*[in]*/ long lLCID ,
/*[in]*/ const MPC::wstring& strSKU );
HRESULT Save( );
HRESULT Add ( /*[in]*/ long lLCID ,
/*[in]*/ const MPC::wstring& strSKU ,
/*[in]*/ const MPC::wstring& strIcon ,
/*[in]*/ const MPC::wstring& strTitle ,
/*[in]*/ const MPC::wstring& strDescription ,
/*[in]*/ const MPC::wstring& strLink ,
/*[in]*/ int nTimeOutDays ,
/*[in]*/ DATE dtExpiryDate);
HRESULT AddHCUpdateHeadlines( /*[in]*/ long lLCID ,
/*[in]*/ const MPC::wstring& strSKU ,
/*[in]*/ News::Headlines& nhHeadlines);
HRESULT DoesMoreThanOneHeadlineExist( /*[in]*/ long lLCID,
/*[in]*/ const MPC::wstring& strSKU,
/*[out]*/ bool& fMoreThanOneHeadline,
/*[out]*/ bool& fExactlyOneHeadline);
};
////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// CNewslib
//
// The CNewslib class stores the information in the cached newsset.xml file, that stores the user news settings:
// URL, Frequency (in days) and Timestamp (the time the news headlines were last updated).
//
// Has the following methods:
// Load()
// Restore(LCID)
// Save()
// Time_To_Update_Newsver(BOOL)
// Update_Newsver
// Update_NewsHeadlines
// Update_Newsblocks
//
// get_Headlines_Enabled (BOOL)
// get_News( LCID, SKU, IStream)
// get_Cached_News( LCID, SKU, IStream)
// get_Download_News( LCID, SKU, IStream)
// get_URL
// put_URL
// get_Frequency
// put_Frequency
//
//
class Main : public MPC::Config::TypeConstructor
{
DECLARE_CONFIG_MAP(Main);
MPC::wstring m_strURL;
int m_nFrequency;
DATE m_dtTimestamp;
bool m_fLoaded;
bool m_fDirty;
long m_lLCID;
MPC::wstring m_strSKU;
MPC::wstring m_strLangSKU;
MPC::wstring m_strNewsHeadlinesPath;
bool m_fOnline;
bool m_fConnectionStatusChecked;
////////////////////
HRESULT Init( /*[in]*/ long lLCID, /*[in]*/ BSTR bstrSKU );
public:
Main();
////////////////////////////////////////
//
// MPC::Config::TypeConstructor
//
DEFINE_CONFIG_DEFAULTTAG();
DECLARE_CONFIG_METHODS();
//
////////////////////////////////////////
HRESULT Load ( );
HRESULT Restore( /*[in]*/ long lLCID );
HRESULT Save ( );
bool IsTimeToUpdateNewsver();
HRESULT Update_Newsver ( /*[in/out]*/ Newsver& nwNewsver );
HRESULT Update_NewsHeadlines( /*[in/out]*/ Newsver& nwNewsver, /*[in/out]*/ Headlines& nhHeadlines );
HRESULT Update_NewsBlocks ( /*[in/out]*/ Newsver& nwNewsver, /*[in/out]*/ Headlines& nhHeadlines );
HRESULT get_URL ( /*[out]*/ BSTR *pVal );
HRESULT put_URL ( /*[in ]*/ BSTR newVal );
HRESULT get_Frequency( /*[out]*/ int *pVal );
HRESULT put_Frequency( /*[in ]*/ int newVal );
HRESULT get_Headlines_Enabled( /*[out]*/ VARIANT_BOOL *pVal );
HRESULT get_News ( /*[in]*/ long lLCID, /*[in]*/ BSTR bstrSKU, /*[out]*/ IUnknown* *pVal );
HRESULT get_News_Cached ( /*[in]*/ long lLCID, /*[in]*/ BSTR bstrSKU, /*[out]*/ IUnknown* *pVal );
HRESULT get_News_Download( /*[in]*/ long lLCID, /*[in]*/ BSTR bstrSKU, /*[out]*/ IUnknown* *pVal );
HRESULT AddHCUpdateNews (/*[in ]*/ const MPC::wstring& strNewsHeadlinesPath );
bool CheckConnectionStatus ();
};
////////////////////////////////////////////////////////////////////////////////
HRESULT LoadXMLFile ( /*[in]*/ LPCWSTR szURL, /*[out]*/ CComPtr<IStream>& stream );
HRESULT LoadFileFromServer ( /*[in]*/ LPCWSTR szURL, /*[out]*/ CComPtr<IStream>& stream );
};
#endif // !defined(AFX_NEWSLIB_H__B87C3400_E0B9_48CD_A0A9_0223F4448759__INCLUDED_)