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

📄 mainfrm.cpp.svn-base

📁 wince c++ 下 开发的 rss 阅读器源代码
💻 SVN-BASE
📖 第 1 页 / 共 5 页
字号:
		PreloadSite(nSite);
	}
	else if (View == ArticleView) {
	}
	else {
		if (Config.ActSiteIdx != nSite) {
			SelectSite(nSite);
			PreloadSite(nSite);
		}
	}
}

//

void CMainFrame::OnToolsSummaryview() {
	LOG0(1, "CMainFrame::OnToolsSummaryview()");

	SwitchView(SummaryView);
	AddSiteToSave(Config.ActSiteIdx);

	UpdateTopBar();
}

void CMainFrame::OnUpdateToolsSummaryview(CCmdUI *pCmdUI) {
	LOG0(5, "CMainFrame::OnUpdateToolsSummaryview()");

	pCmdUI->Enable(!Loading);

	BOOL bCheck = View == SummaryView;
	if (::IsWindow(pCmdUI->m_pOther->GetSafeHwnd()))
		pCmdUI->m_pOther->SendMessage(TB_CHECKBUTTON, pCmdUI->m_nID, MAKELONG(bCheck , 0));
	else
		pCmdUI->SetCheck(bCheck);
}

void CMainFrame::SelectSite(int nSite) {
	LOG0(3, "CMainFrame::SelectSite()");

	if (nSite < -2 || nSite >= SiteList.GetCount())
		nSite = 0;

	Config.ActSiteIdx = nSite;

	if (nSite >= 0 && nSite < SiteList.GetCount()) {
		CSiteItem *si = SiteList.GetAt(nSite);
		if (si->Status == CSiteItem::Empty)
			SetTopBarText(IDS_LOADING, TOPBAR_IMAGE_LOADING);

		// load it in background
		si->EnsureSiteLoaded();
		SaveSiteItemUnreadCount(si, nSite);
		SaveSiteItemFlaggedCount(si, nSite);

		m_wndFeedView.InsertItems(si);
	}
	else if (nSite == SITE_UNREAD) {
		SetTopBarText(IDS_LOADING, TOPBAR_IMAGE_LOADING);

		CWaitCursor wait;
		CFeed *unreadFeed = new CFeed();
		for (int i = 0; i < SiteList.GetCount(); i++) {
			CSiteItem *si = SiteList.GetAt(i);
			if (si->GetUnreadCount() > 0) {
				si->EnsureSiteLoaded();
				CFeed *feed = si->Feed;
				if (feed != NULL) {
					for (int j = 0; j < feed->GetItemCount(); j++) {
						CFeedItem *fi = feed->GetItem(j);
						if (!fi->IsDeleted() && (fi->IsNew() || fi->IsUnread()))
							unreadFeed->Add(fi);
					}
				}
			}
		}

		if (UnreadItems.Feed != NULL) {
			UnreadItems.Feed->Detach();
			delete UnreadItems.Feed;
		}
		UnreadItems.Feed = unreadFeed;
		UnreadItems.Status = CSiteItem::Ok;

		m_wndFeedView.InsertItems(&UnreadItems);
		if (View == FeedView) UpdateSort();
	}
	else if (nSite == SITE_FLAGGED) {
		SetTopBarText(IDS_LOADING, TOPBAR_IMAGE_LOADING);

		CWaitCursor wait;
		CFeed *flaggedFeed = new CFeed();
		for (int i = 0; i < SiteList.GetCount(); i++) {
			CSiteItem *si = SiteList.GetAt(i);
			if (si->GetFlaggedCount() > 0) {
				si->EnsureSiteLoaded();
				CFeed *feed = si->Feed;
				if (feed != NULL) {
					for (int j = 0; j < feed->GetItemCount(); j++) {
						CFeedItem *fi = feed->GetItem(j);
						if (!fi->IsDeleted() && fi->IsFlagged())
							flaggedFeed->Add(fi);
					}
				}
			}
		}

		if (FlaggedItems.Feed != NULL) {
			FlaggedItems.Feed->Detach();
			delete FlaggedItems.Feed;
		}
		FlaggedItems.Feed = flaggedFeed;
		FlaggedItems.Status = CSiteItem::Ok;

		m_wndFeedView.InsertItems(&FlaggedItems);
		if (View == FeedView) UpdateSort();
	}

	UpdateTopBar();
}

