?? rsswriterxml.cpp
字號:
// RSSWriterXML.cpp: implementation of the CRSSWriterXML class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "RSSWriterXML.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CRSSWriterXML::CRSSWriterXML()
{
}
CRSSWriterXML::~CRSSWriterXML()
{
}
//將頻道數據保存到緩沖區中。
BOOL CRSSWriterXML::Save( CRSSChannel* pChannel,CString szGUID)
{
return WriteChannel(pChannel,szGUID,FALSE);
}
//將頻道數據生成頻道Feed文件。
BOOL CRSSWriterXML::Write( CRSSChannel* pChannel,CString szURL)
{
return WriteChannel(pChannel,szURL,TRUE);
}
BOOL CRSSWriterXML::WriteChannel( CRSSChannel* pChannel,CString szURL,BOOL bCreate )
{
if( !pChannel ) return FALSE;
if( szURL.IsEmpty() ) return FALSE;
SendStatusMessage(pChannel,SM_SAVECACHE_START);
markup.SetDoc( _T("<?xml version=\"1.0\" ?><RSS version=\"2.0\"></RSS>") );
SendStatusMessage(pChannel,SM_SAVECACHE_CHE);
markup.FindElem();
markup.AddChildElem( _T("channel") );
markup.IntoElem();
if( pChannel->GetTitle() != _T("") )
markup.AddChildElem( _T("title"),pChannel->GetTitle());
if( pChannel->GetLink() != _T("") )
markup.AddChildElem(_T("link"),pChannel->GetLink() );
if( pChannel->GetDescription() != _T("") )
markup.AddChildElem( _T("description"),pChannel->GetDescription() );
markup.Save(szURL);
if( pChannel->GetLanguage() != _T("") )
markup.AddChildElem(_T("language"),pChannel->GetLanguage() );
if( pChannel->GetCopyright() != _T("") )
markup.AddChildElem(_T("copyright"),pChannel->GetCopyright());
if( pChannel->GetManagingEditor() != _T("") )
markup.AddChildElem(_T("managingEditor"),pChannel->GetManagingEditor() );
if( pChannel->GetWebMaster() != _T("") )
markup.AddChildElem(_T("webMaster"),pChannel->GetWebMaster());
if( pChannel->GetPubDate() )
markup.AddChildElem(_T("pubDate"),CStdDate::GetDateString(pChannel->GetPubDate()->GetDateTime()) );
if( pChannel->GetLastBuildDate() )
markup.AddChildElem(_T("lastBuildDate"),CStdDate::GetDateString(pChannel->GetLastBuildDate()->GetDateTime()) );
if( pChannel->GetCategory(TRUE) )
WriteCategory( pChannel) ;
if( pChannel->GetGenerator() != _T("") )
markup.AddChildElem(_T("generator"),pChannel->GetGenerator() );
if( pChannel->GetDocs() != _T("") )
markup.AddChildElem(_T("docs"),pChannel->GetDocs() );
if( pChannel->GetCloud() )
WriteCloud( pChannel);
if( pChannel->GetTTL() != 60 )
{
CString szTemp;
szTemp.Format("%d",pChannel->GetTTL());
markup.AddChildElem(_T("ttl"),szTemp );
}
if( pChannel->GetImage() )
WriteImage( pChannel);
if( pChannel->GetRating() != _T("") )
markup.AddChildElem(_T("rating"),pChannel->GetRating());
if( pChannel->GetTextInput())
WriteTextInput( pChannel);
WriteSkipHours(pChannel);
WriteSkipDays(pChannel);
SendStatusMessage(pChannel,SM_SAVECACHE_ITE);
WriteItem( pChannel,bCreate);
SendStatusMessage(pChannel,SM_SAVECACHE_SAVE);
BOOL bResult = markup.Save(szURL);
markup.Close();
SendStatusMessage(pChannel,SM_SAVECACHE_END);
if( bResult )
SendStatusMessage(pChannel,SM_SAVECACHE_OK);
else
SendStatusMessage(pChannel,SM_SAVECACHE_ERR);
return bResult;
}
BOOL CRSSWriterXML::WriteItem( CRSSChannel* pChannel,BOOL bCreate )
{
CRSSItem* pItem = NULL;
pItem = pChannel->GetItem(TRUE);
while( pItem )
{
markup.AddChildElem(_T("item"),_T(""));
markup.IntoElem();
if( pItem->GetTitle() != _T("") )
markup.AddChildElem(_T("title"),pItem->GetTitle());
if( pItem->GetLink() != _T("") )
markup.AddChildElem(_T("link"),pItem->GetLink());
if( pItem->GetDescription() != _T("") )
markup.AddChildElem(_T("description"),pItem->GetDescription());
if( pItem->GetAuthor() != _T("") )
markup.AddChildElem(_T("author"),pItem->GetAuthor());
if( pItem->GetCategory(TRUE) )
WriteCategory(pItem);
if( pItem->GetComments() != _T("") )
markup.AddChildElem(_T("comments"),pItem->GetComments());
if( pItem->GetEnclosure() )
WriteEnclosure(pItem);
if( pItem->GetGuid() )
WriteGuid(pItem);
if( pItem->GetPubDate() )
markup.AddChildElem(_T("pubDate"),CStdDate::GetDateString( pItem->GetPubDate()->GetDateTime()));
if( pItem->GetSource() )
WriteSource(pItem);
if( !bCreate ) //保存本地緩沖.
{
CString szStatus;
if( pItem->GetReadStatus() ) szStatus = _T("True");
else szStatus = _T("False");
markup.AddChildElem(_T("readStatus"),szStatus);
if( pItem->GetRedFlag() ) szStatus = _T("True");
else szStatus = _T("False");
markup.AddChildElem(_T("RedFlag"),szStatus);
if( pItem->GetRetakeDate())
markup.AddChildElem(_T("RetakeDate"),CStdDate::GetDateString( pItem->GetRetakeDate()->GetDateTime()));
}
markup.OutOfElem();
pItem = pChannel->GetItem(FALSE);
}
return TRUE;
}
BOOL CRSSWriterXML::WriteCategory( CRSSChannel* pChannel )
{
CRSSCategory* pcat = pChannel->GetCategory(TRUE);
while( pcat )
{
markup.AddChildElem(_T("category"),pcat->GetText());
if( pcat->GetDomain() != _T("") )
markup.AddChildAttrib(_T("domain"),pcat->GetDomain());
pcat = pChannel->GetCategory(FALSE);
}
return TRUE;
}
BOOL CRSSWriterXML::WriteCategory( CRSSItem* pItem )
{
CRSSCategory* pcat = pItem->GetCategory(TRUE);
while( pcat )
{
markup.AddChildElem(_T("category"),pcat->GetText());
if( pcat->GetDomain() != _T("") )
markup.AddChildAttrib(_T("domain"),pcat->GetDomain());
pcat = pItem->GetCategory(FALSE);
}
return TRUE;
}
BOOL CRSSWriterXML::WriteCloud( CRSSChannel* pChannel )
{
CRSSCloud* pCloud = pChannel->GetCloud();
if( pCloud )
{
markup.AddChildElem(_T("cloud"),_T(""));
if( pCloud->GetDomain() != _T("") )
markup.AddChildAttrib(_T("domain"),pCloud->GetDomain());
if( pCloud->GetPort() > 0 )
markup.AddChildAttrib( _T("port"),pCloud->GetPort());
if( pCloud->GetPath() != _T("") )
markup.AddChildAttrib( _T("path"),pCloud->GetPath());
if( pCloud->GetRegisterProcedure() != _T("") )
markup.AddChildAttrib(_T("registerProcedure"),pCloud->GetRegisterProcedure());
if( pCloud->GetProtocal() != _T("") )
markup.AddChildAttrib( _T("protocol"),pCloud->GetProtocal());
}
return TRUE;
}
BOOL CRSSWriterXML::WriteImage( CRSSChannel* pChannel)
{
CRSSImage* pImage = pChannel->GetImage();
if( pImage )
{
markup.AddChildElem(_T("image"),_T(""));
markup.IntoElem();
if( pImage->GetTitle() != _T("") )
markup.AddChildElem(_T("title"),pImage->GetTitle());
if( pImage->GetURL() != _T("") )
markup.AddChildElem(_T("url"),pImage->GetURL());
if( pImage->GetLink() != _T("") )
markup.AddChildElem(_T("link"),pImage->GetLink());
if( pImage->GetDescription() != _T("") )
markup.AddChildElem(_T("description"),pImage->GetDescription());
if( pImage->GetWidth() > 0 )
markup.AddChildAttrib(_T("width"),pImage->GetWidth() );
if( pImage->GetHeight() > 0 )
markup.AddChildAttrib(_T("hight"),pImage->GetHeight() );
markup.OutOfElem();
}
return TRUE;
}
BOOL CRSSWriterXML::WriteTextInput( CRSSChannel* pChannel )
{
CRSSTextInput* pti = pChannel->GetTextInput();
if( pti )
{
markup.AddChildElem(_T("textInput"),pti->GetText());
markup.IntoElem();
if( pti->GetTitle() != _T("") )
markup.AddChildElem(_T("title"),_T(""));
if( pti->GetDescription() != _T("") )
markup.AddChildElem(_T("description"),pti->GetDescription());
if( pti->GetText() != _T("") )
markup.AddChildElem(_T("name"),pti->GetText());
if( pti->GetURL() != _T("") )
markup.AddChildElem(_T("link"),pti->GetURL());
markup.OutOfElem();
}
return TRUE;
}
BOOL CRSSWriterXML::WriteSkipHours( CRSSChannel* pChannel )
{
CString szTemp;
for( int i=0;i<24;i++)
{
if( pChannel->GetSkipHours(i) )
{
szTemp.Format("%d",i);
markup.AddChildElem(_T("skipHours"),szTemp );
}
}
return TRUE;
}
BOOL CRSSWriterXML::WriteSkipDays( CRSSChannel* pChannel)
{
CString szWeek[7] = { _T("Monday"),_T("Tuesday"),_T("Wednesday"),
_T("Thursday"),_T("Friday"),_T("Saturday"),_T("Sunday") };
for( int i=0;i<7;i++)
{
if( pChannel->GetSkipDays(i) )
{
markup.AddChildElem(_T("skipDays"),szWeek[i]);
}
}
return TRUE;
}
BOOL CRSSWriterXML::WriteEnclosure( CRSSItem* pItem )
{
CRSSEnclosure* pen = pItem->GetEnclosure();
if( pen )
{
markup.AddChildElem(_T("enclosure"),_T(""));
if( pen->GetURL() != _T("") )
markup.AddChildAttrib(_T("url"),pen->GetURL());
if( pen->GetLength() > 0 )
markup.AddChildAttrib(_T("length"),pen->GetLength());
if( pen->GetType() != _T("") )
markup.AddChildAttrib(_T("type"),pen->GetType() );
}
return TRUE;
}
BOOL CRSSWriterXML::WriteGuid( CRSSItem* pItem )
{
CRSSGuid* pGuid = pItem->GetGuid();
if( pGuid )
{
markup.AddChildElem(_T("guid"),pGuid->GetText());
markup.AddChildAttrib(_T("isPermaLink"),pGuid->GetIsPermaLinkString());
}
return TRUE;
}
BOOL CRSSWriterXML::WriteSource( CRSSItem* pItem )
{
CRSSSource* pSource = pItem->GetSource();
if( pSource )
{
markup.AddChildElem(_T("source"),pSource->GetText());
if( pSource->GetURL() != _T("") )
markup.AddChildAttrib(_T("url"),pSource->GetURL());
}
return TRUE;
}
void CRSSWriterXML::SendStatusMessage(CRSSChannel *pChannel, int iCode, int iSubCode)
{
if( m_hCallbackWnd )
{
WPARAM wParam = MAKEWPARAM((WORD)iCode,(WORD)iSubCode);
::SendMessage( m_hCallbackWnd,WM_RSS_WRITE_STATUS,wParam,(LPARAM)pChannel);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -