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

📄 rsschannel.cpp

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

#include "stdafx.h"
#include "RSSChannel.h"

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

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

CRSSChannel::CRSSChannel() : CRSSElement( _T("channel") )
{
	m_Title = _T("");
	m_URL = _T("");
	m_Description = _T("");
	m_Language = _T("");
    m_Copyright = _T("");
	m_ManagingEditor = _T("");
	m_WebMaster = _T("");
	m_PubDate = NULL;
	m_LastBuildDate = NULL;
	m_Generator = _T("");
	m_Categorys.RemoveAll();
	m_Docs = _T("");
	m_Cloud = NULL;
	m_TTL = 60; //初始化为60分钟。
	m_Image = NULL;
	m_TextInput = NULL;
	m_Rating = _T("");

	m_lastUpdateTime = CTime::GetCurrentTime();

	m_CacheGUID = _T("");
	
	int i;
	for(i=0;i<24;i++ )
		m_SkipHours[i] = FALSE;
    for(i=0;i<7;i++)
		m_SkipDays[i] = FALSE;
	
	m_Items.RemoveAll();	

	m_iCurrentCategory = -1;
	m_iCurrentItem = -1;

	hwndCallback = NULL;
	m_bSaveTag = FALSE;
	m_bRemoveTag = FALSE;

	m_bAutoUpdateTitle = FALSE;
	m_UpdateTimer = 30;
	
	m_ItemCount = 0;
	m_ReadedItems = 0;
	m_RedFlagItems = 0;

}

CRSSChannel::~CRSSChannel()
{
	ClearUp();

	int i;
	CRSSCategory* pcat;
	for( i=0;i<m_Categorys.GetSize();i++)
	{
		pcat = (CRSSCategory*)m_Categorys.GetAt(i);
		ASSERT(pcat);
		delete(pcat);
	}
	m_Categorys.RemoveAll();

	if( m_Image ) delete(m_Image);
	if( m_PubDate ) delete(m_PubDate);
	if( m_LastBuildDate ) delete(m_LastBuildDate);
	if( m_Cloud ) delete( m_Cloud );
	if( m_TextInput ) delete( m_TextInput );
}

void CRSSChannel::ClearUp()
{
	int i = 0;
	CRSSItem* pItem;
	for( i=0;i<m_Items.GetSize();i++)
	{
		pItem = (CRSSItem*)m_Items.GetAt(i);
		ASSERT(pItem);
		delete(pItem);
	}
	m_Items.RemoveAll();

}

int CRSSChannel::AddCategory(CRSSCategory* category)
{
	if( !category ) return -1;
	return m_Categorys.Add( category );
}

BOOL CRSSChannel::RemoveCategory(int iIndex)
{
	if( iIndex >= m_Categorys.GetSize() || iIndex < 0 ) return FALSE;
	CRSSCategory* pcat;
	pcat = (CRSSCategory*)m_Categorys.GetAt(iIndex);
	m_Categorys.RemoveAt(iIndex); 
	delete( pcat );	
	return TRUE;
}

CRSSCategory* CRSSChannel::GetCategory(BOOL bFirst)
{
	if( m_Categorys.GetSize() <= 0 ) return NULL;
	if( bFirst )	
		m_iCurrentCategory = 0;
	else
		m_iCurrentCategory++;
	if( m_Categorys.GetSize() <= m_iCurrentCategory )
		return NULL;
	return (CRSSCategory*)m_Categorys.GetAt( m_iCurrentCategory );
}

int CRSSChannel::AddItem(CRSSItem* pItem)
{
	if( !pItem ) return -1;

	CRSSItem* pItem1;
	for( int i=0; i<m_Items.GetSize(); i++ )
	{
		pItem1 = (CRSSItem*)m_Items.GetAt(i);
		ASSERT(pItem1);
		if( pItem1->GetLink()==pItem->GetLink() && pItem1->GetTitle() == pItem->GetTitle() )
		{
		    if( pItem->GetReadStatus() )
				pItem1->SetReadStatus(TRUE);
			if( pItem->GetRetakeDate()->GetDateTime() < pItem1->GetRetakeDate()->GetDateTime() )
				pItem1->GetRetakeDate()->SetDateTime( pItem->GetRetakeDate()->GetDateTime() ); 
			delete(pItem);
			return i;
		}
	}
	m_ItemCount++;
	return m_Items.Add( pItem );
}

BOOL CRSSChannel::RemoveItem(int iIndex)
{
	if( iIndex >= m_Items.GetSize() || iIndex < 0 ) return FALSE;
	CRSSItem* pItem;
	pItem = (CRSSItem*)m_Items.GetAt(iIndex);
	m_Items.RemoveAt(iIndex); 
	
	m_ItemCount--;
	if( pItem->GetReadStatus() ) m_ReadedItems--;

	delete( pItem );	
	return TRUE;
}

BOOL CRSSChannel::RemoveItem( CRSSItem* pItem )
{
	if( !pItem ) return FALSE;
	CRSSItem* pItem1 = NULL;
	for( int i=0;i<m_Items.GetSize();i++)
	{
	   pItem1 = (CRSSItem*)m_Items.GetAt(i);
	   ASSERT(pItem1);
	   if( pItem1 == pItem )
	   {
	      m_Items.RemoveAt(i); 		 
	      m_ItemCount--;
	      if( pItem->GetReadStatus() ) m_ReadedItems--;
	      delete( pItem );
		  return TRUE;
	   }
	}
	return FALSE;
}

CRSSItem* CRSSChannel::GetItem(BOOL bFirst)
{
	if( m_Items.GetSize() <= 0 ) return NULL;
	if( bFirst )	
		m_iCurrentItem = 0;
	else
		m_iCurrentItem++;
	if( m_Items.GetSize() <= m_iCurrentItem )
		return NULL;
	return (CRSSItem*)m_Items.GetAt( m_iCurrentItem );
}

void CRSSChannel::SetSkipDays(CString day)
{
	if( day.IsEmpty() ) return;
	if( day.CompareNoCase( _T("monday") )==0 )
		m_SkipDays[0] = TRUE;
	else if(day.CompareNoCase( _T("tuesday") )==0 )
		m_SkipDays[1] = TRUE;
	else if(day.CompareNoCase( _T("wednesday") )==0 )
		m_SkipDays[2] = TRUE;
	else if(day.CompareNoCase( _T("thursday") )==0 )
		m_SkipDays[3] = TRUE;
	else if(day.CompareNoCase( _T("friday") )==0 )
		m_SkipDays[4] = TRUE;
	else if(day.CompareNoCase( _T("saturday") )==0 )
		m_SkipDays[5] = TRUE;
	else if(day.CompareNoCase( _T("sunday") )==0 )
		m_SkipDays[1] = TRUE;	
}

BOOL CRSSChannel::GetSkipDays(int day)
{
	if( day < 0 || day > 6 ) return FALSE;
	return m_SkipDays[day];
}

void CRSSChannel::SetSkipHours(CString hour)
{
	if( hour.IsEmpty() ) return;
	int iHours = atoi( (LPTSTR)(LPCTSTR)hour );
	if( iHours < 0 || iHours > 23 ) return;
	m_SkipHours[iHours] = TRUE;
}

BOOL CRSSChannel::GetSkipHours(int hour)
{
	if( hour < 0 || hour >23 ) return FALSE;
	return m_SkipHours[hour];
}

⌨️ 快捷键说明

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