Mercurial > ambnews-firefox
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 }; |
