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

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

?? site.cpp.svn-base

?? wince c++ 下 開發的 rss 閱讀器源代碼
?? SVN-BASE
?? 第 1 頁 / 共 2 頁
字號:
/**
 *  Site.cpp
 *
 *  Copyright (C) 2008  David Andrs <pda@jasnapaka.com>
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */

#ifdef PRSSR_APP
	#include "StdAfx.h"
	#include "prssr.h"
	#include "misc.h"
#endif

#if defined PRSSR_TODAY
	#include "../prssrtoday/StdAfx.h"
#endif

#include "Site.h"

#include "../share/reg.h"
#include "../share/defs.h"
#include "../share/fs.h"
#include "misc.h"

#include "xml/FeedFile.h"
#include "xml/OpmlFile.h"

#ifdef PRSSR_APP
	#include "Config.h"
#elif defined PRSSR_TODAY
	#include "../prssrtoday/Config.h"
#endif

#ifdef MYDEBUG
#undef THIS_FILE
static TCHAR THIS_FILE[] = _T(__FILE__);
#include "debug/crtdbg.h"
#define new MYDEBUG_NEW
#endif

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


// registry
static LPCTSTR szName = _T("Name");
static LPCTSTR szIdx = _T("Idx");

static LPCTSTR szFileName = _T("File Name");
static LPCTSTR szXmlUrl = _T("XML URL");
static LPCTSTR szUseGlobalCacheOptions = _T("Use Global Cache Options");
static LPCTSTR szCacheItemImages = _T("Cache Item Images");
static LPCTSTR szCacheHtml = _T("Cache Html");
static LPCTSTR szCacheLimit = _T("Cache Limit");
static LPCTSTR szUpdateInterval = _T("Update Interval");
static LPCTSTR szCacheEnclosures = _T("Cache Enclosures");
static LPCTSTR szEnclosureLimit = _T("Enclosure Limit");
static LPCTSTR szETag = _T("ETag");
static LPCTSTR szLastModified = _T("LastModified");
static LPCTSTR szUserName = _T("Username");
static LPCTSTR szPassword = _T("Password");
static LPCTSTR szSort = _T("Sort");
static LPCTSTR szSortReversed = _T("SortReversed");

static LPCTSTR szUnreadCount = _T("Unread Count");
static LPCTSTR szFlaggedCount = _T("Flagged Count");
static LPCTSTR szCheckFavIcon = _T("Check FavIcon");

//#ifdef PRSSR_APP

CSiteList SiteList;
CSiteItem UnreadItems(NULL, CSiteItem::VFolder);
CSiteItem FlaggedItems(NULL, CSiteItem::VFolder);

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CFeedInfo::CFeedInfo() {
	TodayShow = TRUE;
#if defined PRSSR_APP
	UseGlobalCacheOptions = TRUE;
	CacheItemImages = FALSE;
	CacheHtml = FALSE;
	CacheLimit = CACHE_LIMIT_DEFAULT;
	UpdateInterval = UPDATE_INTERVAL_GLOBAL;
	CacheEnclosures = FALSE;
	EnclosureLimit = 0;
#endif
}

CFeedInfo &CFeedInfo::operator=(const CFeedInfo &o) {
	if (this != &o) {
		FileName = o.FileName;
		XmlUrl = o.XmlUrl;
		TodayShow = o.TodayShow;

#if defined PRSSR_APP
		UseGlobalCacheOptions = o.UseGlobalCacheOptions;
		CacheItemImages = o.CacheItemImages;
		CacheHtml = o.CacheHtml;
		CacheLimit = o.CacheLimit;
		UpdateInterval = o.UpdateInterval;
		CacheEnclosures = o.CacheEnclosures;
		EnclosureLimit = o.EnclosureLimit;
		ETag = o.ETag;
		LastModified = o.LastModified;
		UserName = o.UserName;
		Password = o.Password;
#endif
	}

	return *this;
}

CFeedInfo::~CFeedInfo() {
}

#ifdef PRSSR_APP

CString CFeedInfo::GenerateFileName(const CString &url) {
	return GetSha1Hash(url);
}

#endif

// CSiteItem //////////////////////////////////////////////////////////

