📄 cacheman.cpp.svn-base
字号:
/**
* 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 + -