📄 cacheman.cpp.svn-base
字号:
CFeedItem *fi = (CFeedItem *) m_ctlCacheItems.GetItemData(hItem);
if (fi != NULL && fi->HasEnclosure()) {
CEnclosureItem *ei = fi->Enclosures.GetHead();
if (IsEnclosureCached(ei->URL)) {
CDeleteItem *di = new CDeleteItem();
di->FileName = GetCacheFile(FILE_TYPE_ENCLOSURE, Config.CacheLocation, ei->URL);
di->HItem = hItem;
DeleteFileList.AddTail(di);
}
FileType = FILE_TYPE_ENCLOSURE;
}
}
void CCacheManEnclosuresPg::DoCacheItems() {
CMainFrame *pMainFrm = (CMainFrame *) AfxGetMainWnd();
pMainFrm->m_wndUpdateBar.EnqueueEnclosures(CacheList);
pMainFrm->m_wndUpdateBar.Start();
}
void CCacheManEnclosuresPg::DoPurgeCache() {
PurgePath = GetCachePath(FILE_TYPE_ENCLOSURE, Config.CacheLocation);
}
/////////////////////////////////////////////////////////////////////////////
// CCacheManPg property page
IMPLEMENT_DYNCREATE(CCacheManPg, CCePropertyPage)
CCacheManPg::CCacheManPg()
: CCePropertyPage(InWideMode() ? CCacheManPg::IDD_WIDE : CCacheManPg::IDD) {
}
CCacheManPg::CCacheManPg(UINT nIDCaption)
: CCePropertyPage(InWideMode() ? CCacheManPg::IDD_WIDE : CCacheManPg::IDD, nIDCaption)
{
//{{AFX_DATA_INIT(CCacheManPg)
//}}AFX_DATA_INIT
m_pProgress = NULL;
}
CCacheManPg::~CCacheManPg()
{
}
void CCacheManPg::DoDataExchange(CDataExchange* pDX) {
LOG0(5, "CCacheManPg::DoDataExchange()");
CCePropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CCacheManPg)
DDX_Control(pDX, IDC_CACHEITEMS, m_ctlCacheItems);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CCacheManPg, CCePropertyPage)
//{{AFX_MSG_MAP(CCacheManPg)
ON_NOTIFY(TVN_ITEMEXPANDING, IDC_CACHEITEMS, OnItemExpanding)
//}}AFX_MSG_MAP
ON_COMMAND(ID_REMOVE, OnRemove)
ON_COMMAND(ID_CACHE, OnCache)
ON_COMMAND(ID_PURGE_CACHE, OnPurgeCache)
ON_COMMAND(ID_SELECT_ALL, OnSelectAll)
ON_MESSAGE(UWM_GROUP_CHECKED, OnGroupChecked)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCacheManPg message handlers
BOOL CCacheManPg::OnInitDialog() {
LOG0(3, "CCacheManPg::OnInitDialog()");
CCePropertyPage::OnInitDialog();
AfxSetResourceHandle(theApp.GetDPISpecificInstanceHandle());
m_ilIcons.Create(IDB_CACHE_ITEMS, SCALEX(16), 0, RGB(255, 0, 255));
AfxSetResourceHandle(AfxGetInstanceHandle());
m_ctlCacheItems.SetImageList(&m_ilIcons, TVSIL_NORMAL);
InsertItems();
UpdateControls();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CCacheManPg::UpdateControls() {
}
void CCacheManPg::DoInsertFeedItem(HTREEITEM hParent, CFeedItem *fi) {
}
void CCacheManPg::DoInsertDelete(HTREEITEM hItem) {
}
void CCacheManPg::DoInsertCache(HTREEITEM hItem) {
CFeedItem *fi = (CFeedItem *) m_ctlCacheItems.GetItemData(hItem);
if (fi != NULL)
CacheList.Add(fi);
}
void CCacheManPg::DoCacheItems() {
}
int CCacheManPg::GetItemImage(CFeedItem *fi) {
return 0;
}
void CCacheManPg::InsertItems() {
LOG0(5, "CCacheManPg::InsertItems()");
// iterate through sites
for (int siteIdx = 0; siteIdx < SiteList.GetCount(); siteIdx++) {
CSiteItem *si = SiteList.GetAt(siteIdx);
HTREEITEM hItem = m_ctlCacheItems.InsertItem(si->Name, ICON_SITE, ICON_SITE);
m_ctlCacheItems.SetItemData(hItem, (DWORD) si);
// insert temporary item
HTREEITEM hChild = m_ctlCacheItems.InsertItem(_T("No items"), hItem);
m_ctlCacheItems.SetItemData(hChild, (DWORD) NULL);
}
}
void CCacheManPg::OnOK() {
LOG0(3, "CCacheManPg::OnOK()");
}
LRESULT CCacheManPg::OnGroupChecked(WPARAM wParam, LPARAM lParam) {
LOG0(5, "CCacheManPg::OnGroupChecked()");
LoadSite((HTREEITEM) lParam);
return 0;
}
void CCacheManPg::ResizeControls() {
LOG0(5, "CCacheManPg::ResizeControls()");
RelayoutDialog(AfxGetInstanceHandle(), GetSafeHwnd(), InWideMode() ?
MAKEINTRESOURCE(IDD_WIDE) :
MAKEINTRESOURCE(IDD));
CRect rc;
GetClientRect(&rc);
m_ctlCacheItems.SetWindowPos(NULL, rc.left, rc.top, rc.Width(), rc.Height(), SWP_NOZORDER);
}
void CCacheManPg::LoadSite(HTREEITEM hItem) {
LOG0(5, "CCacheManPg::LoadSite()");
HTREEITEM hChild = m_ctlCacheItems.GetChildItem(hItem);
if (hChild != NULL && m_ctlCacheItems.GetItemData(hChild) == NULL) {
CSiteItem *si = (CSiteItem *) m_ctlCacheItems.GetItemData(hItem);
si->EnsureSiteLoaded();
// delete temporary child item
m_ctlCacheItems.DeleteItem(m_ctlCacheItems.GetChildItem(hItem));
if (si->Feed != NULL) {
// insert feed items
CFeed *feed = si->Feed;
for (int fiIdx = 0; fiIdx < feed->GetItemCount(); fiIdx++) {
CFeedItem *fi = feed->GetItem(fiIdx);
DoInsertFeedItem(hItem, fi);
}
}
}
}
void CCacheManPg::OnItemExpanding(NMHDR *pnmh, LRESULT *pResult) {
NM_TREEVIEW *pnmtv = (NM_TREEVIEW *) pnmh;
if (pnmtv->itemNew.hItem != NULL) {
LoadSite(pnmtv->itemNew.hItem);
}
*pResult = 0; // Allow the expansion to proceed.
}
// Delete ////
void CCacheManPg::OnRemove() {
LOG0(3, "CCachemanPg::OnRemove()");
if (m_pProgress == NULL) {
// gather files to delete
HTREEITEM hItem = m_ctlCacheItems.GetRootItem();
while (hItem != NULL) {
// child items
HTREEITEM hChild = m_ctlCacheItems.GetChildItem(hItem);
while (hChild != NULL) {
if (m_ctlCacheItems.GetCheck(hChild))
DoInsertDelete(hChild);
hChild = m_ctlCacheItems.GetNextSiblingItem(hChild);
}
hItem = m_ctlCacheItems.GetNextSiblingItem(hItem);
}
//
if (DeleteFileList.GetCount() > 0 && PrssrMessageBox(IDS_CONFIRM_OPERATION, IDS_DELETE_ITEMS, MB_YESNO | MB_ICONSTOP, IDS_DELETE) == IDYES) {
m_pProgress = new CDeleteCacheProgressDlg(this);
m_pProgress->OpenDialog(IDS_DELETING, this);
CloseHandle(CreateThread(NULL, 0, DeleteCacheThreadProc, this, 0, NULL));
}
// remove checks from site items
hItem = m_ctlCacheItems.GetRootItem();
while (hItem != NULL) {
m_ctlCacheItems.SetCheck(hItem, FALSE);
// child items
HTREEITEM hChild = m_ctlCacheItems.GetChildItem(hItem);
while (hChild != NULL) {
m_ctlCacheItems.SetCheck(hChild, FALSE);
hChild = m_ctlCacheItems.GetNextSiblingItem(hChild);
}
hItem = m_ctlCacheItems.GetNextSiblingItem(hItem);
}
}
else {
m_pProgress->SetActiveWindow();
}
}
DWORD CCacheManPg::DeleteThread() {
LOG0(3, "CCacheManPg::DeleteThread() - start");
m_pProgress->SetRange(0, DeleteFileList.GetCount());
int pos = 0;
while (!DeleteFileList.IsEmpty() && !m_pProgress->GetTerminated()) {
CDeleteItem *di = DeleteFileList.RemoveHead();
ClearCacheFile(FileType, Config.CacheLocation, di->FileName);
HTREEITEM hItem = di->HItem;
CFeedItem *fi = (CFeedItem *) m_ctlCacheItems.GetItemData(hItem);
int nImage = GetItemImage(fi);
m_ctlCacheItems.SetItemImage(hItem, nImage, nImage);
pos++;
m_pProgress->SetPos(pos);
delete di;
}
m_pProgress->CloseDialog();
m_pProgress = NULL;
LOG0(3, "CCacheManPg::DeleteThread() - end");
return 0;
}
// Cache ////
void CCacheManPg::OnCache() {
// gather files to cache
HTREEITEM hItem = m_ctlCacheItems.GetRootItem();
while (hItem != NULL) {
// child items
HTREEITEM hChild = m_ctlCacheItems.GetChildItem(hItem);
while (hChild != NULL) {
if (m_ctlCacheItems.GetCheck(hChild))
DoInsertCache(hChild);
hChild = m_ctlCacheItems.GetNextSiblingItem(hChild);
}
hItem = m_ctlCacheItems.GetNextSiblingItem(hItem);
}
DoCacheItems();
// remove checks from site items
hItem = m_ctlCacheItems.GetRootItem();
while (hItem != NULL) {
m_ctlCacheItems.SetCheck(hItem, FALSE);
// child items
HTREEITEM hChild = m_ctlCacheItems.GetChildItem(hItem);
while (hChild != NULL) {
m_ctlCacheItems.SetCheck(hChild, FALSE);
hChild = m_ctlCacheItems.GetNextSiblingItem(hChild);
}
hItem = m_ctlCacheItems.GetNextSiblingItem(hItem);
}
}
// Purge ////
void CCacheManPg::DoPurgeCache() {
}
void CCacheManPg::OnPurgeCache() {
if (PrssrMessageBox(IDS_CONFIRM_OPERATION, IDS_PURGE_CACHE_WARNING, MB_YESNO | MB_ICONSTOP) == IDYES) {
if (m_pPurgeProgress == NULL) {
DoPurgeCache();
m_pPurgeProgress = new CPurgeCacheProgressDlg(this);
m_pPurgeProgress->OpenDialog(IDS_PURGING_CACHE, this);
CloseHandle(CreateThread(NULL, 0, PurgeCacheThreadProc, this, 0, NULL));
}
else {
m_pPurgeProgress->SetActiveWindow();
}
}
}
// TODO: progress
static void DeleteFiles(const CString &dir) {
CString path;
path.Format(_T("%s\\*.*"), dir);
WIN32_FIND_DATA fd;
HANDLE hFind = FindFirstFile(path, &fd);
if (hFind != INVALID_HANDLE_VALUE) {
do {
CString fileNamePath;
fileNamePath.Format(_T("%s\\%s"), dir, CString(fd.cFileName));
if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
DeleteFiles(fileNamePath);
::RemoveDirectory(fileNamePath);
}
else {
::DeleteFile(fileNamePath);
}
} while (FindNextFile(hFind, &fd));
FindClose(hFind);
}
}
DWORD CCacheManPg::PurgeThread() {
LOG0(3, "CCacheManPg::PurgeThread() - start");
DeleteFiles(PurgePath);
m_pPurgeProgress->CloseDialog();
m_pPurgeProgress = NULL;
LOG0(3, "CCacheManPg::DeleteThread() - end");
return 0;
}
// Select All ////
void CCacheManPg::OnSelectAll() {
// remove checks from site items
HTREEITEM hItem = m_ctlCacheItems.GetRootItem();
while (hItem != NULL) {
m_ctlCacheItems.SetCheck(hItem, TRUE);
// child items
HTREEITEM hChild = m_ctlCacheItems.GetChildItem(hItem);
while (hChild != NULL) {
m_ctlCacheItems.SetCheck(hChild, TRUE);
hChild = m_ctlCacheItems.GetNextSiblingItem(hChild);
}
hItem = m_ctlCacheItems.GetNextSiblingItem(hItem);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -