diff options
Diffstat (limited to 'bandwagon/content/scripts/factory/feedFactory.js')
-rw-r--r-- | bandwagon/content/scripts/factory/feedFactory.js | 626 |
1 files changed, 0 insertions, 626 deletions
diff --git a/bandwagon/content/scripts/factory/feedFactory.js b/bandwagon/content/scripts/factory/feedFactory.js deleted file mode 100644 index b58823b..0000000 --- a/bandwagon/content/scripts/factory/feedFactory.js +++ /dev/null @@ -1,626 +0,0 @@ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is bandwagon. - * - * The Initial Developer of the Original Code is - * David McNamara. - * Portions created by the Initial Developer are Copyright (C) 2008 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -Bandwagon.Factory.FeedFactory = function(connection) -{ - this.Bandwagon = Bandwagon; - this.connection = connection; -} - -Bandwagon.Factory.FeedFactory.prototype.newFeed = function() -{ - return new this.Bandwagon.Model.Feed(); -} - -Bandwagon.Factory.FeedFactory.prototype.openFeed = function(feed_id) -{ - if (!this.connection) - return null; - - var feeds = {}; - - var statement = this.connection.createStatement("SELECT * FROM feeds where id = ?1"); - - try - { - statement.bindInt32Parameter(0, feed_id); - statement.execute(); - - var feed = this._openFeedFromRS(statement); - - if (!feed) - return null; - - feed.feedItems = this._openFeedItems(feed); - - feeds[feed.url] = feed; - } - finally - { - statement.reset(); - } - - return feed; -} - -Bandwagon.Factory.FeedFactory.prototype.openFeeds = function() -{ - if (!this.connection) - return null; - - var feeds = {}; - - var statement = this.connection.createStatement("SELECT * FROM feeds"); - - try - { - while (statement.executeStep()) - { - var feed = this._openFeedFromRS(statement); - - if (!feed) - continue; - - feed.feedItems = this._openFeedItems(feed); - - feeds[feed.url] = feed; - } - } - finally - { - statement.reset(); - } - - return feeds; -} - -Bandwagon.Factory.FeedFactory.prototype.commitFeed = function(feed) -{ - if (!this.connection) - return; - - var statement = this.connection.createStatement("REPLACE INTO feeds VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11)"); - - try - { - (feed.id==-1?statement.bindNullParameter(0):statement.bindInt32Parameter(0, feed.id)); - statement.bindUTF8StringParameter(1, feed.url); - statement.bindUTF8StringParameter(2, feed.name); - statement.bindUTF8StringParameter(3, feed.description); - statement.bindInt32Parameter(4, feed.dateAdded.getTime()/1000); - (feed.dateLastCheck == null?statement.bindNullParameter(5):statement.bindInt32Parameter(5, feed.dateLastCheck.getTime()/1000)); - statement.bindInt32Parameter(6, feed.updateInterval); - statement.bindInt32Parameter(7, (feed.showNotifications?1:0)); - statement.bindInt32Parameter(8, (feed.autoPublish?1:0)); - statement.bindInt32Parameter(9, (feed.active?1:0)); - statement.bindInt32Parameter(10, feed.feedItemsPerPage); - - statement.execute(); - } - finally - { - statement.reset(); - } - - if (feed.id == -1) - { - feed.id = this.connection.lastInsertRowID; - } - - for (var id in feed.feedItems) - { - this._commitFeedItem(feed, feed.feedItems[id]); - } - - return true; -} - -Bandwagon.Factory.FeedFactory.prototype.commitFeeds = function(feeds) -{ - for (var id in feeds) - { - this.commitFeed(feeds[id]); - } -} - -Bandwagon.Factory.FeedFactory.prototype.deleteFeed = function(feed) -{ - if (!this.connection) - return null; - - var statement1 = this.connection.createStatement("DELETE FROM feeds where id = ?1"); - var statement2 = this.connection.createStatement("DELETE FROM feedItems where feed = ?1"); - - try - { - // TODO transaction here? - - statement1.bindInt32Parameter(0, feed.id); - statement1.execute(); - - statement2.bindInt32Parameter(0, feed.id); - statement2.execute(); - } - finally - { - statement1.reset(); - statement2.reset(); - } - - return (statement2.lastError>0?false:true); -} - -// private methods - -Bandwagon.Factory.FeedFactory.prototype._openFeedFromRS = function(resultset) -{ - var feed = new this.Bandwagon.Model.Feed(); - feed.id = resultset.getInt32(0); - feed.url = resultset.getUTF8String(1); - feed.name = resultset.getUTF8String(2); - feed.description = resultset.getUTF8String(3); - feed.dateAdded = new Date(resultset.getInt32(4)*1000); - - if (!resultset.getIsNull(5)) - feed.dateLastCheck = new Date(resultset.getInt32(5)*1000); - - feed.updateInterval = resultset.getInt32(6); - feed.showNotifications = (resultset.getInt32(7)==1?true:false); - feed.autoPublish = (resultset.getInt32(8)==1?true:false); - feed.active = (resultset.getInt32(9)==1?true:false); - feed.feedItemsPerPage = resultset.getInt32(10); - - return feed; -} - -Bandwagon.Factory.FeedFactory.prototype._openFeedItems = function(feed) -{ - var feedItems = {}; - - var statement = this.connection.createStatement("SELECT addons.*, feedItems.id, feedItems.read FROM addons LEFT JOIN feedItems ON addons.id = feedItems.addon WHERE feedItems.feed = ?1 LIMIT ?2"); - - try - { - statement.bindInt32Parameter(0, feed.id); - statement.bindInt32Parameter(1, this.Bandwagon.DEFAULT_FEED_ITEMS_PER_PAGE); - - while (statement.executeStep()) - { - var feedItem = new this.Bandwagon.Model.FeedItem(); - feedItem.Bandwagon = this.Bandwagon; - - feedItem.id = statement.getInt32(0); - feedItem.guid = statement.getUTF8String(1); - feedItem.name = statement.getUTF8String(2); - feedItem.type = statement.getInt32(3); - feedItem.version = statement.getUTF8String(4); - feedItem.status = statement.getInt32(5); - feedItem.summary = statement.getUTF8String(6); - feedItem.description = statement.getUTF8String(7); - feedItem.icon = statement.getUTF8String(8); - feedItem.eula = statement.getUTF8String(9); - feedItem.thumbnail = statement.getUTF8String(10); - feedItem.learnmore = statement.getUTF8String(11); - feedItem.author = statement.getUTF8String(12); - feedItem.category = statement.getUTF8String(13); - feedItem.dateAdded = new Date(statement.getInt32(14)*1000); - feedItem.feedItemId = statement.getInt32(15); - feedItem.read = (statement.getInt32(16)==1?true:false); - - feedItem.compatibleApplications = this._openFeedItemCompatibleApplications(feedItem); - feedItem.compatibleOS = this._openFeedItemCompatibleOS(feedItem); - feedItem.installs = this._openFeedItemInstalls(feedItem); - feedItem.comments = this._openFeedItemComments(feedItem); - - feedItems[feedItem.guid] = feedItem; - } - } - finally - { - statement.reset(); - } - - return feedItems; -} - -Bandwagon.Factory.FeedFactory.prototype._openFeedItemCompatibleApplications = function(feedItem) -{ - var compatibleApplications = {}; - - var statement = this.connection.createStatement("SELECT * FROM addonCompatibleApplications WHERE addon = ?1"); - - try - { - statement.bindInt32Parameter(0, feedItem.id); - - while (statement.executeStep()) - { - var application = - { - name: statement.getUTF8String(1).toString().toUpperCase(), - applicationId: statement.getInt32(2), - minVersion: statement.getUTF8String(3), - maxVersion: statement.getUTF8String(4), - guid: statement.getUTF8String(5) - }; - - compatibleApplications[application.name.toUpperCase()] = application; - } - } - finally - { - statement.reset(); - } - - return compatibleApplications; -} - -Bandwagon.Factory.FeedFactory.prototype._openFeedItemCompatibleOS = function(feedItem) -{ - var compatibleOS = {}; - - var statement = this.connection.createStatement("SELECT * FROM addonCompatibleOS WHERE addon = ?1"); - - try - { - statement.bindInt32Parameter(0, feedItem.id); - - while (statement.executeStep()) - { - var os = statement.getUTF8String(1).toString().toUpperCase(); - - compatibleOS[os] = os; - } - } - finally - { - statement.reset(); - } - - return compatibleOS; -} - -Bandwagon.Factory.FeedFactory.prototype._openFeedItemInstalls = function(feedItem) -{ - var installs = {}; - - var statement = this.connection.createStatement("SELECT * FROM addonInstalls WHERE addon = ?1"); - - try - { - statement.bindInt32Parameter(0, feedItem.id); - - while (statement.executeStep()) - { - var install = - { - url: statement.getUTF8String(1), - hash: statement.getUTF8String(2), - os: statement.getUTF8String(3).toString().toUpperCase() - }; - - installs[install.os] = install; - } - } - finally - { - statement.reset(); - } - - return installs; -} - -Bandwagon.Factory.FeedFactory.prototype._openFeedItemComments = function(feedItem) -{ - var comments = []; - - var statement = this.connection.createStatement("SELECT * FROM addonComments WHERE addon = ?1"); - - try - { - statement.bindInt32Parameter(0, feedItem.id); - - while (statement.executeStep()) - { - var comment = - { - comment: statement.getUTF8String(1), - author: statement.getUTF8String(2) - }; - - comments.push(comment); - } - } - finally - { - statement.reset(); - } - - return comments; -} - -Bandwagon.Factory.FeedFactory.prototype._commitFeedItem = function(feed, feedItem) -{ - if (!this.connection) - return; - - // addons - // if guid already exists - just update the addon - // if guid doesn't exist - insert - - var statement = this.connection.createStatement("SELECT id FROM addons where guid = ?1"); - var addonid = null; - - try - { - statement.bindUTF8StringParameter(0, feedItem.guid); - - while (statement.executeStep()) - { - addonid = statement.getInt32(0); - } - } - finally - { - statement.reset(); - } - - var statement2 = this.connection.createStatement("REPLACE INTO addons VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13, ?14, ?15)"); - - try - { - if (addonid != null) - { - // addon already exists (in another feed, or from previous commit of this feed) - statement2.bindInt32Parameter(0, addonid); - } - else if (feedItem.id != -1) - { - // addon doesn't already exist, but exists from a previous commit of this feed (?) - statement2.bindInt32Parameter(0, feedItem.id); - } - else - { - // new addon - statement2.bindNullParameter(0) - } - - statement2.bindUTF8StringParameter(1, feedItem.guid); - statement2.bindUTF8StringParameter(2, feedItem.name); - statement2.bindInt32Parameter(3, feedItem.type); - statement2.bindUTF8StringParameter(4, feedItem.version); - statement2.bindInt32Parameter(5, feedItem.status); - statement2.bindUTF8StringParameter(6, feedItem.summary); - statement2.bindUTF8StringParameter(7, feedItem.description); - statement2.bindUTF8StringParameter(8, feedItem.icon); - statement2.bindUTF8StringParameter(9, feedItem.eula); - statement2.bindUTF8StringParameter(10, feedItem.thumbnail); - statement2.bindUTF8StringParameter(11, feedItem.learnmore); - statement2.bindUTF8StringParameter(12, feedItem.author); - statement2.bindUTF8StringParameter(13, feedItem.category); - statement2.bindUTF8StringParameter(14, feedItem.dateAdded.getTime()/1000); - - statement2.execute(); - } - finally - { - statement2.reset(); - } - - if (feedItem.id == -1 && addonid == null) - { - addonid = this.connection.lastInsertRowID; - } - - // add the other addon bits - - for (var id in feedItem.compatibleApplications) - { - this._commitAddonCompatibleApplication(addonid, feedItem.compatibleApplications[id]); - } - - for (var id in feedItem.compatibleOS) - { - this._commitAddonCompatibleOS(addonid, feedItem.compatibleOS[id]); - } - - for (var id in feedItem.installs) - { - this._commitAddonInstall(addonid, feedItem.installs[id]); - } - - for (var i=0; i<feedItem.comments.length; i++) - { - this._commitAddonComment(addonid, feedItem.comments[i]); - } - - // add the feedItem connector - - var statement3 = this.connection.createStatement("REPLACE INTO feedItems VALUES (?1, ?2, ?3, ?4)"); - - try - { - if (feedItem.feedItemId == -1) - { - statement3.bindNullParameter(0); - } - else - { - statement3.bindInt32Parameter(0, feedItem.feedItemId); - } - - statement3.bindInt32Parameter(1, feed.id); - statement3.bindInt32Parameter(2, addonid); - statement3.bindInt32Parameter(3, (feedItem.read?1:0)); - - statement3.execute(); - } - finally - { - statement3.reset(); - } - - if (feedItem.feedItemId == -1) - { - feedItem.feedItemId = this.connection.lastInsertRowID; - } - - return true; -} - -Bandwagon.Factory.FeedFactory.prototype._commitAddonCompatibleApplication = function(addonid, application) -{ - var statement = this.connection.createStatement("DELETE FROM addonCompatibleApplications WHERE addon = ?1"); - - try - { - statement.bindInt32Parameter(0, addonid); - statement.execute(); - } - finally - { - statement.reset(); - } - - var statement2 = this.connection.createStatement("INSERT INTO addonCompatibleApplications VALUES (?1, ?2, ?3, ?4, ?5, ?6)"); - - try - { - statement2.bindInt32Parameter(0, addonid); - statement2.bindUTF8StringParameter(1, application.name); - statement2.bindInt32Parameter(2, application.applicationId); - statement2.bindUTF8StringParameter(3, application.minVersion); - statement2.bindUTF8StringParameter(4, application.maxVersion); - statement2.bindUTF8StringParameter(5, application.guid); - - statement2.execute(); - } - finally - { - statement2.reset(); - } -} - -Bandwagon.Factory.FeedFactory.prototype._commitAddonCompatibleOS = function(addonid, os) -{ - var statement = this.connection.createStatement("DELETE FROM addonCompatibleOS WHERE addon = ?1"); - - try - { - statement.bindInt32Parameter(0, addonid); - statement.execute(); - } - finally - { - statement.reset(); - } - - var statement2 = this.connection.createStatement("INSERT INTO addonCompatibleOS VALUES (?1, ?2)"); - - try - { - statement2.bindInt32Parameter(0, addonid); - statement2.bindUTF8StringParameter(1, os); - - statement2.execute(); - } - finally - { - statement2.reset(); - } -} - -Bandwagon.Factory.FeedFactory.prototype._commitAddonInstall = function(addonid, install) -{ - var statement = this.connection.createStatement("DELETE FROM addonInstalls WHERE addon = ?1"); - - try - { - statement.bindInt32Parameter(0, addonid); - statement.execute(); - } - finally - { - statement.reset(); - } - - var statement2 = this.connection.createStatement("INSERT INTO addonInstalls VALUES (?1, ?2, ?3, ?4)"); - - try - { - statement2.bindInt32Parameter(0, addonid); - statement2.bindUTF8StringParameter(1, install.url); - statement2.bindUTF8StringParameter(2, install.hash); - statement2.bindUTF8StringParameter(3, install.os); - - statement2.execute(); - } - finally - { - statement2.reset(); - } -} - -Bandwagon.Factory.FeedFactory.prototype._commitAddonComment = function(addonid, comment) -{ - var statement = this.connection.createStatement("DELETE FROM addonComments WHERE addon = ?1"); - - try - { - statement.bindInt32Parameter(0, addonid); - statement.execute(); - } - finally - { - statement.reset(); - } - - var statement2 = this.connection.createStatement("INSERT INTO addonComments VALUES (?1, ?2, ?3)"); - - try - { - statement2.bindInt32Parameter(0, addonid); - statement2.bindUTF8StringParameter(1, comment.comment); - statement2.bindUTF8StringParameter(2, comment.author); - - statement2.execute(); - } - finally - { - statement2.reset(); - } -} - |