aria2HttpRpcService.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. (function () {
  2. 'use strict';
  3. angular.module('ariaNg').factory('aria2HttpRpcService', ['$http', 'ariaNgCommonService', 'ariaNgSettingService', 'ariaNgLogService', function ($http, ariaNgCommonService, ariaNgSettingService, ariaNgLogService) {
  4. var rpcUrl = ariaNgSettingService.getCurrentRpcUrl();
  5. var method = ariaNgSettingService.getCurrentRpcHttpMethod();
  6. var getUrlWithQueryString = function (url, parameters) {
  7. if (!url || url.length < 1) {
  8. return url;
  9. }
  10. var queryString = '';
  11. for (var key in parameters) {
  12. if (!parameters.hasOwnProperty(key)) {
  13. continue;
  14. }
  15. var value = parameters[key];
  16. if (value === null || angular.isUndefined(value)) {
  17. continue;
  18. }
  19. if (queryString.length > 0) {
  20. queryString += '&';
  21. }
  22. if (angular.isObject(value) || angular.isArray(value)) {
  23. value = angular.toJson(value);
  24. value = ariaNgCommonService.base64Encode(value);
  25. value = encodeURIComponent(value);
  26. }
  27. queryString += key + '=' + value;
  28. }
  29. if (queryString.length < 1) {
  30. return url;
  31. }
  32. if (url.indexOf('?') < 0) {
  33. queryString = '?' + queryString;
  34. } else {
  35. queryString = '&' + queryString;
  36. }
  37. return url + queryString;
  38. };
  39. return {
  40. request: function (context) {
  41. if (!context) {
  42. return;
  43. }
  44. var requestContext = {
  45. url: rpcUrl,
  46. method: method
  47. };
  48. if (requestContext.method === 'POST') {
  49. requestContext.data = context.requestBody;
  50. } else if (requestContext.method === 'GET') {
  51. requestContext.url = getUrlWithQueryString(requestContext.url, context.requestBody);
  52. }
  53. ariaNgLogService.debug('[aria2HttpRpcService.request] ' + (context && context.requestBody && context.requestBody.method ? context.requestBody.method + ' ' : '') + 'request start', requestContext);
  54. return $http(requestContext).then(function onSuccess(response) {
  55. var data = response.data;
  56. ariaNgLogService.debug('[aria2HttpRpcService.request] ' + (context && context.requestBody && context.requestBody.method ? context.requestBody.method + ' ' : '') + 'response success', response);
  57. if (!data) {
  58. return;
  59. }
  60. if (context.connectionSuccessCallback) {
  61. context.connectionSuccessCallback({
  62. rpcUrl: rpcUrl,
  63. method: method
  64. });
  65. }
  66. if (context.successCallback) {
  67. context.successCallback(data.id, data.result);
  68. }
  69. }).catch(function onError(response) {
  70. var data = response.data;
  71. ariaNgLogService.debug('[aria2HttpRpcService.request] ' + (context && context.requestBody && context.requestBody.method ? context.requestBody.method + ' ' : '') + 'response error', response);
  72. if (!data) {
  73. data = {
  74. id: '-1',
  75. error: {
  76. // code: '-1',
  77. // message: 'Unknown Error',
  78. innerError: true
  79. }
  80. };
  81. if (context.connectionFailedCallback) {
  82. context.connectionFailedCallback({
  83. rpcUrl: rpcUrl,
  84. method: method
  85. });
  86. }
  87. }
  88. if (context.errorCallback) {
  89. context.errorCallback(data.id, data.error);
  90. }
  91. });
  92. },
  93. on: function (eventName, callback) {
  94. //Not implement
  95. }
  96. };
  97. }]);
  98. }());