comparison ambnews/content/ambnews.js @ 1:44bcb4975ead

Added more files.
author Atul Varma <varmaa@toolness.com>
date Thu, 21 Aug 2008 15:39:57 -0700
parents
children 88b12596346d
comparison
equal deleted inserted replaced
0:66b00b4c37a6 1:44bcb4975ead
1 var AmbNews = {
2 url: function url(spec) {
3 if (typeof(spec) != "string")
4 // Assume that a URI object was passed in, so just return it back.
5 return spec;
6 var classObj = Components.classes["@mozilla.org/network/io-service;1"];
7 var ios = classObj.getService(Components.interfaces.nsIIOService);
8 return ios.newURI(spec, null, null);
9 },
10 getFeed: function AmbNews_getFeed(url, callback) {
11 function onXml(text) {
12 var feed = null;
13 if (text) {
14 var resultListener = {
15 handleResult: function resultListener_handleResult(aResult) {
16 feed = {};
17 var nsIFeed = aResult.doc;
18 var Ci = Components.interfaces;
19 nsIFeed.QueryInterface(Ci.nsIFeed);
20 feed.link = nsIFeed.link;
21 feed.title = nsIFeed.title;
22 feed.entries = [];
23 for (var i = 0; i < nsIFeed.items.length; i++) {
24 var item = nsIFeed.items.queryElementAt(i, Ci.nsIFeedEntry);
25 feed.entries.push(item);
26 }
27 }
28 };
29 var fp = AmbNews.__getFeedProcessor();
30 fp.listener = resultListener;
31 fp.parseFromString(text, AmbNews.url(url));
32 }
33 callback(feed);
34 }
35 AmbNews.__getXml(url, onXml);
36 },
37 __getXml: function AmbNews_getXml(url, callback) {
38 var feedUrl = AmbNews.url(url);
39 var annSvc = AmbNews.__getAnnSvc();
40
41 if (annSvc.pageHasAnnotation(feedUrl, "AmbNews/feed-xml")) {
42 var xml = annSvc.getPageAnnotation(feedUrl, "AmbNews/feed-xml");
43 // TODO: Perhaps re-enable this, but only let it live for a
44 // few minutes?
45 //callback(xml);
46 //return;
47 }
48
49 var request = new XMLHttpRequest();
50 request.open("GET", url, true);
51
52 var onRscFunc = function getXml_onReadyStateChange() {
53 if (request.readyState == 4) {
54 if (request.status == 200) {
55 if (request.responseText) {
56 annSvc.setPageAnnotation(feedUrl,
57 "AmbNews/feed-xml",
58 request.responseText,
59 0,
60 annSvc.EXPIRE_DAYS);
61 callback(request.responseText);
62 } else
63 callback("");
64 } else
65 callback("");
66 }
67 };
68
69 request.onreadystatechange = onRscFunc;
70 request.send(null);
71 },
72 __getFeedProcessor: function AmbNews_getFeedProcessor() {
73 var Cc = Components.classes;
74 var Ci = Components.interfaces;
75 var fp = Cc["@mozilla.org/feed-processor;1"]
76 .createInstance(Ci.nsIFeedProcessor);
77 return fp;
78 },
79 __getAnnSvc: function AmbNews_getAnnSvc() {
80 var Cc = Components.classes;
81 var annSvc = Cc["@mozilla.org/browser/annotation-service;1"]
82 .getService(Components.interfaces.nsIAnnotationService);
83 return annSvc;
84 },
85 onLinkAdded: function AmbNews_onLinkAdded(aEvent) {
86 if (aEvent.target.rel == "alternate" &&
87 (aEvent.target.type == "application/rss+xml" ||
88 aEvent.target.type == "application/atom+xml")) {
89 var annSvc = AmbNews.__getAnnSvc();
90 var page = AmbNews.url(aEvent.target.baseURI);
91 var feed = AmbNews.url(aEvent.target.href);
92 annSvc.setPageAnnotation(page, "AmbNews/feed",
93 feed.spec, 0, annSvc.EXPIRE_WEEKS);
94 }
95 }
96 };