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

📄 newsgroup.cpp

📁 beereader source code
💻 CPP
字号:
// NewsGroup.cpp: implementation of the CNewsGroup class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "BeeReader.h"
#include "NewsGroup.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CNewsGroup::CNewsGroup( CString szName,CString szTagName ) :  CGroup( szName )
{
	m_GroupSaveTag = szTagName;
}

CNewsGroup::~CNewsGroup()
{
	Clear();
}
void CNewsGroup::Clear()
{
	PCHANNELDATA pcd = NULL;
    PGROUPNODE pNode = NULL;

	pNode = m_RootNode.pNextSibling;
	while( pNode )
	{
		pcd = (PCHANNELDATA)pNode->dwData;
		if( pcd ) {
			if( pcd->CreateDate ) delete( pcd->CreateDate );
			delete(pcd);
		}
		pNode = pNode->pNextNode;
	}

	CGroup::Clear();
}

int CNewsGroup::Load()
{

	CString szXml = CNTHelper::GetModuleFileDir()+"\\groups\\"+ m_GroupSaveTag;

	if( !markup.Load( szXml ) ) return 1; //加载失败,可能是不存在此文件,或不是XML格式文件.

	if( !markup.FindElem( _T("groups")) ) return 2; //未找到groups元素,表示该文件不是组群文件.
    
	CString szValue = _T("(Unknown)");
	if( markup.FindChildElem( _T("name") ) )
		szValue = markup.GetChildData();
	m_RootNode.szNodeName = szValue;

	int iRet = PraseGroup( &m_RootNode, NULL );
	
	markup.Close();

	return iRet;	
}

int CNewsGroup::PraseGroup( PGROUPNODE pParentNode , PGROUPNODE pNode )
{
	markup.ResetChildPos();
	markup.IntoElem();

	CString szTagName,szValue;
	PGROUPNODE pChildNode;

	while( markup.NextSlibingElem() )
	{
		szTagName = markup.GetTagName();
		szTagName.MakeLower();

		if( szTagName.Compare( _T("group") ) == 0 ) //组元素
		{
			markup.ResetChildPos(); 
			if( markup.FindChildElem( _T("name")) ) 
			{
				szValue = markup.GetChildData();
				pChildNode = Insert( pParentNode,pNode,szValue,0 );
				if( pChildNode )
				PraseGroup( pChildNode,NULL);
			}
		}
		else if( szTagName.Compare( _T("channel") ) == 0 ) //频道元素
		{
			
			CString szTitle,szLink;
			szTitle.Empty();
			szLink.Empty();
            markup.ResetChildPos(); 
			if( markup.FindChildElem( _T("title") ) )
			{
				szTitle = markup.GetChildData();
                if( markup.FindChildElem( _T("link") ))
					szLink = markup.GetChildData();
                
				if( !szTitle.IsEmpty() && !szLink.IsEmpty() ) 
                {
				   PCHANNELDATA  pcd = new ( CHANNELDATA );
				   pcd->pChannel = NULL;
				   pcd->bInit = FALSE;
				   pcd->szTitle = szTitle;
				   pcd->szLink = szLink;
				   pcd->htItem = NULL;
				   pcd->iUpdateing = 0;
				    
				   if( markup.FindChildElem( _T("cache")))
					   pcd->szCache = markup.GetChildData();
				   if( markup.FindChildElem( _T("createdate")) )
				   {
					   szValue = markup.GetChildData();
					   CStdDate* pDate = new CStdDate();
                       pDate->SetDateTime( szValue );
					   pcd->CreateDate = pDate;
				   }
                 
				   pChildNode = Insert(pParentNode,NULL,szTitle,(DWORD)pcd);

				}
			}
		}

	}

	markup.OutOfElem();

	return 0;
}

BOOL CNewsGroup::Save()
{
	CString szElem;
	CString szXml;
	BOOL bReturn = FALSE;

	markup.SetDoc( _T("<?xml version=\"1.0\" ?> <groups></groups>") );
	markup.FindElem(); 		
	if(!m_RootNode.szNodeName.IsEmpty() )
	    markup.AddChildElem( _T("name"),m_RootNode.szNodeName );

	if( !SaveNode( m_RootNode.pFirstChild ) )
		goto CleanUp;

	szXml = CNTHelper::GetModuleFileDir()+"\\groups\\"+ m_GroupSaveTag;

	if( !markup.Save(szXml) ) goto CleanUp;
	bReturn = TRUE;

CleanUp:
	markup.Close();
	return bReturn;
}

BOOL CNewsGroup::SaveNode(PGROUPNODE pNode)
{
	PGROUPNODE pg = NULL;

	if( !pNode ) return TRUE;

	if( pNode->dwData == 0 ) //频道组
	{
		markup.AddChildElem( _T("group"));
		markup.IntoElem();
		markup.AddChildElem( _T("name"),pNode->szNodeName );
		markup.OutOfElem();
	}
	else //频道
	{
		markup.AddChildElem( _T("channel") );
		PCHANNELDATA pcd = (PCHANNELDATA)pNode->dwData;
		if( pcd )
		{
			markup.IntoElem();
            markup.AddChildElem( _T("title"),pNode->szNodeName );//pcd->szTitle);
			markup.AddChildElem( _T("link"),pcd->szLink );
			markup.AddChildElem( _T("cache"),pcd->szCache );
			markup.AddChildElem( _T("createdate"),CStdDate::GetDateString(pcd->CreateDate->GetDateTime()) );
			markup.OutOfElem();
		}
	}

    if( pNode->pFirstChild )
	{
		markup.IntoElem();
		SaveNode( pNode->pFirstChild );
		markup.OutOfElem();
	}

	if( pNode->pNextSibling != pNode->pParentNode->pFirstChild )
	{
		SaveNode( pNode->pNextSibling );
	}
	
	return TRUE;
}

BOOL CNewsGroup::ReMoveNode( PGROUPNODE pNode,BOOL bChild )
{
    if( !pNode ) return FALSE;

    BOOL bReturn =	CGroup::ReMoveNode(pNode,bChild);

	return bReturn;
}

void CNewsGroup::ReName( PGROUPNODE pNode,CString szNewName )
{
	if( pNode->szNodeName.Compare( szNewName ) != 0 )
	{
		CGroup::ReName(pNode,szNewName);
		Save();
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -