Bug #313422 --> Thunderbird hangs on "verifying", when subscribing to a new RSS 0.90 feed

patch by robert sayre.
This commit is contained in:
scott%scott-macgregor.org 2005-11-16 22:07:54 +00:00
Родитель 099758030b
Коммит eceb22b18f
1 изменённых файлов: 20 добавлений и 17 удалений

Просмотреть файл

@ -79,8 +79,7 @@ FeedParser.prototype =
} }
else if (aSource.search(/"http:\/\/my\.netscape\.com\/rdf\/simple\/0\.9\/"/) != -1) else if (aSource.search(/"http:\/\/my\.netscape\.com\/rdf\/simple\/0\.9\/"/) != -1)
{ {
// RSS 0.9x is forward compatible with RSS 2.0, so use the RSS2 parser to handle it. debug(aFeed.url + " is an 0.90 feed");
debug(aFeed.url + " is an 0.9x feed");
return this.parseAsRSS2(aFeed, aDOM); return this.parseAsRSS2(aFeed, aDOM);
} }
// XXX Explicitly check for RSS 2.0 instead of letting it be handled by the // XXX Explicitly check for RSS 2.0 instead of letting it be handled by the
@ -104,15 +103,19 @@ FeedParser.prototype =
if (!channel) if (!channel)
return aFeed.onParseError(aFeed); return aFeed.onParseError(aFeed);
aFeed.title = aFeed.title || getNodeValue(channel.getElementsByTagNameNS("","title")[0]); //usually the empty string, unless this is RSS .90
aFeed.description = getNodeValue(channel.getElementsByTagNameNS("","description")[0]); var nsURI = channel.namespaceURI || "";
aFeed.link = getNodeValue(channel.getElementsByTagNameNS("","link")[0]); debug("channel NS: '" + nsURI +"'");
aFeed.title = aFeed.title || getNodeValue(channel.getElementsByTagNameNS(nsURI,"title")[0]);
aFeed.description = getNodeValue(channel.getElementsByTagNameNS(nsURI,"description")[0]);
aFeed.link = getNodeValue(channel.getElementsByTagNameNS(nsURI,"link")[0]);
if (!aFeed.parseItems) if (!aFeed.parseItems)
return parsedItems; return parsedItems;
aFeed.invalidateItems(); aFeed.invalidateItems();
var itemNodes = aDOM.getElementsByTagNameNS("","item"); var itemNodes = aDOM.getElementsByTagNameNS(nsURI,"item");
for (var i=0; i < itemNodes.length; i++) for (var i=0; i < itemNodes.length; i++)
{ {
@ -121,8 +124,8 @@ FeedParser.prototype =
item.feed = aFeed; item.feed = aFeed;
item.characterSet = "UTF-8"; item.characterSet = "UTF-8";
var link = getNodeValue(itemNode.getElementsByTagNameNS("","link")[0]); var link = getNodeValue(itemNode.getElementsByTagNameNS(nsURI,"link")[0]);
var guidNode = itemNode.getElementsByTagNameNS("","guid")[0]; var guidNode = itemNode.getElementsByTagNameNS(nsURI,"guid")[0];
var guid; var guid;
var isPermaLink; var isPermaLink;
if (guidNode) if (guidNode)
@ -137,17 +140,17 @@ FeedParser.prototype =
item.url = link ? link : (guid && isPermaLink) ? guid : null; item.url = link ? link : (guid && isPermaLink) ? guid : null;
item.id = guid; item.id = guid;
item.description = getNodeValue(itemNode.getElementsByTagNameNS("","description")[0]); item.description = getNodeValue(itemNode.getElementsByTagNameNS(nsURI,"description")[0]);
item.title = getNodeValue(itemNode.getElementsByTagNameNS("","title")[0]) item.title = getNodeValue(itemNode.getElementsByTagNameNS(nsURI,"title")[0])
|| (item.description ? (this.stripTags(item.description).substr(0, 150)) : null) || (item.description ? (this.stripTags(item.description).substr(0, 150)) : null)
|| item.title; || item.title;
item.author = getNodeValue(itemNode.getElementsByTagNameNS("","author")[0] item.author = getNodeValue(itemNode.getElementsByTagNameNS(nsURI,"author")[0]
|| itemNode.getElementsByTagNameNS("","creator")[0]) || itemNode.getElementsByTagNameNS(nsURI,"creator")[0])
|| aFeed.title || aFeed.title
|| item.author; || item.author;
item.date = getNodeValue(itemNode.getElementsByTagNameNS("","pubDate")[0] item.date = getNodeValue(itemNode.getElementsByTagNameNS(nsURI,"pubDate")[0]
|| itemNode.getElementsByTagNameNS("","date")[0]) || itemNode.getElementsByTagNameNS(nsURI,"date")[0])
|| item.date; || item.date;
// If the date is invalid, users will see the beginning of the epoch // If the date is invalid, users will see the beginning of the epoch
@ -166,7 +169,7 @@ FeedParser.prototype =
var content = getNodeValue(itemNode.getElementsByTagNameNS(RSS_CONTENT_NS, "encoded")[0]); var content = getNodeValue(itemNode.getElementsByTagNameNS(RSS_CONTENT_NS, "encoded")[0]);
// Handle an enclosure (if present) // Handle an enclosure (if present)
var enclosureNode = itemNode.getElementsByTagNameNS("","enclosure")[0]; var enclosureNode = itemNode.getElementsByTagNameNS(nsURI,"enclosure")[0];
if (enclosureNode) if (enclosureNode)
item.enclosure = new FeedEnclosure(enclosureNode.getAttribute("url"), item.enclosure = new FeedEnclosure(enclosureNode.getAttribute("url"),
enclosureNode.getAttribute("type"), enclosureNode.getAttribute("type"),