void CMainFrame::OnToolsSiteManager() {
	LOG0(1, "CMainFrame::OnToolsSiteManager()");

	// FIXME: vfolder
	CString selRSS;
	int actSite = Config.ActSiteIdx;
	if (actSite >= 0 && actSite < SiteList.GetCount())
		selRSS = SiteList.GetAt(actSite)->Info->XmlUrl;

	CSiteManagerDlg dlg;
	dlg.Syncer = Syncer;
	dlg.Root = SiteList.GetRoot();
	// new items on today
	CRegistry regToday(HKEY_CURRENT_USER, REG_KEY_TODAY);
	dlg.ShowNewChannelsOnToday = regToday.Read(szShowNewChannels, CONFIG_DEFAULT_SHOWNEWCHANNELS);

	if (dlg.DoModal() == IDOK) {
		// merge
		CWaitCursor wait;

		// save the structure
		SiteList.Detach();
		SiteList.CreateFrom(dlg.Root);
		SiteList.SetRoot(dlg.Root);
		SaveSiteList();

		if (SiteList.GetCount() > 0) {
			// update icons for top bar
			m_ilIcons.SetImageCount(TOPBAR_IMAGE_COUNT + SiteList.GetCount());
			for (int i = 0; i < SiteList.GetCount(); i++) {
				CSiteItem *si = SiteList.GetAt(i);
				LoadFaviconForSite(i, si);
			}

			///

			// There was nothing in the sitelist
			if (actSite == -1)
				actSite = 0;	// select the first site
			else if (actSite >= SiteList.GetCount())
				actSite = SiteList.GetCount() - 1;

			if (View == FeedView) {
				if (SiteList.GetAt(actSite)->Info->XmlUrl.CompareNoCase(selRSS) != 0) {
					// site could be moved -> find it!
					for (int item = 0; item < SiteList.GetCount(); item++) {
						if (SiteList.GetAt(item)->Info->XmlUrl.CompareNoCase(selRSS) == 0) {
							// we are successful, the code below will select the site
							actSite = item;
							break;
						}
					}
				}
				SelectSite(actSite);
			}

			Config.ActSiteIdx = actSite;
			Config.SaveUI();

			m_wndSummaryView.SetRedraw(FALSE);
			m_wndSummaryView.DeleteAllItems();
			m_wndSummaryView.InsertSites(&SiteList);
			m_wndSummaryView.SetRedraw(TRUE);
			m_wndSummaryView.UpdateScrollBars();
			m_wndSummaryView.Invalidate();
		}
		else {
			Config.SaveUI();

			SwitchView(SummaryView);
			m_wndSummaryView.SetRedraw(FALSE);
			m_wndSummaryView.DeleteAllItems();
			m_wndSummaryView.InsertSites(&SiteList);
			m_wndSummaryView.SetRedraw(TRUE);
			m_wndSummaryView.UpdateScrollBars();
			m_wndSummaryView.Invalidate();
		}

		UpdateTopBar();

		NotifyTodayPlugin(ReloadSubscriptionsMessage, -1);
	}
	else {
		dlg.Root->Destroy();
		delete dlg.Root;
	}

	UpdateMenu();
}

void CMainFrame::OnUpdateToolsSiteManager(CCmdUI *pCmdUI) {
	LOG0(5, "CMainFrame::OnUpdateToolsSiteManager()");

	pCmdUI->Enable(!Loading && !m_wndUpdateBar.IsUpdating());
}

void CMainFrame::OnToolsKeywordManager() {
	LOG0(1, "CMainFrame::OnToolsKeywordManager()");

	CKeywordManagerDlg dlg;

	for (int i = 0; i < Config.Keywords.GetSize(); i++)
		dlg.Keywords.Add(Config.Keywords[i]);

	if (dlg.DoModal() == IDOK) {
		// save keywords
		Config.Keywords.RemoveAll();
		for (int i = 0; i < dlg.Keywords.GetSize(); i++)
			Config.Keywords.Add(dlg.Keywords.GetAt(i));

		Config.SaveKeywords();
	}
}

void CMainFrame::OnUpdateToolsKeywordManager(CCmdUI *pCmdUI) {
	LOG0(5, "CMainFrame::OnUpdateToolsKeywordManager()");

	pCmdUI->Enable(!Loading);
}