CSiteItem::CSiteItem(CSiteItem *parent, eType type) {
	LOG1(5, "CSiteItem::CSiteItem(%d)", type);

	Parent = parent;
	Type = type;
	Info = NULL;
	Feed = NULL;
#ifdef PRSSR_APP
	Sort.Item = CSortInfo::Date;
	Sort.Type = CSortInfo::Descending;
#endif

	if (Type == Site)
		Status = Empty;
	else
		Status = Ok;

	ImageIdx = -1;
	CheckFavIcon = TRUE;

	Modified = FALSE;

	UnreadItems = 0;
	FlaggedItems = 0;
	CheckFavIcon = TRUE;

	InitializeCriticalSection(&CSLoadFeed);

#ifdef PRSSR_TODAY
	memset(&LastUpdate, 0, sizeof(FILETIME));
#endif
}


CSiteItem::CSiteItem(CSiteItem *parent, CSiteItem *siteItem) {
	LOG1(5, "CSiteItem::CSiteItem(%p)", siteItem);

	Parent = parent;
	Type = siteItem->Type;
	Name = siteItem->Name;
	ImageIdx = siteItem->ImageIdx;
	CheckFavIcon = siteItem->CheckFavIcon;
	Modified = siteItem->Modified;
#ifdef PRSSR_APP
	Sort = siteItem->Sort;
	Info = NULL;
#endif

	if (siteItem->Type == Site) {
		Status = Empty;
		Info = new CFeedInfo();
		*Info = *(siteItem->Info);
		Feed = NULL;

		UnreadItems = siteItem->UnreadItems;
		FlaggedItems = siteItem->FlaggedItems;
	}
	else if (siteItem->Type == VFolder) {
		Status = Empty;
		Feed = NULL;
		UnreadItems = 0;
		FlaggedItems = 0;
	}
	else {
		Status = Ok;
	}

	InitializeCriticalSection(&CSLoadFeed);

#ifdef PRSSR_TODAY
	LastUpdate = siteItem->LastUpdate;
#endif
}

CSiteItem::~CSiteItem() {
	LOG1(1, "CSiteItem::~CSiteItem(%S)", Name);

	DeleteCriticalSection(&CSLoadFeed);
}

void CSiteItem::Destroy() {
	LOG1(5, "CSiteItem::Destroy(%S)", Name);

	switch (Type) {
		case Site:
			delete Info; Info = NULL;
			if (Feed != NULL) Feed->Destroy();
			delete Feed; Feed = NULL;
			break;

		case VFolder:
			delete Info; Info = NULL;
			// we do not destroy feed, since vfolder is an array of links to already existing items that are deallocated elsewhere
			delete Feed; Feed = NULL;
			break;

		case Group:
			while (!SubItems.IsEmpty()) {
				CSiteItem *item = SubItems.RemoveHead();
				item->Destroy();
				delete item;
			}
			break;
	}
}

void CSiteItem::EnsureSiteLoaded() {
	LOG0(5, "CSiteItem::EnsureSiteLoaded()");

	if (Type == Site) {
		// if not loaded ->load
		EnterCriticalSection(&CSLoadFeed);
		if (Status == Empty) {
			CFeed *feed = new CFeed();

			CString pathName;
#if defined PRSSR_APP
			pathName = GetCacheFile(FILE_TYPE_FEED, Config.CacheLocation, Info->FileName);
#elif defined PRSSR_TODAY
			pathName.Format(_T("%s\\feeds\\%s"), Config.CacheLocation, Info->FileName);
#endif
			if (feed->Load(pathName, this)) {
				Status = Ok;

#ifdef PRSSR_APP
				feed->UpdateHiddenFlags();
//				feed->SetKeywordFlags(SiteList.GetKeywords());
#endif

				if (Feed != NULL) Feed->Destroy();
				delete Feed;
				Feed = feed;

				UpdateCachedCounts();
			}
			else {
				Status = Error;
#if defined PRSSR_APP
				// discard ETag and LastModified value (to allow update)
				Info->ETag.Empty();
				Info->LastModified.Empty();
#endif
				UpdateCachedCounts();

				if (feed != NULL) feed->Destroy();
				delete feed;
			}
		}
		LeaveCriticalSection(&CSLoadFeed);
	}
}

