mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-25 20:01:50 +00:00
Bug #258102 --> start laying the foundation for importing feed subscription lists (OPML) by adding
a link property to feeds. Original patch by Robert Sayrer.
This commit is contained in:
parent
0cbac93e5d
commit
af74839877
@ -244,6 +244,26 @@ Feed.prototype =
|
||||
ds.Assert(this.resource, FZ_QUICKMODE, aNewQuickMode, true);
|
||||
},
|
||||
|
||||
get link ()
|
||||
{
|
||||
var ds = getSubscriptionsDS(this.server);
|
||||
var link = ds.GetTarget(this.resource, RSS_LINK, true);
|
||||
if(link)
|
||||
link = link.QueryInterface(Components.interfaces.nsIRDFLiteral).Value;
|
||||
return link;
|
||||
},
|
||||
|
||||
set link (aNewLink)
|
||||
{
|
||||
var ds = getSubscriptionsDS(this.server);
|
||||
aNewLink = rdf.GetLiteral(aNewLink);
|
||||
var old_link = ds.GetTarget(this.resource, RSS_LINK, true);
|
||||
if (old_link)
|
||||
ds.Change(this.resource, RSS_LINK, old_link, aNewLink);
|
||||
else
|
||||
ds.Assert(this.resource, RSS_LINK, aNewLink, true);
|
||||
},
|
||||
|
||||
parse: function()
|
||||
{
|
||||
// Figures out what description language (RSS, Atom) and version this feed
|
||||
|
@ -62,7 +62,7 @@ FeedParser.prototype =
|
||||
debug(aFeed.url + " is an RSS 1.x (RDF-based) feed");
|
||||
return this.parseAsRSS1(aFeed, aSource, aBaseURI);
|
||||
}
|
||||
else if (aDOM.documentElement.namespaceURI == "http://purl.org/atom/ns#")
|
||||
else if (aDOM.documentElement.namespaceURI == ATOM_03_NS)
|
||||
{
|
||||
debug(aFeed.url + " is an Atom feed");
|
||||
return this.parseAsAtom(aFeed, aDOM);
|
||||
@ -96,6 +96,7 @@ FeedParser.prototype =
|
||||
|
||||
aFeed.title = aFeed.title || getNodeValue(channel.getElementsByTagName("title")[0]);
|
||||
aFeed.description = getNodeValue(channel.getElementsByTagName("description")[0]);
|
||||
aFeed.link = getNodeValue(channel.getElementsByTagName("link")[0]);
|
||||
|
||||
if (!aFeed.parseItems)
|
||||
return parsedItems;
|
||||
@ -184,6 +185,7 @@ FeedParser.prototype =
|
||||
|
||||
aFeed.title = aFeed.title || getRDFTargetValue(ds, channel, RSS_TITLE);
|
||||
aFeed.description = getRDFTargetValue(ds, channel, RSS_DESCRIPTION);
|
||||
aFeed.link = getRDFTargetValue(ds, channel, RSS_LINK);
|
||||
|
||||
if (!aFeed.parseItems)
|
||||
return parsedItems;
|
||||
@ -252,6 +254,7 @@ FeedParser.prototype =
|
||||
|
||||
aFeed.title = aFeed.title || getNodeValue(channel.getElementsByTagName("title")[0]);
|
||||
aFeed.description = getNodeValue(channel.getElementsByTagName("tagline")[0]);
|
||||
aFeed.link = this.findAtomLink("alternate",channel.getElementsByTagNameNS(ATOM_03_NS,"link"));
|
||||
|
||||
if (!aFeed.parseItems)
|
||||
return parsedItems;
|
||||
@ -268,16 +271,7 @@ FeedParser.prototype =
|
||||
item.characterSet = "UTF-8";
|
||||
|
||||
var url;
|
||||
var links = itemNode.getElementsByTagName("link");
|
||||
for (var j=0; j < links.length; j++)
|
||||
{
|
||||
var alink = links[j];
|
||||
if (alink && alink.getAttribute('rel') && alink.getAttribute('rel') == 'alternate' && alink.getAttribute('href'))
|
||||
{
|
||||
url = alink.getAttribute('href');
|
||||
break;
|
||||
}
|
||||
}
|
||||
url = this.findAtomLink("alternate",itemNode.getElementsByTagNameNS(ATOM_03_NS,"link"));
|
||||
|
||||
item.url = url;
|
||||
item.id = getNodeValue(itemNode.getElementsByTagName("id")[0]);
|
||||
@ -346,5 +340,18 @@ FeedParser.prototype =
|
||||
parsedItems[i] = item;
|
||||
}
|
||||
return parsedItems;
|
||||
},
|
||||
|
||||
findAtomLink: function(linkRel, linkElements)
|
||||
{
|
||||
// XXX Need to check for MIME type and hreflang
|
||||
for ( var j=0 ; j<linkElements.length ; j++ ) {
|
||||
var alink = linkElements[j];
|
||||
if (alink && alink.getAttribute('rel')
|
||||
&& alink.getAttribute('rel') == linkRel && alink.getAttribute('href'))
|
||||
{
|
||||
return alink.getAttribute('href');
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -80,6 +80,10 @@ const FZ_VALID = rdf.GetResource(FZ_NS + "valid");
|
||||
const RDF_LITERAL_TRUE = rdf.GetLiteral("true");
|
||||
const RDF_LITERAL_FALSE = rdf.GetLiteral("false");
|
||||
|
||||
// Atom constants
|
||||
const ATOM_03_NS = "http://purl.org/atom/ns#";
|
||||
|
||||
|
||||
// XXX There's a containerutils in forumzilla.js that this should be merged with.
|
||||
var containerUtils = Components.classes["@mozilla.org/rdf/container-utils;1"]
|
||||
.getService(Components.interfaces.nsIRDFContainerUtils);
|
||||
|
Loading…
x
Reference in New Issue
Block a user