亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? updatebar.cpp.svn-base

?? wince c++ 下 開發的 rss 閱讀器源代碼
?? SVN-BASE
?? 第 1 頁 / 共 2 頁
字號:
				// save feed
				CString feedPathName = GetCacheFile(FILE_TYPE_FEED, Config.CacheLocation, si->Info->FileName);
				CreatePath(feedPathName);
				si->Feed->Save(feedPathName);

				// set file time
				HANDLE hFile = CreateFile(feedPathName, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
				if (hFile != INVALID_HANDLE_VALUE) {
					FILETIME ftNow;
					SYSTEMTIME stNow;
					GetLocalTime(&stNow);
					SystemTimeToFileTime(&stNow, &ftNow);
					SetFileTime(hFile, NULL, NULL, &ftNow);
					CloseHandle(hFile);
				}

				// notify today plugin
				NotifyTodayPlugin(CheckFeedsMessage);

				// clean items
				ClearImages(itemsToClean);
				ClearHtmlPages(itemsToClean);
				ClearEnclosures(itemsToClean);

				for (i = 0; i < itemsToClean.GetSize(); i++)
					delete itemsToClean[i];

				// check keywords in new items
				for (i = 0; i < newItems.GetSize(); i++)
					newItems.GetAt(i)->SearchKeywords(Config.Keywords);

				// cache
				if (!ui->UpdateOnly) {
					// enqueue items to cache
					if (si->Info->UseGlobalCacheOptions) {
						if (Config.CacheImages) EnqueueImages(newItems);	// cache item images
						if (Config.CacheHtml) EnqueueHtmls(newItems);		// cache HTML content
					}
					else {
						if (si->Info->CacheItemImages) EnqueueImages(newItems);		// cache item images
						if (si->Info->CacheHtml) EnqueueHtmls(newItems);			// cache HTML content
					}

					// cache enclosures
					if (si->Info->CacheEnclosures) EnqueueEnclosures(newItems, si->Info->EnclosureLimit);
				}

				// get favicon if neccessary
				if (si->CheckFavIcon) {
					// temp file name
					CString faviconFileName = GetCacheFile(FILE_TYPE_FAVICON, Config.CacheLocation, si->Info->FileName);
					// get favicon
					if (DownloadFavIcon(si->Feed->HtmlUrl, faviconFileName)) {
						if (frame != NULL) frame->SendMessage(UWM_UPDATE_FAVICON, 0, (LPARAM) si);	// update favicon in GUI
					}

					si->CheckFavIcon = FALSE;
				}

				// send message to update the feed view
				if (frame != NULL) frame->SendMessage(UWM_UPDATE_FEED, 0, (LPARAM) si);

				SaveSiteItemUnreadCount(si, SiteList.GetIndexOf(si));
				SaveSiteItemFlaggedCount(si, SiteList.GetIndexOf(si));
				// process

				NewItemsCount += si->Feed->GetNewCount();
			}
			else {
				if (Downloader->Error == DOWNLOAD_ERROR_DISK_FULL) {
					CErrorItem *ei = new CErrorItem(IDS_DISK_FULL);
					ei->Type = CErrorItem::System;
					Errors.Add(ei);

					Terminate = TRUE;
				}
				else {
					CString sMsg;
					sMsg.Format(_T("%s: %s"), si->Name, sync->GetErrorMsg());
					CErrorItem *ei = new CErrorItem(sMsg);
					ei->Type = CErrorItem::Site;
					ei->SiteIdx = SiteList.GetIndexOf(si);
					ei->UpdateOnly = ui->UpdateOnly;
					Errors.Add(ei);
				}
			}

			delete feed;

			m_ctlProgress.SetStep(1);
			m_ctlProgress.StepIt();
			m_ctlProgress.Redraw(FALSE);
		}
	}
	else {
		Errors.Add(new CErrorItem(IDS_AUTHENTICATION_FAILED));
	}

	EnterCriticalSection(&CSDownloader);
//	delete sync;
//	delete Downloader;
	Downloader = NULL;
	LeaveCriticalSection(&CSDownloader);

	while (!UpdateList.IsEmpty())
		delete UpdateList.RemoveHead();
}