int CSiteItem::GetUnreadCount() const {
	LOG0(5, "CSiteItem::GetUnreadCount()");

	if (Type == Site) {
		if (Status == Ok && Feed != NULL)
			return Feed->GetUnreadCount() + Feed->GetNewCount();
		else
			return UnreadItems;
	}
	else if (Type == Group) {
		int unreadCount = 0;
		POSITION pos = SubItems.GetHeadPosition();
		while (pos != NULL) {
			CSiteItem *si = SubItems.GetNext(pos);
			unreadCount += si->GetUnreadCount();
		}

		return unreadCount;
	}
	else {
		return 0;
	}
}

int CSiteItem::GetFlaggedCount() const {
	LOG0(5, "CSiteItem::GetFlaggedCount()");

	if (Type == Site) {
		if (Status == Ok && Feed != NULL)
			return Feed->GetFlaggedCount();
		else
			return FlaggedItems;
	}
	else if (Type == Group) {
		int flaggedCount = 0;
		POSITION pos = SubItems.GetHeadPosition();
		while (pos != NULL) {
			CSiteItem *si = SubItems.GetNext(pos);
			flaggedCount += si->GetFlaggedCount();
		}

		return flaggedCount;
	}
	else {
		return 0;
	}
}

void CSiteItem::UpdateCachedCounts() {
	LOG0(5, "CSiteItem::UpdateCachedCounts()");

	if (Type == Site) {
		if (Feed != NULL)
			UnreadItems = Feed->GetNewCount() + Feed->GetUnreadCount();
		else
			UnreadItems = 0;
	}
	else if (Type == Group) {
		POSITION pos = SubItems.GetHeadPosition();
		while (pos != NULL) {
			CSiteItem *si = SubItems.GetNext(pos);
			si->UpdateCachedCounts();
		}
	}
}

