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

📄 rsswriterxml.cpp

📁 beereader source code
💻 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 + -