void CUpdateBar::DownloadHtmlPage(CDownloadItem *di) {
	LOG0(1, "CUpdateBar::DownloadHtmlPage()");

	if (FileExists(di->FileName))
		return;						// file already exists

	BOOL ok = FALSE;
	m_ctlProgress.SetRange(0, 150000);

	CString url = di->URL;

	CString tmpFileName = di->FileName + _T(".part");
	Downloader->SetUAString(Config.UserAgent);
	if (Downloader->SaveHttpObject(url, tmpFileName))
		ok = TRUE;
	else {
		if (Downloader->Error != DOWNLOAD_ERROR_DISK_FULL) {
			// optimizing failed -> use original url
			Downloader->Reset();
			if (Config.UseHtmlOptimizer && Downloader->SaveHttpObject(di->URL, tmpFileName))
				ok = TRUE;
		}
	}

	if (ok) {
		if (Downloader->GetMimeType().CompareNoCase(_T("text/html")) == 0) {
			if (!TranslateForOfflineReading(tmpFileName, di->FileName, Downloader->GetCharset()))
				DeleteFile(di->FileName);	
			DeleteFile(tmpFileName);
		}
		else {
			// it was not an HTML page -> move it among enclosures
			CString fileName = GetCacheFile(FILE_TYPE_ENCLOSURE, Config.CacheLocation, di->URL);
			CreatePath(fileName);
			MoveFile(tmpFileName, fileName);

			CString rd = GetCachePath(FILE_TYPE_HTML, Config.CacheLocation);
			RemoveEmptyDirs(tmpFileName, rd);
		}
	}
	else {
		if (Downloader->Error == DOWNLOAD_ERROR_DISK_FULL) {
			CErrorItem *ei = new CErrorItem(IDS_DISK_FULL);
			ei->Type = CErrorItem::System;
			Errors.Add(ei);

			Terminate = TRUE;
		}
		else {
			CString sErrMsg;
			sErrMsg.Format(IDS_ERROR_DOWNLOADING_FILE, di->URL);
			CErrorItem *ei = new CErrorItem(sErrMsg);
			ei->Type = CErrorItem::File;
			ei->SiteIdx = di->SiteIdx;
			ei->Url = di->URL;
			ei->FileType = FILE_TYPE_HTML;
			Errors.Add(ei);
		}
	}
}

void CUpdateBar::DownloadFile(CDownloadItem *di) {
	LOG0(1, "CUpdateBar::DownloadFile()");

	if (FileExists(di->FileName))
		return;						// file already exists

	BOOL ok = FALSE;
	Downloader->SetUAString(_T(""));

	CString tmpFileName = di->FileName + _T(".part");
	CString url = di->URL;
	if (Downloader->SaveHttpObject(url, tmpFileName)) {
		MoveFile(tmpFileName, di->FileName);
	}
	else {
		if (Downloader->Error == DOWNLOAD_ERROR_DISK_FULL) {
			CErrorItem *ei = new CErrorItem(IDS_DISK_FULL);
			ei->Type = CErrorItem::System;
			Errors.Add(ei);

			Terminate = TRUE;
		}
		else {
			CString sErrMsg;
			sErrMsg.Format(IDS_ERROR_DOWNLOADING_FILE, di->URL);
			CErrorItem *ei = new CErrorItem(sErrMsg);
			ei->Type = CErrorItem::File;
			ei->SiteIdx = SITE_INVALID;
			ei->Url = di->URL;
			ei->FileType = di->Type;
			Errors.Add(ei);
		}
	}
}

void CUpdateBar::DownloadItems() {
	LOG0(1, "CUpdateBar::DownloadItems()");

	State = UPDATE_STATE_CACHING;

	while (!Terminate && !DownloadQueue.IsEmpty()) {
		CDownloadItem *di = DownloadQueue.Dequeue();

		EnterCriticalSection(&CSDownloader);
		Downloader = new CDownloader();
		m_ctlProgress.SetDownloader(Downloader);
		LeaveCriticalSection(&CSDownloader);

		m_ctlProgress.SetPos(0);
		UpdateProgressText();
		m_ctlProgress.Redraw(TRUE);

		switch (di->Type) {
			case FILE_TYPE_HTML: DownloadHtmlPage(di); break;
			default: DownloadFile(di); break;
		}

		DownloadQueue.FinishedItems++;
		int lo, hi;
		m_ctlProgress.GetRange(lo, hi);
		m_ctlProgress.SetPos(hi);
		m_ctlProgress.Redraw(FALSE);

		EnterCriticalSection(&CSDownloader);
		m_ctlProgress.SetDownloader(NULL);
		delete Downloader;
		Downloader = NULL;
		LeaveCriticalSection(&CSDownloader);

		delete di;
	}

	// empty download queue
	while (!DownloadQueue.IsEmpty())
		delete DownloadQueue.Dequeue();
}