void CSiteItem::GetSites(CList<CSiteItem *, CSiteItem *> &sites) {
	if (Type == Site)
		sites.AddTail(this);
	else if (Type == Group) {
		POSITION pos = SubItems.GetHeadPosition();

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一道本成人在线| 日韩一区有码在线| 亚洲欧美成aⅴ人在线观看| 久久精品国产亚洲高清剧情介绍 | 日韩三级视频在线看| 中文字幕乱码亚洲精品一区| 日韩综合在线视频| 欧美自拍偷拍一区| 国产精品久久久久久久岛一牛影视 | 91高清视频免费看| 国产日韩欧美不卡| 国产在线播放一区二区三区| 51久久夜色精品国产麻豆| 亚洲精品午夜久久久| 成人性生交大片免费| www成人在线观看| 久久精品国产亚洲高清剧情介绍| 91一区二区在线观看| 国产欧美一区二区精品性| 久久国产精品免费| 欧美一区二区三区四区在线观看 | 国产精品色噜噜| 国产专区欧美精品| 欧美不卡视频一区| 日韩福利电影在线| 欧美二区乱c少妇| 亚洲成人精品影院| 欧美性大战久久| 一区二区三区在线观看视频| 99在线视频精品| 中文字幕一区二区三区在线观看 | 亚洲欧洲日韩女同| av在线不卡免费看| 亚洲欧洲精品一区二区三区 | 国产成人在线视频网站| 26uuu亚洲综合色| 精品在线免费视频| 久久看人人爽人人| 国产69精品一区二区亚洲孕妇| 久久蜜臀精品av| 成人综合婷婷国产精品久久免费| 久久久久久久久久久电影| 处破女av一区二区| 日韩美女精品在线| 91国偷自产一区二区三区观看| 亚洲精品视频自拍| 欧美日韩日日摸| 日韩国产一二三区| 欧美精品一区二区三区高清aⅴ| 激情六月婷婷综合| 国产精品毛片高清在线完整版| av在线不卡观看免费观看| 亚洲午夜国产一区99re久久| 在线播放一区二区三区| 国产在线精品一区在线观看麻豆| 国产午夜久久久久| 91精品91久久久中77777| 五月天久久比比资源色| 2024国产精品| 91蝌蚪国产九色| 免费在线观看日韩欧美| 国产香蕉久久精品综合网| 色欧美乱欧美15图片| 日本成人在线电影网| 欧美激情艳妇裸体舞| 欧美视频一区二区三区在线观看| 久久精品噜噜噜成人88aⅴ| 国产日韩成人精品| 欧美肥胖老妇做爰| 成人午夜电影久久影院| 午夜亚洲国产au精品一区二区| 精品卡一卡二卡三卡四在线| 91在线一区二区三区| 蜜臀久久久99精品久久久久久| 中文字幕一区二区三| 欧美老女人第四色| 大胆亚洲人体视频| 蜜桃久久av一区| 伊人色综合久久天天人手人婷| 久久综合久久久久88| 欧洲视频一区二区| 国产凹凸在线观看一区二区| 奇米在线7777在线精品| 国产精品国产三级国产三级人妇| 在线综合视频播放| 色综合久久久久综合| 国产原创一区二区三区| 午夜久久久久久久久久一区二区| 国产农村妇女精品| 欧美精品一区视频| 欧美一三区三区四区免费在线看| www.日韩大片| 国产成人综合自拍| 麻豆精品视频在线观看免费| 亚洲女同女同女同女同女同69| 久久色.com| 欧美一区二区三区视频在线观看| 色综合久久中文综合久久牛| 国产揄拍国内精品对白| 日韩av电影免费观看高清完整版| 亚洲乱码中文字幕| 中文字幕不卡在线观看| 久久久精品蜜桃| 精品国产在天天线2019| 91精品久久久久久久久99蜜臂| 91丨porny丨最新| 成人精品一区二区三区四区| 国产精品一级片在线观看| 久久99国产精品久久| 奇米一区二区三区av| 手机精品视频在线观看| 日韩中文字幕亚洲一区二区va在线| 亚洲精品国产第一综合99久久| 亚洲少妇屁股交4| 亚洲精选免费视频| 亚洲欧美日韩在线| 一区二区高清免费观看影视大全| 亚洲乱码国产乱码精品精小说 | 91麻豆国产精品久久| 99re这里只有精品首页| 91论坛在线播放| 欧美视频完全免费看| 7777女厕盗摄久久久| 欧美一区三区二区| 久久先锋影音av| 欧美国产精品v| 亚洲日本在线看| 亚洲高清不卡在线| 日本中文字幕不卡| 国产一区在线精品| 成人av集中营| 欧美三级中文字| 日韩一区二区三| 国产校园另类小说区| 亚洲精品国产一区二区三区四区在线| 亚洲成人自拍网| 麻豆成人久久精品二区三区红 | 欧美人与性动xxxx| 日韩一级大片在线观看| 久久先锋影音av| 亚洲视频中文字幕| 日韩精品欧美成人高清一区二区| 男女激情视频一区| 成人久久18免费网站麻豆| 欧美性受极品xxxx喷水| 日韩欧美在线影院| 国产精品热久久久久夜色精品三区 | 不卡的av中国片| 欧美少妇性性性| 久久久久久久综合狠狠综合| 中文字幕一区日韩精品欧美| 午夜精品免费在线| 国产不卡一区视频| 欧美精品 日韩| 国产日产亚洲精品系列| 亚洲国产精品视频| 成人激情动漫在线观看| 91精品婷婷国产综合久久性色| 国产情人综合久久777777| 亚洲观看高清完整版在线观看 | 久久精品国产**网站演员| 成人午夜伦理影院| 日韩欧美在线一区二区三区| 亚洲乱码中文字幕综合| 国产精品白丝jk白祙喷水网站| 欧美午夜精品电影| 欧美国产精品中文字幕| 日本欧美韩国一区三区| 色又黄又爽网站www久久| 久久综合999| 日韩中文字幕区一区有砖一区| 成人97人人超碰人人99| 精品久久久久久久人人人人传媒 | 成人夜色视频网站在线观看| 欧美精品在线观看一区二区| 国产精品色在线| 韩国欧美一区二区| 欧美精品丝袜中出| 一区二区免费在线| aa级大片欧美| 国产欧美日韩激情| 狠狠狠色丁香婷婷综合久久五月| 欧美性三三影院| 亚洲少妇30p| 色综合一个色综合| 国产精品超碰97尤物18| 高清av一区二区| 久久久久久久久久久电影| 九色综合狠狠综合久久| 欧美电影一区二区| 亚洲va国产va欧美va观看| 色综合网站在线| 亚洲人成人一区二区在线观看 | 最新成人av在线| 国产成人免费网站| 精品国产91亚洲一区二区三区婷婷| 偷拍亚洲欧洲综合| 欧美男人的天堂一二区| 亚洲成人你懂的| 91精品国产综合久久国产大片|