annotate extension/modules/feed.js @ 84:915e41848f6d

rename universalID to externalID
author Myk Melez <myk@mozilla.org>
date Fri, 16 May 2008 10:42:36 -0700
parents 1cbd4c5a511b
children f5161c834622
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
76
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
1 EXPORTED_SYMBOLS = ["SnowlFeed", "SnowlFeedSubscriber"];
14
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
2
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
3 const Cc = Components.classes;
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
4 const Ci = Components.interfaces;
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
5 const Cr = Components.results;
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
6 const Cu = Components.utils;
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
7
45
a3811857c5dc register the resource alias to the top-level directory rather than the modules directory for consistency with resource://gre/modules/ URLs and so we can use it to load resources from elsewhere in the extension later; this means converting chrome://snowl/module.js URLs into chrome://snowl/modules/module.js URLs
Myk Melez <myk@mozilla.org>
parents: 21
diff changeset
8 Cu.import("resource://snowl/modules/log4moz.js");
a3811857c5dc register the resource alias to the top-level directory rather than the modules directory for consistency with resource://gre/modules/ URLs and so we can use it to load resources from elsewhere in the extension later; this means converting chrome://snowl/module.js URLs into chrome://snowl/modules/module.js URLs
Myk Melez <myk@mozilla.org>
parents: 21
diff changeset
9 Cu.import("resource://snowl/modules/datastore.js");
14
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
10
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
11 var SnowlFeedClient = {
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
12 // XXX Make this take a feed ID once it stores the list of subscribed feeds
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
13 // in the datastore.
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
14 refresh: function(aFeedURL) {
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
15 let request = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance();
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
16
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
17 request.QueryInterface(Ci.nsIDOMEventTarget);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
18 let t = this;
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
19 request.addEventListener("load", function(aEvent) { t.onLoad(aEvent) }, false);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
20 request.addEventListener("error", function(aEvent) { t.onError(aEvent) }, false);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
21
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
22 request.QueryInterface(Ci.nsIXMLHttpRequest);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
23 request.open("GET", aFeedURL, true);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
24 request.send(null);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
25 },
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
26
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
27 onLoad: function(aEvent) {
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
28 let request = aEvent.target;
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
29
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
30 if (request.responseText.length > 0) {
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
31 let parser = Cc["@mozilla.org/feed-processor;1"].
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
32 createInstance(Ci.nsIFeedProcessor);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
33 parser.listener = new SnowlFeed(request.channel.originalURI);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
34 parser.parseFromString(request.responseText, request.channel.URI);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
35 }
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
36 },
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
37
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
38 onError: function(aEvent) {
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
39 // FIXME: figure out what to do here.
21
df5025ed1a7b supress some log messages
Myk Melez <myk@mozilla.org>
parents: 14
diff changeset
40 Log4Moz.Service.getLogger("Snowl.FeedClient").error("loading feed " + aEvent.target.channel.originalURI.spec);
14
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
41 }
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
42 };
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
43
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
44 function SnowlFeed(aID, aURL, aTitle) {
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
45 this.id = aID;
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
46 this.url = aURL;
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
47 this.title = aTitle;
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
48
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
49 this._log = Log4Moz.Service.getLogger("Snowl.Feed");
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
50 }
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
51
75
877a7694445f update the sources table schema, changing the title column to name and differentiating between machine-processable and human-readable URIs
Myk Melez <myk@mozilla.org>
parents: 45
diff changeset
52 // FIXME: make this a subclass of SnowlSource.
877a7694445f update the sources table schema, changing the title column to name and differentiating between machine-processable and human-readable URIs
Myk Melez <myk@mozilla.org>
parents: 45
diff changeset
53
14
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
54 SnowlFeed.prototype = {
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
55 id: null,
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
56 url: null,
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
57 title: null,
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
58
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
59 _log: null,
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
60
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
61 QueryInterface: function(aIID) {
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
62 if (aIID.equals(Ci.nsIFeedResultListener) ||
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
63 aIID.equals(Ci.nsISupports))
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
64 return this;
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
65
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
66 throw Cr.NS_ERROR_NO_INTERFACE;
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
67 },
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
68
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
69 // nsIFeedResultListener
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
70
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
71 handleResult: function(result) {
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
72 // Now that we know we successfully downloaded the feed and obtained
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
73 // a result from it, update the "last refreshed" timestamp.
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
74 this.resetLastRefreshed(this);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
75
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
76 let feed = result.doc.QueryInterface(Components.interfaces.nsIFeed);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
77
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
78 let currentMessages = [];
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
79
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
80 SnowlDatastore.dbConnection.beginTransaction();
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
81 try {
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
82 for (let i = 0; i < feed.items.length; i++) {
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
83 let entry = feed.items.queryElementAt(i, Ci.nsIFeedEntry);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
84 //entry.QueryInterface(Ci.nsIFeedContainer);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
85
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
86 // Figure out the ID for the entry, then check if the entry has already
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
87 // been retrieved. If we can't figure out the entry's ID, then we skip
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
88 // the entry, since its ID is the only way for us to know whether or not
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
89 // it has already been retrieved.
84
915e41848f6d rename universalID to externalID
Myk Melez <myk@mozilla.org>
parents: 76
diff changeset
90 let externalID;
14
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
91 try {
84
915e41848f6d rename universalID to externalID
Myk Melez <myk@mozilla.org>
parents: 76
diff changeset
92 externalID = entry.id || this.generateID(entry);
14
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
93 }
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
94 catch(ex) {
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
95 this._log.warn(this.title + " couldn't retrieve a message: " + ex);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
96 continue;
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
97 }
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
98
84
915e41848f6d rename universalID to externalID
Myk Melez <myk@mozilla.org>
parents: 76
diff changeset
99 let internalID = this.getInternalIDForExternalID(externalID);
14
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
100
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
101 if (internalID)
84
915e41848f6d rename universalID to externalID
Myk Melez <myk@mozilla.org>
parents: 76
diff changeset
102 this._log.info(this.title + " has message " + externalID);
14
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
103 else {
84
915e41848f6d rename universalID to externalID
Myk Melez <myk@mozilla.org>
parents: 76
diff changeset
104 this._log.info(this.title + " adding message " + externalID);
915e41848f6d rename universalID to externalID
Myk Melez <myk@mozilla.org>
parents: 76
diff changeset
105 internalID = this.addMessage(entry, externalID);
14
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
106 }
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
107
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
108 currentMessages.push(internalID);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
109 }
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
110
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
111 // Update the current flag.
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
112 SnowlDatastore.dbConnection.executeSimpleSQL("UPDATE messages SET current = 0 WHERE sourceID = " + this.id);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
113 SnowlDatastore.dbConnection.executeSimpleSQL("UPDATE messages SET current = 1 WHERE sourceID = " + this.id + " AND id IN (" + currentMessages.join(", ") + ")");
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
114
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
115 SnowlDatastore.dbConnection.commitTransaction();
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
116 }
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
117 catch(ex) {
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
118 SnowlDatastore.dbConnection.rollbackTransaction();
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
119 throw ex;
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
120 }
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
121 },
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
122
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
123 // nsIFeedTextConstruct::type to MIME media type mappings.
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
124 contentTypes: { html: "text/html", xhtml: "application/xhtml+xml", text: "text/plain" },
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
125
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
126 getNewMessages: function() {
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
127 let request = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance();
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
128
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
129 request.QueryInterface(Ci.nsIDOMEventTarget);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
130 // FIXME: just pass "this" and make this implement nsIDOMEventListener.
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
131 let t = this;
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
132 request.addEventListener("load", function(aEvent) { t.onLoad(aEvent) }, false);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
133 request.addEventListener("error", function(aEvent) { t.onError(aEvent) }, false);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
134
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
135 request.QueryInterface(Ci.nsIXMLHttpRequest);
75
877a7694445f update the sources table schema, changing the title column to name and differentiating between machine-processable and human-readable URIs
Myk Melez <myk@mozilla.org>
parents: 45
diff changeset
136 dump("about to getNewMessages for " + this.url + "\n");
14
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
137 request.open("GET", this.url, true);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
138 request.send(null);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
139 },
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
140
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
141 onLoad: function(aEvent) {
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
142 let request = aEvent.target;
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
143
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
144 if (request.responseText.length > 0) {
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
145 let parser = Cc["@mozilla.org/feed-processor;1"].
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
146 createInstance(Ci.nsIFeedProcessor);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
147 parser.listener = this;
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
148 parser.parseFromString(request.responseText, request.channel.URI);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
149 }
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
150 },
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
151
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
152 onError: function(aEvent) {
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
153 // FIXME: figure out what to do here.
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
154 this._log.error("loading feed " + aEvent.target.channel.originalURI);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
155 },
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
156
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
157 /**
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
158 * Add a message to the datastore for the given feed entry.
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
159 *
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
160 * @param aEntry {nsIFeedEntry} the feed entry
84
915e41848f6d rename universalID to externalID
Myk Melez <myk@mozilla.org>
parents: 76
diff changeset
161 * @param aExternalID {string} the external ID of the feed entry
14
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
162 */
84
915e41848f6d rename universalID to externalID
Myk Melez <myk@mozilla.org>
parents: 76
diff changeset
163 addMessage: function(aEntry, aExternalID) {
14
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
164 // Combine the first author's name and email address into a single string
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
165 // that we'll use as the author of the message.
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
166 let author = null;
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
167 if (aEntry.authors.length > 0) {
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
168 let firstAuthor = aEntry.authors.queryElementAt(0, Ci.nsIFeedPerson);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
169 let name = firstAuthor.name;
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
170 let email = firstAuthor.email;
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
171 if (name) {
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
172 author = name;
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
173 if (email)
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
174 author += " <" + email + ">";
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
175 }
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
176 else if (email)
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
177 author = email;
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
178 }
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
179
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
180 // Convert the publication date/time string into a JavaScript Date object.
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
181 let timestamp = aEntry.published ? new Date(aEntry.published) : null;
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
182
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
183 // Convert the content type specified by nsIFeedTextConstruct, which is
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
184 // either "html", "xhtml", or "text", into an Internet media type.
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
185 let contentType = aEntry.content ? this.contentTypes[aEntry.content.type] : null;
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
186 let contentText = aEntry.content ? aEntry.content.text : null;
84
915e41848f6d rename universalID to externalID
Myk Melez <myk@mozilla.org>
parents: 76
diff changeset
187 let messageID = this.addSimpleMessage(this.id, aExternalID,
915e41848f6d rename universalID to externalID
Myk Melez <myk@mozilla.org>
parents: 76
diff changeset
188 aEntry.title.text, author,
915e41848f6d rename universalID to externalID
Myk Melez <myk@mozilla.org>
parents: 76
diff changeset
189 timestamp, aEntry.link,
915e41848f6d rename universalID to externalID
Myk Melez <myk@mozilla.org>
parents: 76
diff changeset
190 contentText, contentType);
14
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
191
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
192 // Add metadata.
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
193 let fields = aEntry.QueryInterface(Ci.nsIFeedContainer).
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
194 fields.QueryInterface(Ci.nsIPropertyBag).enumerator;
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
195 while (fields.hasMoreElements()) {
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
196 let field = fields.getNext().QueryInterface(Ci.nsIProperty);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
197
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
198 if (field.name == "authors") {
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
199 let values = field.value.QueryInterface(Ci.nsIArray).enumerate();
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
200 while (values.hasMoreElements()) {
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
201 let value = values.getNext().QueryInterface(Ci.nsIFeedPerson);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
202 // FIXME: store people records in a separate table with individual
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
203 // columns for each person attribute (i.e. name, email, url)?
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
204 this.addMetadatum(messageID,
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
205 "atom:author",
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
206 value.name && value.email ? value.name + "<" + value.email + ">"
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
207 : value.name ? value.name : value.email);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
208 }
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
209 }
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
210
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
211 else if (field.name == "links") {
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
212 let values = field.value.QueryInterface(Ci.nsIArray).enumerate();
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
213 while (values.hasMoreElements()) {
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
214 let value = values.getNext().QueryInterface(Ci.nsIPropertyBag2);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
215 // FIXME: store link records in a separate table with individual
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
216 // colums for each link attribute (i.e. href, type, rel, title)?
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
217 this.addMetadatum(messageID,
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
218 "atom:link_" + value.get("rel"),
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
219 value.get("href"));
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
220 }
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
221 }
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
222
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
223 // For some reason, the values of certain simple fields (like RSS2 guid)
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
224 // are property bags containing the value instead of the value itself.
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
225 // For those, we need to unwrap the extra layer. This strange behavior
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
226 // has been filed as bug 427907.
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
227 else if (typeof field.value == "object") {
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
228 if (field.value instanceof Ci.nsIPropertyBag2) {
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
229 let value = field.value.QueryInterface(Ci.nsIPropertyBag2).get(field.name);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
230 this.addMetadatum(messageID, field.name, value);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
231 }
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
232 else if (field.value instanceof Ci.nsIArray) {
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
233 let values = field.value.QueryInterface(Ci.nsIArray).enumerate();
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
234 while (values.hasMoreElements()) {
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
235 let value = values.getNext().QueryInterface(Ci.nsIPropertyBag2);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
236 this.addMetadatum(messageID, field.name, value.get(field.name));
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
237 }
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
238 }
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
239 }
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
240
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
241 else
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
242 this.addMetadatum(messageID, field.name, field.value);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
243 }
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
244
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
245 return messageID;
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
246 },
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
247
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
248 /**
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
249 * Convert a string to an array of character codes.
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
250 *
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
251 * @param string {string} the string to convert
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
252 * @returns {array} the array of character codes
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
253 */
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
254 stringToArray: function(string) {
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
255 var array = [];
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
256 for (let i = 0; i < string.length; i++)
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
257 array.push(string.charCodeAt(i));
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
258 return array;
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
259 },
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
260
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
261 /**
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
262 * Given an entry, generate an ID for it based on a hash of its link,
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
263 * published, and title attributes. Useful for uniquely identifying entries
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
264 * that don't provide their own IDs.
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
265 *
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
266 * @param entry {nsIFeedEntry} the entry for which to generate an ID
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
267 * @returns {string} an ID for the entry
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
268 */
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
269 generateID: function(entry) {
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
270 let hasher = Cc["@mozilla.org/security/hash;1"].
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
271 createInstance(Ci.nsICryptoHash);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
272 hasher.init(Ci.nsICryptoHash.SHA1);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
273 let identity = this.stringToArray(entry.link.spec + entry.published + entry.title.text);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
274 hasher.update(identity, identity.length);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
275 return "urn:" + hasher.finish(true);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
276 },
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
277
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
278 // FIXME: Make the rest of this stuff be part of a superclass from which
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
279 // this class is derived.
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
280
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
281 /**
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
282 * Get the internal ID of the message with the given external ID.
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
283 *
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
284 * @param aExternalID {string}
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
285 * the external ID of the message
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
286 *
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
287 * @returns {number}
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
288 * the internal ID of the message, or undefined if the message
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
289 * doesn't exist
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
290 */
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
291 getInternalIDForExternalID: function(aExternalID) {
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
292 return SnowlDatastore.selectInternalIDForExternalID(aExternalID);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
293 },
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
294
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
295 /**
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
296 * Add a message with a single part to the datastore.
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
297 *
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
298 * @param aSourceID {integer} the record ID of the message source
84
915e41848f6d rename universalID to externalID
Myk Melez <myk@mozilla.org>
parents: 76
diff changeset
299 * @param aExternalID {string} the external ID of the message
14
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
300 * @param aSubject {string} the title of the message
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
301 * @param aAuthor {string} the author of the message
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
302 * @param aTimestamp {Date} the date/time at which the message was sent
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
303 * @param aLink {nsIURI} a link to the content of the message,
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
304 * if the content is hosted on a server
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
305 * @param aContent {string} the content of the message, if the content
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
306 * is included with the message
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
307 * @param aContentType {string} the media type of the content of the message,
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
308 * if the content is included with the message
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
309 *
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
310 * FIXME: allow callers to pass a set of arbitrary metadata name/value pairs
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
311 * that get written to the attributes table.
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
312 *
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
313 * @returns {integer} the internal ID of the newly-created message
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
314 */
84
915e41848f6d rename universalID to externalID
Myk Melez <myk@mozilla.org>
parents: 76
diff changeset
315 addSimpleMessage: function(aSourceID, aExternalID, aSubject, aAuthor,
14
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
316 aTimestamp, aLink, aContent, aContentType) {
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
317 // Convert the timestamp to milliseconds-since-epoch, which is how we store
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
318 // it in the datastore.
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
319 let timestamp = aTimestamp ? aTimestamp.getTime() : null;
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
320
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
321 // Convert the link to its string spec, which is how we store it
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
322 // in the datastore.
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
323 let link = aLink ? aLink.spec : null;
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
324
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
325 let messageID =
84
915e41848f6d rename universalID to externalID
Myk Melez <myk@mozilla.org>
parents: 76
diff changeset
326 SnowlDatastore.insertMessage(aSourceID, aExternalID, aSubject, aAuthor,
14
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
327 timestamp, link);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
328
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
329 if (aContent)
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
330 SnowlDatastore.insertPart(messageID, aContent, aContentType);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
331
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
332 return messageID;
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
333 },
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
334
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
335 addMetadatum: function(aMessageID, aAttributeName, aValue) {
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
336 // FIXME: speed this up by caching the list of known attributes.
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
337 let attributeID = SnowlDatastore.selectAttributeID(aAttributeName)
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
338 || SnowlDatastore.insertAttribute(aAttributeName);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
339 SnowlDatastore.insertMetadatum(aMessageID, attributeID, aValue);
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
340 },
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
341
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
342 /**
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
343 * Reset the last refreshed time for the given source to the current time.
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
344 *
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
345 * XXX should this be setLastRefreshed and take a time parameter
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
346 * to set the last refreshed time to?
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
347 *
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
348 * aSource {SnowlMessageSource} the source for which to set the time
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
349 */
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
350 resetLastRefreshed: function() {
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
351 let stmt = SnowlDatastore.createStatement("UPDATE sources SET lastRefreshed = :lastRefreshed WHERE id = :id");
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
352 stmt.params.lastRefreshed = new Date().getTime();
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
353 stmt.params.id = this.id;
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
354 stmt.execute();
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
355 }
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
356
74f775701774 refresh sources once per hour
Myk Melez <myk@mozilla.org>
parents:
diff changeset
357 };
76
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
358
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
359 // XXX Should we make this part of the Feed object?
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
360 // FIXME: make this accept a callback to which it reports on its progress
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
361 // so we can provide feedback to the user in subscription interfaces.
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
362 function SnowlFeedSubscriber(aURI, aName) {
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
363 this.uri = aURI;
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
364 this.name = aName;
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
365 }
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
366
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
367 SnowlFeedSubscriber.prototype = {
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
368 uri: null,
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
369 name: null,
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
370
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
371 // Observer Service
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
372 get _obsSvc() {
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
373 let obsSvc = Cc["@mozilla.org/observer-service;1"].
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
374 getService(Ci.nsIObserverService);
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
375 delete this._obsSvc;
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
376 this._obsSvc = obsSvc;
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
377 return this._obsSvc;
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
378 },
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
379
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
380 QueryInterface: function(aIID) {
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
381 if (aIID.equals(Ci.nsIDOMEventListener) ||
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
382 aIID.equals(Ci.nsIFeedResultListener) ||
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
383 aIID.equals(Ci.nsISupports))
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
384 return this;
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
385
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
386 throw Cr.NS_ERROR_NO_INTERFACE;
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
387 },
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
388
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
389 subscribe: function() {
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
390 let request = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance();
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
391
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
392 request = request.QueryInterface(Ci.nsIDOMEventTarget);
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
393 request.addEventListener("load", this, false);
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
394 request.addEventListener("error", this, false);
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
395
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
396 request = request.QueryInterface(Ci.nsIXMLHttpRequest);
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
397 request.open("GET", this.uri.spec, true);
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
398 request.send(null);
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
399 },
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
400
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
401 // nsIDOMEventListener
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
402
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
403 handleEvent: function(aEvent) {
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
404 switch(aEvent.type) {
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
405 case "load":
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
406 this.onLoad(aEvent);
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
407 break;
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
408 case "error":
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
409 this.onError(aEvent);
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
410 break;
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
411 }
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
412 },
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
413
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
414 onLoad: function(aEvent) {
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
415 let request = aEvent.target;
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
416
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
417 // FIXME: notify the user about the problem.
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
418 if (request.responseText.length == 0)
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
419 throw("feed contains no data");
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
420
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
421 let parser = Cc["@mozilla.org/feed-processor;1"].
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
422 createInstance(Ci.nsIFeedProcessor);
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
423 parser.listener = this;
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
424 parser.parseFromString(request.responseText, request.channel.URI);
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
425 },
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
426
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
427 // nsIFeedResultListener
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
428
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
429 handleResult: function(aResult) {
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
430 let feed = aResult.doc.QueryInterface(Components.interfaces.nsIFeed);
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
431
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
432 // Subscribe to the feed.
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
433 let name = this.name || feed.title.plainText();
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
434 let statement = SnowlDatastore.createStatement("INSERT INTO sources (name, machineURI, humanURI) VALUES (:name, :machineURI, :humanURI)");
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
435 statement.params.name = name;
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
436 statement.params.machineURI = this.uri.spec;
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
437 statement.params.humanURI = feed.link.spec;
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
438 dump("subscribing to " + name + " <" + this.uri.spec + ">\n");
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
439 statement.step();
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
440
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
441 let id = SnowlDatastore.dbConnection.lastInsertRowID;
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
442
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
443 // Now refresh the feed to import all its items.
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
444 dump("refreshing " + this.uri.spec + "\n");
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
445 let feed2 = new SnowlFeed(id, this.uri.spec, name);
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
446 feed2.handleResult(aResult);
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
447
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
448 this._obsSvc.notifyObservers(null, "sources:changed", null);
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
449 this._obsSvc.notifyObservers(null, "messages:changed", null);
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
450 }
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
451
1cbd4c5a511b link the source name to the human URI if available; add a new SnowlFeedSubscriber object that can handle subscribing to feeds from various interfaces and which sets the human URI if available; make the OPML importer use the new SnowlFeedSubscriber object
Myk Melez <myk@mozilla.org>
parents: 75
diff changeset
452 };