void CUpdateBar::UpdateThread() {
	LOG0(3, "CUpdateBar::UpdateThread() - begin");

	//////
	CSuspendKiller suspendKiller;

	CMainFrame *frame = (CMainFrame *) AfxGetMainWnd();

	Terminate = FALSE;
	ErrorCount = 0;
	NewItemsCount = 0;

	// update feeds
	BOOL disconnect;
	if (CheckConnection(Config.AutoConnect, disconnect)) {
		// show update bar
		m_ctlProgress.ShowWindow(SW_SHOW);
		m_ctlText.ShowWindow(SW_HIDE);
		if (frame != NULL) frame->PostMessage(UWM_SHOW_UPDATEBAR, TRUE);

		if (UpdateList.GetCount() > 0)
			UpdateFeeds();

		// download items
		if (DownloadQueue.GetCount() > 0)
			DownloadItems();

		// notify
		if (Config.NotifyNew && GetForegroundWindow()->GetSafeHwnd() != frame->GetSafeHwnd()) {
			if (NewItemsCount > 0) {
				prssrNotificationRemove();
				prssrNotification(NewItemsCount);
			}
		}

		if (disconnect)
			Connection.HangupConnection();

		// done
		if (Errors.GetCount() > 0) {
			ShowErrorCount();
		}
		else {
			if (frame != NULL) frame->SendMessage(UWM_SHOW_UPDATEBAR, FALSE);
		}
	}
	else {
		Terminate = TRUE;
		Errors.Add(new CErrorItem(IDS_NO_INTERNET_CONNECTION));
		ShowErrorCount();
		if (frame != NULL) frame->PostMessage(UWM_SHOW_UPDATEBAR, TRUE);
	}

	// end
	CloseHandle(HUpdateThread);
	HUpdateThread = NULL;

	if (frame != NULL) frame->SendMessage(UWM_UPDATE_FINISHED);

	LOG0(3, "CUpdateBar::UpdateThread() - end");
}

void CUpdateBar::UpdateProgressText() {
	CString sText;
	CString sTitle;

	switch (State) {
		case UPDATE_STATE_CACHING:
			sText.Format(IDS_DOWNLOADING);
			sTitle.Format(_T("%d / %d: %s..."), DownloadQueue.FinishedItems + 1, DownloadQueue.FinishedItems + DownloadQueue.GetCount() + 1, sText);
			m_ctlProgress.SetText(sTitle);
			break;

		case UPDATE_STATE_RSS:
			sText.Format(IDS_UPDATING);
			if (SiteName.IsEmpty())
				sTitle = sText;
			else
				sTitle.Format(_T("%s: %s"), SiteName, sText);
			m_ctlProgress.SetText(sTitle);
			break;

		case UPDATE_STATE_AUTHENTICATING:
			sText.Format(IDS_AUTHENTICATING);
			m_ctlProgress.SetText(sText);
			break;

		case UPDATE_STATE_SYNCING:
			sText.Format(IDS_SYNCING);
			sTitle.Format(_T("%s: %s"), SiteName, sText);
			m_ctlProgress.SetText(sTitle);
			break;

		default:
			sText.Format(IDS_UPDATING);
			m_ctlProgress.SetText(sText);
			break;
	}

}

void CUpdateBar::ShowErrorCount() {
	CString strError;
	if (Errors.GetCount() > 1)
		strError.Format(IDS_N_ERRORS, Errors.GetCount());
	else {
		POSITION pos = Errors.GetFirstPos();
		if (pos != NULL) {
			CErrorItem *ei = Errors.GetNext(pos);
			strError = ei->Message;
		}
		else
			strError.Format(IDS_N_ERRORS, Errors.GetCount());			// this sould not happend, but for sure
	}

	ShowError(strError);
}

void CUpdateBar::ShowError(UINT nID) {
	LOG1(5, "CUpdateBar::ShowError(%d)", nID);

	CString str;
	str.LoadString(nID);
	ShowError(str);
}

void CUpdateBar::ShowError(const CString &str) {
	LOG1(3, "CUpdateBar::ShowError(%S)", str);

	CMainFrame *frame = (CMainFrame *) AfxGetMainWnd();

	// error
	m_ctlProgress.ShowWindow(SW_HIDE);
	m_ctlText.ShowWindow(SW_SHOW);
	m_ctlText.SetWindowText(str);

	if (frame != NULL) frame->SendMessage(UWM_SHOW_UPDATEBAR, TRUE);
}

BEGIN_MESSAGE_MAP(CUpdateBar, CControlBar)
	//{{AFX_MSG_MAP(CUpdateBar)
	ON_WM_PAINT()
	ON_WM_SIZE()
	ON_BN_CLICKED(IDC_UPDATE_STOP, OnStop)
	ON_WM_TIMER()
	ON_BN_CLICKED(IDC_UPDATE_TEXT, OnTextClicked)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

