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