📄 newsgroup.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 + -