void CMainFrame::OnToolsOptions() {
	LOG0(1, "CMainFrame::OnToolsOptions()");

	int oldUpdateInterval = Config.UpdateInterval;
	BOOL oldTimeUpdate = Config.TimeUpdate;
	SYSTEMTIME oldUat = Config.UpdateAtTime;

	COptGeneralPg pgGeneral;
	COptCachePg pgCache;
	COptRetrievalPg pgRetreival;
	COptSyncPg pgSync;
	COptConnectionPg pgConnection;
	COptAppearancePg pgAppearance;

	CCePropertySheet sheet(IDS_OPTIONS);
	sheet.AddPage(&pgGeneral);
	sheet.AddPage(&pgCache);
	sheet.AddPage(&pgRetreival);
	sheet.AddPage(&pgSync);
	sheet.AddPage(&pgConnection);
	sheet.AddPage(&pgAppearance);
	sheet.SetMenu(IDR_OPTIONS);

	if (sheet.DoModal()) {
		Config.Save();
		Config.SaveProxyProfiles();
		Appearance.Save();

		SetupCradlingEvent(Config.CheckOnCradling);

		// setup periodical update
		if (oldUpdateInterval != Config.UpdateInterval) {
			SYSTEMTIME st;
			GetLocalTime(&st);

			if (Config.UpdateInterval > 0) {
				AddSeconds(st, 60 * Config.UpdateInterval);
				SetupUpdateEvent(_T("/periodic"), TRUE, &st);			// set the event up
			}
			else
				SetupUpdateEvent(_T("/periodic"), FALSE, NULL);			// delete the event
		}

		// setup daily event
		if (oldTimeUpdate != Config.TimeUpdate ||
			oldUat.wHour != Config.UpdateAtTime.wHour || oldUat.wMinute != Config.UpdateAtTime.wMinute || oldUat.wSecond != Config.UpdateAtTime.wSecond)
		{
			SYSTEMTIME st;
			GetLocalTime(&st);

			SYSTEMTIME uat = st;
			uat.wHour = Config.UpdateAtTime.wHour;
			uat.wMinute = Config.UpdateAtTime.wMinute;
			uat.wSecond = Config.UpdateAtTime.wSecond;

			FILETIME uatFt, localFt;
			SystemTimeToFileTime(&st, &localFt);
			SystemTimeToFileTime(&uat, &uatFt);

			if (CompareFileTime(&uatFt, &localFt) < 0)
				AddSeconds(uat, 60 * 60 * 24);			// 1 day

			if (Config.TimeUpdate)
				SetupUpdateEvent(_T("/daily"), TRUE, &uat);				// set the event up
			else
				SetupUpdateEvent(_T("/daily"), FALSE, NULL);			// delete the event
		}

		delete Syncer;
		CreateSyncer();

		//
		NotifyTodayPlugin(ReadConfigMessage);

		m_wndFeedView.m_bWrapTitles = Config.WrapTitles;
		m_wndFeedView.CreateFonts();
		m_wndFeedView.UpdateItemHeights();
		m_wndFeedView.UpdateScrollBars();

		m_wndSummaryView.SetItemHeight();
		m_wndSummaryView.UpdateItemHeight();
	}
}

void CMainFrame::OnToolsErrors() {
	LOG0(1, "CMainFrame::OnToolsErrors()");

	CErrorsDlg dlgError(this);
	dlgError.DoModal();

	if (dlgError.Retry) {
		Errors.Lock();
		POSITION pos = Errors.GetFirstPos();
		while (pos != NULL) {
			CErrorItem *ei = Errors.GetNext(pos);

			switch (ei->Type) {
				case CErrorItem::Site:
					if (ei->SiteIdx != SITE_INVALID)
						m_wndUpdateBar.EnqueueSite(SiteList.GetAt(ei->SiteIdx), ei->UpdateOnly);
					break;

				case CErrorItem::File:
					if (ei->FileType == FILE_TYPE_HTML) {
						if (ei->SiteIdx != SITE_INVALID)
							m_wndUpdateBar.EnqueueHtml(ei->Url, SiteList.GetAt(ei->SiteIdx));			// need to use rewriting
					}
					else
						m_wndUpdateBar.EnqueueItem(ei->Url, ei->FileType);
					break;
			}
		}
		Errors.Cleanup();
		Errors.Unlock();

		m_wndUpdateBar.Start();
		m_wndUpdateBar.Redraw();
		UpdateMenu();
	}
	else {
	}

	if (!m_wndUpdateBar.IsUpdating() && m_wndUpdateBar.IsWindowVisible()) {
		// hide update bar
		ShowControlBar(&m_wndUpdateBar, FALSE, FALSE);
	}

	m_wndUpdateBar.ErrorCount = Errors.GetCount();
	m_wndUpdateBar.Invalidate();
}