void CUpdateBar::OnStop() {
	LOG0(1, "CUpdateBar::OnStop()");

	EnterCriticalSection(&CSDownloader);
	if (Downloader != NULL)
		Downloader->Terminate();
	LeaveCriticalSection(&CSDownloader);
	Terminate = TRUE;

	// hide update bar
	CMainFrame *frame = (CMainFrame *) AfxGetMainWnd();
	if (frame != NULL) frame->SendMessage(UWM_SHOW_UPDATEBAR, FALSE);
	if (frame != NULL) frame->SendMessage(UWM_UPDATE_FINISHED);
}

void CUpdateBar::OnTextClicked() {
	LOG0(1, "CUpdateBar::OnTextClicked()");

	CMainFrame *frame = (CMainFrame *) AfxGetMainWnd();
	if (frame != NULL) {
		frame->SendMessage(UWM_SHOW_UPDATEBAR, FALSE);
		frame->PostMessage(WM_COMMAND, ID_TOOLS_ERRORS, NULL);		// show errors
	}
}

void CUpdateBar::OnPaint() {
	CControlBar::OnPaint();

	CDC *pDC = GetDC();
	if (pDC) {
		CRect	rc;
		GetClientRect(&rc);
		pDC->FillSolidRect(rc, ::GetSysColor(COLOR_3DFACE));
	}

	ReleaseDC(pDC);
}

