This repository has been archived on 2022-01-02. You can view files and clone it, but cannot push or open issues or pull requests.
AriaNg/src/scripts/services/aria2HttpRpcService.js

124 lines
4.4 KiB
JavaScript
Raw Normal View History

(function () {
'use strict';
2018-08-12 10:59:21 +02:00
angular.module('ariaNg').factory('aria2HttpRpcService', ['$http', 'ariaNgCommonService', 'ariaNgSettingService', 'ariaNgLogService', function ($http, ariaNgCommonService, ariaNgSettingService, ariaNgLogService) {
2017-03-19 16:36:14 +01:00
var rpcUrl = ariaNgSettingService.getCurrentRpcUrl();
var method = ariaNgSettingService.getCurrentRpcHttpMethod();
var getUrlWithQueryString = function (url, parameters) {
if (!url || url.length < 1) {
return url;
}
var queryString = '';
for (var key in parameters) {
if (!parameters.hasOwnProperty(key)) {
continue;
}
var value = parameters[key];
if (value === null || angular.isUndefined(value)) {
continue;
}
if (queryString.length > 0) {
queryString += '&';
}
if (angular.isObject(value) || angular.isArray(value)) {
value = angular.toJson(value);
2018-08-12 10:59:21 +02:00
value = ariaNgCommonService.base64Encode(value);
value = encodeURIComponent(value);
}
queryString += key + '=' + value;
}
if (queryString.length < 1) {
return url;
}
if (url.indexOf('?') < 0) {
queryString = '?' + queryString;
} else {
queryString = '&' + queryString;
}
return url + queryString;
};
return {
request: function (context) {
if (!context) {
return;
}
var requestContext = {
url: rpcUrl,
method: method
};
if (requestContext.method === 'POST') {
requestContext.data = context.requestBody;
} else if (requestContext.method === 'GET') {
requestContext.url = getUrlWithQueryString(requestContext.url, context.requestBody);
}
2018-04-05 18:58:14 +02:00
ariaNgLogService.debug('[aria2HttpRpcService.request] ' + (context && context.requestBody && context.requestBody.method ? context.requestBody.method + ' ' : '') + 'request start', requestContext);
2016-11-06 15:41:28 +01:00
2017-05-19 17:36:37 +02:00
return $http(requestContext).then(function onSuccess(response) {
var data = response.data;
2018-04-05 18:58:14 +02:00
ariaNgLogService.debug('[aria2HttpRpcService.request] ' + (context && context.requestBody && context.requestBody.method ? context.requestBody.method + ' ' : '') + 'response success', response);
2016-11-06 15:41:28 +01:00
2016-05-31 18:01:16 +02:00
if (!data) {
return;
}
if (context.connectionSuccessCallback) {
context.connectionSuccessCallback({
rpcUrl: rpcUrl,
method: method
});
}
2016-06-10 13:23:16 +02:00
if (context.successCallback) {
context.successCallback(data.id, data.result);
}
2017-05-19 17:36:37 +02:00
}).catch(function onError(response) {
var data = response.data;
2018-04-05 18:58:14 +02:00
ariaNgLogService.debug('[aria2HttpRpcService.request] ' + (context && context.requestBody && context.requestBody.method ? context.requestBody.method + ' ' : '') + 'response error', response);
2016-11-06 15:41:28 +01:00
2016-06-02 18:16:27 +02:00
if (!data) {
data = {
id: '-1',
error: {
// code: '-1',
// message: 'Unknown Error',
innerError: true
}
};
if (context.connectionFailedCallback) {
context.connectionFailedCallback({
rpcUrl: rpcUrl,
method: method
});
}
2016-06-02 18:16:27 +02:00
}
2016-06-04 11:08:42 +02:00
if (context.errorCallback) {
2016-06-10 13:23:16 +02:00
context.errorCallback(data.id, data.error);
2016-06-02 18:16:27 +02:00
}
});
2016-06-28 18:18:17 +02:00
},
on: function (eventName, callback) {
//Not implement
}
};
}]);
2016-08-01 16:49:16 +02:00
}());