void CMainFrame::OnToolsMarkAllRead() {
	if (View == FeedView) {
		m_wndFeedView.MarkAllRead();

		UpdateTopBar();
	}
}

void CMainFrame::OnUpdateToolsMarkAllRead(CCmdUI *pCmdUI) {
	pCmdUI->Enable(!Loading);
}

void CMainFrame::OnToolsMarkAllUnread() {
	if (View == FeedView) {
		m_wndFeedView.MarkAllUnread();

		UpdateTopBar();
	}
}

void CMainFrame::OnUpdateToolsMarkAllUnread(CCmdUI *pCmdUI) {
	pCmdUI->Enable(!Loading);
}

void CMainFrame::OnToolsUpdateAllChannels() {
	LOG0(1, "CMainFrame::OnToolsUpdateAllChannels()");

	if (!CheckCachePresence()) {
		m_wndUpdateBar.ShowError(IDS_CACHE_NOT_AVAILABLE);
		return;
	}

	if (!CheckOnlineMode())
		return;

	CList<CSiteItem *, CSiteItem *> sites;
	for (int i = 0; i < SiteList.GetCount(); i++)
		sites.AddTail(SiteList.GetAt(i));
	m_wndUpdateBar.EnqueueSites(sites, FALSE);
	m_wndUpdateBar.Redraw();
	m_wndUpdateBar.Start();
	UpdateMenu();
}

void CMainFrame::OnUpdateToolsUpdateAllChannels(CCmdUI *pCmdUI) {
	LOG0(5, "CMainFrame::OnUpdateToolsUpdateAllChannels()");

	pCmdUI->Enable(!Loading && !m_wndUpdateBar.IsUpdating() && SiteList.GetCount() > 0);
}

void CMainFrame::OnToolsUpdateChannels() {
	LOG0(1, "CMainFrame::OnToolsUpdateChannels()");

	if (!CheckCachePresence()) {
		m_wndUpdateBar.ShowError(IDS_CACHE_NOT_AVAILABLE);
		return;
	}

	CUpdateSitesDlg dlg(this);
	if (dlg.DoModal() == IDOK) {
		Config.UpdateOnly = dlg.m_bUpdateOnly;
		Config.SaveUI();

		if (!CheckOnlineMode())
			return;
		m_wndUpdateBar.EnqueueSites(dlg.m_oUpdateSites, Config.UpdateOnly);
		m_wndUpdateBar.Redraw();
		m_wndUpdateBar.Start();
		UpdateMenu();
	}
}

void CMainFrame::OnUpdateToolsUpdateChannels(CCmdUI *pCmdUI) {
	LOG0(5, "CMainFrame::OnUpdateToolsUpdateChannels()");

	pCmdUI->Enable(!Loading && !m_wndUpdateBar.IsUpdating() && SiteList.GetCount() > 0);
}

LRESULT CMainFrame::OnShowUpdateBar(WPARAM wParam, LPARAM lParam) {
	LOG0(3, "CMainFrame::OnShowUpdateBar()");

	if (wParam == TRUE)
		ShowControlBar(&m_wndUpdateBar, TRUE, FALSE);
	else
		ShowControlBar(&m_wndUpdateBar, FALSE, FALSE);

	OnSetFocus(NULL);

	return 0;
}

LRESULT CMainFrame::OnUpdateFeed(WPARAM wParam, LPARAM lParam) {
	LOG0(3, "CMainFrame::OnUpdateFeed()");

	CSiteItem *si = (CSiteItem *) lParam;
	if (View == FeedView) {
		// reflect changes
		if (si != NULL) {
			if (Config.ActSiteIdx == SITE_UNREAD) {

⌨️ 快捷键说明

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