void CUpdateBar::OnSize(UINT nType, int cx, int cy) {
	LOG0(1, "CUpdateBar::OnSize()");

	CControlBar::OnSize(nType, cx, cy);

	// reposition controls
	if (IsWindow(m_ctlProgress.GetSafeHwnd())) {
		m_ctlProgress.SetWindowPos(NULL, SCALEX(2), SCALEY(3),
			cx - SCALEX(5) - SCALEX(16) - 1, SCALEY(16) - 1, SWP_NOACTIVATE | SWP_NOZORDER);
	}

	if (IsWindow(m_ctlText.GetSafeHwnd())) {
		m_ctlText.SetWindowPos(NULL, SCALEX(2), SCALEY(4),
			cx - SCALEX(5) - SCALEX(16) - 1, SCALEY(16) - 1, SWP_NOACTIVATE | SWP_NOZORDER);
	}

	if (IsWindow(m_ctlStopBtn.GetSafeHwnd()))
		m_ctlStopBtn.SetWindowPos(NULL, cx - SCALEX(2) - SCALEX(16) + 1, SCALEY(3),
			SCALEX(16) - 1, SCALEY(16) - 1, SWP_NOACTIVATE | SWP_NOZORDER);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
五月综合激情网| 久久久不卡网国产精品一区| 久久精品日韩一区二区三区| 一区二区三区不卡视频在线观看| 久久66热re国产| 欧美三片在线视频观看| 国产精品丝袜黑色高跟| 九一九一国产精品| 91精品欧美久久久久久动漫| 国产精品丝袜一区| 国产一区二区三区在线观看精品 | 精品一区二区三区视频在线观看| 91麻豆6部合集magnet| 国产精品不卡在线观看| 岛国精品在线观看| 欧美国产视频在线| 丁香一区二区三区| 中文字幕不卡在线播放| 国产99精品视频| 日本一区二区三区视频视频| 日韩在线卡一卡二| 欧美日韩国产系列| 亚洲福利视频一区| 777亚洲妇女| 久久99在线观看| 久久先锋影音av鲁色资源网| 国内精品国产成人国产三级粉色 | 欧美亚洲愉拍一区二区| 日韩av一区二| 午夜电影久久久| 欧美一区二区三区视频在线 | 欧美高清在线一区| 95精品视频在线| 亚洲不卡一区二区三区| 欧美电影精品一区二区| 国产精品亚洲视频| 一区二区国产盗摄色噜噜| 欧美日韩精品一二三区| 国内精品在线播放| **欧美大码日韩| 欧美日韩精品免费| 国产激情视频一区二区在线观看| 中文字幕一区二区三区乱码在线| 91九色最新地址| 精品午夜久久福利影院| 亚洲色欲色欲www| 欧美视频你懂的| 免费成人av资源网| 成人欧美一区二区三区视频网页 | 成人精品一区二区三区四区| 亚洲一区二区欧美| 欧美国产精品一区二区| 69堂亚洲精品首页| 99免费精品在线观看| 久久99精品国产| 午夜电影一区二区三区| 中文字幕一区二区三中文字幕| 日韩一区二区在线看| 在线观看欧美日本| 99热99精品| 成人免费毛片片v| 国产乱码精品一区二区三区av| 亚洲电影一区二区| 亚洲欧美日本韩国| 国产精品污网站| 国产亚洲成av人在线观看导航| 91.com在线观看| 欧美日本在线视频| 精品视频在线免费观看| 日本韩国欧美国产| 91黄色免费网站| 色婷婷综合视频在线观看| 99久久99久久免费精品蜜臀| 国产91在线观看丝袜| 岛国精品一区二区| 成人激情免费网站| 成人精品电影在线观看| 韩国成人在线视频| 极品少妇xxxx偷拍精品少妇| 激情综合亚洲精品| 激情文学综合插| 国产在线精品一区二区不卡了| 精品在线你懂的| 粉嫩在线一区二区三区视频| 国产不卡在线一区| 色婷婷久久一区二区三区麻豆| 91老师片黄在线观看| 欧美色综合网站| 91精品免费在线| 亚洲精品一区二区精华| 亚洲国产精品t66y| 一区二区三区在线视频观看| 亚洲国产另类精品专区| 日本不卡123| 成人一区二区三区视频在线观看| 99re66热这里只有精品3直播| 日本韩国视频一区二区| 日韩不卡一区二区| 青椒成人免费视频| 成人激情动漫在线观看| 欧美日韩色一区| 久久久www免费人成精品| 中国av一区二区三区| 亚洲第一综合色| 成人国产精品免费观看| 欧美日韩国产bt| 国产精品看片你懂得| 亚洲成人免费看| 99久久精品国产导航| 精品国产乱码久久久久久牛牛| 亚洲欧美偷拍三级| 国产精品综合av一区二区国产馆| 91久久精品国产91性色tv| 国产欧美视频一区二区| 午夜精品123| 99久久精品情趣| 在线视频国内自拍亚洲视频| 精品日韩一区二区三区免费视频| 欧美不卡视频一区| 亚洲老妇xxxxxx| 国产美女主播视频一区| 3d动漫精品啪啪一区二区竹菊| 国产精品久久久久一区二区三区 | 欧美zozozo| 伊人婷婷欧美激情| 国产丶欧美丶日本不卡视频| 欧美日产国产精品| 久久精品欧美一区二区三区麻豆| 一区二区三区精密机械公司| 成人性生交大合| 国产三级一区二区三区| 奇米综合一区二区三区精品视频| youjizz久久| 久久久综合视频| 久久精品72免费观看| 91年精品国产| 中文字幕亚洲视频| 国产真实乱偷精品视频免| 日韩欧美一二三区| 天天综合网 天天综合色| 欧美日韩精品电影| 亚洲国产欧美日韩另类综合| 在线精品视频免费观看| 一区二区三区 在线观看视频| www.亚洲在线| 久久中文娱乐网| 国产99精品国产| 中文字幕人成不卡一区| 成人美女视频在线观看| 国产亚洲精品久| 99国产精品久久久久久久久久| 亚洲国产高清在线| 91成人在线免费观看| 国产精品黄色在线观看| 91激情在线视频| 日韩精品一二三区| 久久综合久久综合亚洲| 国产精品1024| 亚洲男人的天堂在线aⅴ视频| 日本高清视频一区二区| 天天av天天翘天天综合网| 日韩免费一区二区| 国产成人亚洲精品青草天美| 中文字幕一区二区三区不卡 | 中文字幕一区二区在线观看| 色噜噜狠狠色综合欧洲selulu| 一级做a爱片久久| 欧美成人性战久久| 91免费看`日韩一区二区| 亚洲国产视频a| 久久伊人蜜桃av一区二区| 色婷婷综合久久久久中文 | 波多野结衣亚洲| 丝袜美腿亚洲色图| 国产精品久久久久一区二区三区| 欧美亚洲丝袜传媒另类| 精品制服美女丁香| 亚洲日本电影在线| 精品国产乱码久久久久久久久| 白白色亚洲国产精品| 韩国精品久久久| 偷拍日韩校园综合在线| 欧美国产禁国产网站cc| 欧美老人xxxx18| 97久久超碰国产精品电影| 精品一区二区三区久久久| 亚洲电影中文字幕在线观看| 中文字幕制服丝袜成人av| 久久久久久久免费视频了| 欧美高清视频www夜色资源网| www.亚洲精品| 国产成+人+日韩+欧美+亚洲| 久久国产剧场电影| 另类小说色综合网站| 亚洲自拍偷拍麻豆| 亚洲在线视频一区| 亚洲自拍偷拍av| 夜夜亚洲天天久久| 亚洲一区免费观看| 夜夜嗨av一区二区三区中文字幕|