nextcloud-tasks/js/app/services/request.js

148 lines
3.8 KiB
JavaScript

/**
* Nextcloud - Tasks
*
* @author Raimund Schlüßler
* @copyright 2017 Raimund Schlüßler <raimund.schluessler@googlemail.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
* License as published by the Free Software Foundation; either
* version 3 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
*
* You should have received a copy of the GNU Affero General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
angular.module('Tasks').factory('Request', [
'$http', 'Publisher', function($http, Publisher) {
'use strict';
var Request = (function() {
function Request($http, publisher) {
this.$http = $http;
this.publisher = publisher;
this.count = 0;
this.initialized = false;
this.shelvedRequests = [];
this.initialized = true;
this._executeShelvedRequests();
}
Request.prototype.request = function(route, data) {
var defaultConfig, defaultData, url;
if (data === null) {
data = {};
}
defaultData = {
routeParams: {},
data: {},
onSuccess: function() {
return {};
},
onFailure: function() {
return {};
},
config: {}
};
angular.extend(defaultData, data);
if (!this.initialized) {
this._shelveRequest(route, defaultData);
return;
}
url = OC.generateUrl(route, defaultData.routeParams);
defaultConfig = {
url: url,
data: defaultData.data
};
angular.extend(defaultConfig, defaultData.config);
if (defaultConfig.method === 'GET') {
defaultConfig.params = defaultConfig.data;
}
return this.$http(defaultConfig).success((function(_this) {
return function(data, status, headers, config) {
var name, ref, value;
ref = data.data;
for (name in ref) {
value = ref[name];
_this.publisher.publishDataTo(value, name);
}
return defaultData.onSuccess(data, status, headers, config);
};
})(this)).error(function(data, status, headers, config) {
return defaultData.onFailure(data, status, headers, config);
});
};
Request.prototype.post = function(route, data) {
if (data === null) {
data = {};
}
if (!data.config) {
data.config = {};
}
data.config.method = 'POST';
return this.request(route, data);
};
Request.prototype.get = function(route, data) {
if (data === null) {
data = {};
}
if (!data.config) {
data.config = {};
}
data.config.method = 'GET';
return this.request(route, data);
};
Request.prototype.put = function(route, data) {
if (data === null) {
data = {};
}
if (!data.config) {
data.config = {};
}
data.config.method = 'PUT';
return this.request(route, data);
};
Request.prototype["delete"] = function(route, data) {
if (data === null) {
data = {};
}
if (!data.config) {
data.config = {};
}
data.config.method = 'DELETE';
return this.request(route, data);
};
Request.prototype._shelveRequest = function(route, data) {
var request = {
route: route,
data: data
};
return this.shelvedRequests.push(request);
};
Request.prototype._executeShelvedRequests = function() {
var r, ref, results, _i, _len;
ref = this.shelvedRequests;
results = [];
for (_i = 0, _len = ref.length; _i < _len; _i++) {
r = ref[_i];
results.push(this.request(r.route, r.data));
}
return results;
};
return Request;
})();
return new Request($http, Publisher);
}
]);