Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/bandwagon/content/scripts/rpc/service.js
diff options
context:
space:
mode:
Diffstat (limited to 'bandwagon/content/scripts/rpc/service.js')
-rw-r--r--bandwagon/content/scripts/rpc/service.js204
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);
}