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

📄 cacheman.cpp.svn-base

📁 wince c++ 下 开发的 rss 阅读器源代码
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
/**
 *  CacheMan.cpp
 *
 *  Copyright (C) 2008  David Andrs <pda@jasnapaka.com>
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */

#include "StdAfx.h"
#include "prssr.h"
#include "CacheMan.h"
#include "MainFrm.h"

#include "Config.h"
#include "Site.h"
//#include "ClearCacheDlg.h"
#include "../share/helpers.h"
#include "ProgressDlg.h"
#include "Errors.h"

#ifdef MYDEBUG
#undef THIS_FILE
static TCHAR THIS_FILE[] = _T(__FILE__);
#include "debug\crtdbg.h"
#define new MYDEBUG_NEW
#endif

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

//
// Cache Manager icons
//

// site
#define ICON_SITE						0
// html
#define ICON_HTML						1
#define ICON_HTML_CACHED				2
// enclosures
// sound
#define ICON_AUDIO						3
#define ICON_AUDIO_CACHED				4
// video
#define ICON_VIDEO						5
#define ICON_VIDEO_CACHED				6
// image
#define ICON_IMAGE						7
#define ICON_IMAGE_CACHED				8
// other
#define ICON_OTHER						9
#define ICON_OTHER_CACHED				10


///////////////////////////////////////////////////////////////////////////////

DWORD WINAPI DeleteCacheThreadProc(LPVOID lpParameter) {
	CCacheManPg *dlg = (CCacheManPg *) lpParameter;
	return dlg->DeleteThread();
}

///////////////////////////////////////////////////////////////////////////////

class CDeleteCacheProgressDlg : public CProgressDlg {
public:
	CDeleteCacheProgressDlg(CCacheManPg *parent);
	virtual ~CDeleteCacheProgressDlg();

protected:
	CCacheManPg *Parent;

    //{{AFX_MSG(CDeleteCacheProgressDlg)
	afx_msg void OnTimer(UINT nIDEvent);
	//}}AFX_MSG
	virtual BOOL OnInitDialog();

	virtual void OnCancel();

	DECLARE_MESSAGE_MAP()

	friend class CCacheManPg;
};

CDeleteCacheProgressDlg::CDeleteCacheProgressDlg(CCacheManPg *parent) {
	Parent = parent;
}

CDeleteCacheProgressDlg::~CDeleteCacheProgressDlg() {
}

BEGIN_MESSAGE_MAP(CDeleteCacheProgressDlg, CProgressDlg)
	//{{AFX_MSG_MAP(CDeleteCacheProgressDlg)
	ON_WM_TIMER()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

