diff options
Diffstat (limited to 'bandwagon/content/scripts/rpc/service.js')
-rw-r--r-- | bandwagon/content/scripts/rpc/service.js | 204 |
1 files changed, 151 insertions, 53 deletions
diff --git a/bandwagon/content/scripts/rpc/service.js b/bandwagon/content/scripts/rpc/service.js index 3d86270..dbf2eef 100644 --- a/bandwagon/content/scripts/rpc/service.js +++ b/bandwagon/content/scripts/rpc/service.js @@ -46,7 +46,8 @@ Bandwagon.RPC.Service = function() // private instance variables this._observers = new Array(); this._logger = null; - this._serviceRootURL = this.Bandwagon.RPC.Constants.BANDWAGON_RPC_BASE_URL; + this._serviceDocument = null; + this._serviceRootURL = this.Bandwagon.RPC.Constants.BANDWAGON_RPC_SERVICE_DOCUMENT; this.rpcComplete = function(rpcnet, result, response, type, callback) { @@ -119,6 +120,10 @@ Bandwagon.RPC.Service = function() rpcnet.setMethod("POST"); rpcnet.setPostData(data); } + else if (method == "DELETE") + { + rpcnet.setMethod("DELETE"); + } else { rpcnet.setMethod("GET"); @@ -189,30 +194,59 @@ Bandwagon.RPC.Service.prototype.unregisterObserver = function(observerId) * Bandwagon Protocol Methods Below Here */ -Bandwagon.RPC.Service.prototype.getFeed = function(feed, callback) +Bandwagon.RPC.Service.prototype.getServiceDocument = function(callback) +{ + var service = this; + + this._logger.debug("Bandwagon.RPC.Service.getServiceDocument: getting service document for logged in user"); + + var internalCallback = function(event) + { + if (event.isError()) + { + } + else + { + event.serviceDocument = new Bandwagon.Model.ServiceDocument(); + event.serviceDocument.unserialize(event.getData()); + } + + if (callback) + { + callback(event); + } + } + + this.rpcSend(service.Bandwagon.RPC.Constants.BANDWAGON_RPC_EVENT_TYPE_BANDWAGON_RPC_GET_SERVICE_DOCUMENT_COMPLETE, + internalCallback, + service.Bandwagon.RPC.Constants.BANDWAGON_RPC_SERVICE_DOCUMENT, + "GET", + null); +} + +Bandwagon.RPC.Service.prototype.getCollection = function(collection, callback) { var service = this; - this._logger.debug("Bandwagon.RPC.Service.login: getting updates for feed '" + feed.url + "' ..."); + this._logger.debug("Bandwagon.RPC.Service.getCollection: getting updates for collection '" + collection.toString() + "' ..."); - feed.status = feed.STATUS_LOADING; + collection.status = collection.STATUS_LOADING; - // TODO feed.password handling goes here var data = null; var internalCallback = function(event) { if (event.isError()) { - feed.status = feed.STATUS_LOADERROR; + collection.status = collection.STATUS_LOADERROR; } else { - feed.unserialize(event.getData()); - feed.status = feed.STATUS_LOADED; + collection.unserialize(event.getData()); + collection.status = collection.STATUS_LOADED; } - event.feed = feed; + event.collection = collection; if (callback) { @@ -220,53 +254,143 @@ Bandwagon.RPC.Service.prototype.getFeed = function(feed, callback) } } - this.rpcSend(service.Bandwagon.RPC.Constants.BANDWAGON_RPC_EVENT_TYPE_BANDWAGON_RPC_GET_FEED_COMPLETE, + this.rpcSend(service.Bandwagon.RPC.Constants.BANDWAGON_RPC_EVENT_TYPE_BANDWAGON_RPC_GET_COLLECTION_COMPLETE, internalCallback, - feed.url, + collection.resourceURL, "GET", data); } -Bandwagon.RPC.Service.prototype.subscribeFeed = function(feed, callback) +Bandwagon.RPC.Service.prototype.newCollection = function(collection, callback) +{ + var service = this; + + this._logger.debug("Bandwagon.RPC.Service.newCollection: creating new collection '" + collection.toString() + "' ..."); + + if (collection.name == "" || service._serviceDocument == null) + { + if (callback) + callback(new this.Bandwagon.RPC.Event()); + + return; + } + + var data = { + name: collection.name, + description: collection.description, + nickname: collection.getNicknameFromName(), + listed: (collection.listed?1:0) + }; + + var internalCallback = function(event) + { + if (event.isError()) + { + collection.status = collection.STATUS_LOADERROR; + } + else + { + collection.unserialize(event.getData()); + collection.status = collection.STATUS_LOADED; + } + + event.collection = collection; + + if (callback) + { + callback(event); + } + } + + this.rpcSend(service.Bandwagon.RPC.Constants.BANDWAGON_RPC_EVENT_TYPE_BANDWAGON_RPC_NEW_COLLECTION_COMPLETE, + internalCallback, + service._serviceDocument.collectionListResourceURL, + "POST", + data); +} + + +/** OBSOLETE +Bandwagon.RPC.Service.prototype.subscribeCollection = function(collection, callback) { - Bandwagon.Logger.debug("Bandwagon.RPC.Service.subscribeFeed: TBD"); + Bandwagon.Logger.debug("Bandwagon.RPC.Service.subscribeCollection: TBD"); // TODO if (callback) callback(new this.Bandwagon.RPC.Event()); } +*/ -Bandwagon.RPC.Service.prototype.unsubscribeFeed = function(feed, callback) +/** OBSOLETE +Bandwagon.RPC.Service.prototype.unsubscribeCollection = function(collection, callback) { - Bandwagon.Logger.debug("Bandwagon.RPC.Service.unsubscribeFeed: TBD"); + Bandwagon.Logger.debug("Bandwagon.RPC.Service.unsubscribeCollection: TBD"); // TODO if (callback) callback(new this.Bandwagon.RPC.Event()); } +*/ -Bandwagon.RPC.Service.prototype.publishToFeed = function(extension, feed, personalNote, callback) +Bandwagon.RPC.Service.prototype.removeAddonFromCollection = function(guid, collection, callback) { - Bandwagon.Logger.debug("Bandwagon.RPC.Service.publishToFeed: extension.guid = '" + extension.guid + "', extension.name = '" + extension.name + "', feed = '" + feed.url + "', personalNote = '" + personalNote + "'"); - Bandwagon.Logger.debug("Bandwagon.RPC.Service.publishToFeed: TBD"); + var service = this; - // TODO + if (guid.substring(0,1) == "{") + { + guid = guid.substring(1, guid.length-2); + } - if (callback) + Bandwagon.Logger.debug("Bandwagon.RPC.Service.removeAddonFromCollection: extension.guid = '" + guid + "', collection = '" + collection.resourceURL); + + var internalCallback = function(event) + { + // don't need to do anything here + if (callback) + callback(event); + } + + this.rpcSend(service.Bandwagon.RPC.Constants.BANDWAGON_RPC_EVENT_TYPE_BANDWAGON_RPC_REMOVE_ADDON_FROM_COLLECTION_COMPLETE, + internalCallback, + collection.addonsResourceURL + guid, + "DELETE", + null); +} + +Bandwagon.RPC.Service.prototype.publishToCollection = function(extension, collection, personalNote, callback) +{ + var service = this; + + Bandwagon.Logger.debug("Bandwagon.RPC.Service.publishToCollection: extension.guid = '" + extension.guid + "', extension.name = '" + extension.name + "', collection = '" + collection.resourceURL + "', personalNote = '" + personalNote + "'"); + + var data = { + "guid": extension.guid, + "comments": personalNote + }; + + var internalCallback = function(event) { - setTimeout(function() { callback(new this.Bandwagon.RPC.Event()) }, 2000); + // don't need to do anything here + if (callback) + callback(event); } + + this.rpcSend(service.Bandwagon.RPC.Constants.BANDWAGON_RPC_EVENT_TYPE_BANDWAGON_RPC_PUBLISH_COMPLETE, + internalCallback, + collection.addonsResourceURL, + "POST", + data); } Bandwagon.RPC.Service.prototype.shareToEmail = function(extension, emailAddress, personalNote, callback) { var service = this; - Bandwagon.Logger.debug("Bandwagon.RPC.Service.publishToFeed: extension.guid = '" + extension.guid + "', extension.name = '" + extension.name + "', emailAddress = '" + emailAddress + "', personalNote = '" + personalNote + "'"); + Bandwagon.Logger.debug("Bandwagon.RPC.Service.shareToEmail: extension.guid = '" + extension.guid + "', extension.name = '" + extension.name + "', emailAddress = '" + emailAddress + "', personalNote = '" + personalNote + "'"); - if (!extension.guid || extension.guid == "" || !emailAddress || emailAddress == "") + if (!extension.guid || extension.guid == "" || !emailAddress || emailAddress == "" || service._serviceDocument == null) { if (callback) callback(new this.Bandwagon.RPC.Event()); @@ -274,48 +398,22 @@ Bandwagon.RPC.Service.prototype.shareToEmail = function(extension, emailAddress, return; } - var data = null; - var data = { "guid": extension.guid, - "emails[0]": emailAddress, - "message": personalNote + "to": emailAddress, + "comments": personalNote }; var internalCallback = function(event) { - if (!event.isError()) - { - // check for service level errors - - var response = event.getData(); - - // success has a body of "<success/>" - // failure has a body e.g. "<error>Add-on not found!</error>" - - if (response.name() == "success") - { - // all ok - } - else if (response.name() == "error") - { - // "expected" error -- update the event to indicate this error - event.setError(new service.Bandwagon.RPC.Error(service.Bandwagon.RPC.Constants.BANDWAGON_RPC_SERVICE_ERROR, response.text().toString())); - } - else - { - // unknown response -- update the event to indicate an error - event.setError(new service.Bandwagon.RPC.Error(service.Bandwagon.RPC.Constants.BANDWAGON_RPC_SERVICE_ERROR_UNEXPECTED_XML)); - } - } - + // don't need to do anything here if (callback) callback(event); } this.rpcSend(service.Bandwagon.RPC.Constants.BANDWAGON_RPC_EVENT_TYPE_BANDWAGON_RPC_SHARE_TO_EMAIL_COMPLETE, internalCallback, - service.Bandwagon.RPC.Constants.BANDWAGON_RPC_EVENT_TYPE_BANDWAGON_RPC_SHARE_TO_EMAIL_ACTION, + service._serviceDocument.emailResourceURL, "POST", data); } |