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

📄 cacheman.cpp.svn-base

📁 wince c++ 下 开发的 rss 阅读器源代码
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:

	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 + -