BOOL CDeleteCacheProgressDlg::OnInitDialog() {
	LOG0(3, "CDeleteCacheProgressDlg::OnInitDialog()");

	CProgressDlg::OnInitDialog();

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CDeleteCacheProgressDlg::OnTimer(UINT nIDEvent) {

	CWnd::OnTimer(nIDEvent);
}

void CDeleteCacheProgressDlg::OnCancel() {
	LOG0(3, "CDeleteCacheProgressDlg::OnCancel()");

	CProgressDlg::OnCancel();
}


///////////////////////////////////////////////////////////////////////////////

DWORD WINAPI PurgeCacheThreadProc(LPVOID lpParameter) {
	CCacheManPg *dlg = (CCacheManPg *) lpParameter;
	return dlg->PurgeThread();
}

///////////////////////////////////////////////////////////////////////////////

class CPurgeCacheProgressDlg : public CProgressDlg {
public:
	CPurgeCacheProgressDlg(CCacheManPg *parent);
	virtual ~CPurgeCacheProgressDlg();

protected:
	CCacheManPg *Parent;

    //{{AFX_MSG(CPurgeCacheProgressDlg)
	afx_msg void OnTimer(UINT nIDEvent);
	//}}AFX_MSG
	virtual BOOL OnInitDialog();

	virtual void OnCancel();

	DECLARE_MESSAGE_MAP()

	friend class CCacheManPg;
};

CPurgeCacheProgressDlg::CPurgeCacheProgressDlg(CCacheManPg *parent) {
	Parent = parent;
}

CPurgeCacheProgressDlg::~CPurgeCacheProgressDlg() {
}

BEGIN_MESSAGE_MAP(CPurgeCacheProgressDlg, CProgressDlg)
	//{{AFX_MSG_MAP(CPurgeCacheProgressDlg)
	ON_WM_TIMER()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

BOOL CPurgeCacheProgressDlg::OnInitDialog() {
	LOG0(3, "CPurgeCacheProgressDlg::OnInitDialog()");

	CProgressDlg::OnInitDialog();

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CPurgeCacheProgressDlg::OnTimer(UINT nIDEvent) {

	CWnd::OnTimer(nIDEvent);
}

void CPurgeCacheProgressDlg::OnCancel() {
	LOG0(3, "CPurgeCacheProgressDlg::OnCancel()");

	CProgressDlg::OnCancel();
}

///////////////////////////////////////////////////////////////////////////////

CCacheTreeCtrl::CCacheTreeCtrl() {
}

BEGIN_MESSAGE_MAP(CCacheTreeCtrl, CCeTreeCtrl)
	//{{AFX_MSG_MAP(CCacheTreeCtrl)
	ON_WM_LBUTTONDOWN()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

void CCacheTreeCtrl::OnLButtonDown(UINT nFlags, CPoint point) {
	LOG0(5, "CCacheTreeCtrl::OnLButtonDown()");

	UINT uFlags = 0;
	HTREEITEM hItem = HitTest(point, &uFlags);

	if (hItem != NULL && (uFlags & TVHT_ONITEMSTATEICON)) {
		int nImg, nSelImg;
		GetItemImage(hItem, nImg, nSelImg);

		// checked -> unchecked, unchecked -> checked
		BOOL check;
		if (GetCheck(hItem)) {
			// set the check for all childs
			check = FALSE;
		}
		else {
			// uncheck all childs
			check = TRUE;
		}

		if (nImg == ICON_SITE) {
			SetCheck(hItem, check);
			GetParent()->SendMessage(UWM_GROUP_CHECKED, (WPARAM) 0, (LPARAM) hItem);

			HTREEITEM hChild = GetChildItem(hItem);
			while (hChild != NULL) {
				SetCheck(hChild, check);
				hChild = GetNextSiblingItem(hChild);
			}
		}
		else {
			SetCheck(hItem, check);
		}

		return;
	}

	CTreeCtrl::OnLButtonDown(nFlags, point);
}

///////////////////////////////////////////////////////////////////////////////

CCacheManager::CCacheManager(CWnd *pParentWnd/* = NULL*/) :
	CCePropertySheet(IDS_CACHE_MANAGER, pParentWnd)
{
	LOG0(5, "CCacheManager::CCacheManager()");

	AddPage(&m_pgCache);
	AddPage(&m_pgEnclosures);
	SetMenu(IDR_CACHE_MANAGER);
}

CCacheManager::~CCacheManager() {
}

BEGIN_MESSAGE_MAP(CCacheManager, CCePropertySheet)
	//{{AFX_MSG_MAP(CCacheManager)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

BOOL CCacheManager::OnInitDialog() {
	LOG0(3, "CCacheManager::OnInitDialog()");

	BOOL bResult = CCePropertySheet::OnInitDialog();

	return bResult;
}

BOOL CCacheManager::OnCommand(WPARAM wParam, LPARAM lParam) {
	LOG0(3, "CCacheManager::OnCommand()");

	return CCePropertySheet::OnCommand(wParam, lParam);
}

///////////////////////////////////////////////////////////////////////////////

CCacheManHtmlPg::CCacheManHtmlPg() : CCacheManPg(IDS_CACHE) {
	m_strLocation = GetCachePath(FILE_TYPE_HTML, Config.CacheLocation);
}

BOOL CCacheManHtmlPg::OnInitDialog() {
	CCacheManPg::OnInitDialog();

	return TRUE;
}

int CCacheManHtmlPg::GetItemImage(CFeedItem *fi) {
	LOG0(5, "CCacheManHtmlPg::GetItemImage()");

	int nImage;
	if (IsHTMLCached(fi->Link, TRUE)) {
		nImage = ICON_HTML_CACHED;
	}
	else {
		nImage = ICON_HTML;
	}

	return nImage;
}

void CCacheManHtmlPg::DoInsertFeedItem(HTREEITEM hParent, CFeedItem *fi) {
	LOG0(5, "CCacheManHtmlPg::DoInsertFeedItem()");

	int nImage = GetItemImage(fi);
	HTREEITEM hItem = m_ctlCacheItems.InsertItem(fi->Title, nImage, nImage, hParent);
	m_ctlCacheItems.SetItemData(hItem, (DWORD) fi);
}

void CCacheManHtmlPg::DoInsertDelete(HTREEITEM hItem) {
	LOG0(3, "CCacheManHtmlPg::DoInsertDelete()");

	CFeedItem *fi = (CFeedItem *) m_ctlCacheItems.GetItemData(hItem);
	if (fi != NULL && IsHTMLCached(fi->Link, TRUE)) {
		CDeleteItem *di = new CDeleteItem();
		di->FileName = GetCacheFile(FILE_TYPE_HTML, Config.CacheLocation, fi->Link);
		di->HItem = hItem;
		DeleteFileList.AddTail(di);

		FileType = FILE_TYPE_HTML;
	}
}

void CCacheManHtmlPg::DoCacheItems() {
	CMainFrame *pMainFrm = (CMainFrame *) AfxGetMainWnd();
	pMainFrm->m_wndUpdateBar.EnqueueImages(CacheList);
	pMainFrm->m_wndUpdateBar.EnqueueHtmls(CacheList);
	pMainFrm->m_wndUpdateBar.Start();
}

void CCacheManHtmlPg::DoPurgeCache() {
	PurgePath = GetCachePath(FILE_TYPE_HTML, Config.CacheLocation);
}

/////////////////////////////////////////////////////////////////////////////

CCacheManEnclosuresPg::CCacheManEnclosuresPg() : CCacheManPg(IDS_ENCLOSURES) {
	m_strLocation = GetCachePath(FILE_TYPE_ENCLOSURE, Config.CacheLocation);
}

BOOL CCacheManEnclosuresPg::OnInitDialog() {
	CCacheManPg::OnInitDialog();

	return TRUE;
}

int CCacheManEnclosuresPg::GetItemImage(CFeedItem *fi) {
	LOG0(5, "CCacheManEnclosuresPg::GetItemImage()");

	CEnclosureItem *ei = fi->Enclosures.GetHead();

	int nImage;
	switch (ei->Type) {
		case ENCLOSURE_TYPE_AUDIO: nImage = ICON_AUDIO; break;
		case ENCLOSURE_TYPE_VIDEO: nImage = ICON_VIDEO; break;
		case ENCLOSURE_TYPE_IMAGE: nImage = ICON_IMAGE; break;
		default: nImage = ICON_OTHER; break;
	}

	if (IsEnclosureCached(ei->URL)) {
		nImage++;
	}

	return nImage;
}

void CCacheManEnclosuresPg::DoInsertFeedItem(HTREEITEM hParent, CFeedItem *fi) {
	LOG0(5, "CCacheManEnclosuresPg::DoInsertFeedItem()");

	if (fi->HasEnclosure()) {
		int nImage = GetItemImage(fi);
		HTREEITEM hItem = m_ctlCacheItems.InsertItem(fi->Title, nImage, nImage, hParent);
		m_ctlCacheItems.SetItemData(hItem, (DWORD) fi);
	}
}

void CCacheManEnclosuresPg::DoInsertDelete(HTREEITEM hItem) {
	LOG0(3, "CCacheManEnclosuresPg::DoInsertDelete()");

⌨️ 快捷键说明

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