aria2HttpRpcService.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. (function () {
  2. 'use strict';
  3. angular.module('ariaNg').factory('aria2HttpRpcService', ['ariaNgNativeElectronService', 'ariaNgConstants', 'ariaNgCommonService', 'ariaNgSettingService', 'ariaNgLogService', function (ariaNgNativeElectronService, ariaNgConstants, ariaNgCommonService, ariaNgSettingService, ariaNgLogService) {
  4. var rpcUrl = ariaNgSettingService.getCurrentRpcUrl();
  5. var method = ariaNgSettingService.getCurrentRpcHttpMethod();
  6. var requestHeaders = ariaNgSettingService.getCurrentRpcRequestHeaders();
  7. var getUrlWithQueryString = function (url, parameters) {
  8. if (!url || url.length < 1) {
  9. return url;
  10. }
  11. var queryString = '';
  12. for (var key in parameters) {
  13. if (!parameters.hasOwnProperty(key)) {
  14. continue;
  15. }
  16. var value = parameters[key];
  17. if (value === null || angular.isUndefined(value)) {
  18. continue;
  19. }
  20. if (queryString.length > 0) {
  21. queryString += '&';
  22. }
  23. if (angular.isObject(value) || angular.isArray(value)) {
  24. value = angular.toJson(value);
  25. value = ariaNgCommonService.base64Encode(value);
  26. value = encodeURIComponent(value);
  27. }
  28. queryString += key + '=' + value;
  29. }
  30. if (queryString.length < 1) {
  31. return url;
  32. }
  33. if (url.indexOf('?') < 0) {
  34. queryString = '?' + queryString;
  35. } else {
  36. queryString = '&' + queryString;
  37. }
  38. return url + queryString;
  39. };
  40. return {
  41. request: function (context) {
  42. if (!context) {
  43. return;
  44. }
  45. var requestContext = {
  46. url: rpcUrl,
  47. method: method,
  48. headers: {},
  49. timeout: ariaNgConstants.httpRequestTimeout
  50. };
  51. if (requestContext.method === 'POST') {
  52. requestContext.data = angular.toJson(context.requestBody);
  53. requestContext.headers['Content-Type'] = 'application/json';
  54. } else if (requestContext.method === 'GET') {
  55. requestContext.url = getUrlWithQueryString(requestContext.url, context.requestBody);
  56. }
  57. if (requestHeaders) {
  58. var lines = requestHeaders.split('\n');
  59. for (var i = 0; i < lines.length; i++) {
  60. var items = lines[i].split(':');
  61. if (items.length !== 2) {
  62. continue;
  63. }
  64. var name = items[0].trim();
  65. var value = items[1].trim();
  66. requestContext.headers[name] = value;
  67. }
  68. }
  69. ariaNgLogService.debug('[aria2HttpRpcService.request] ' + (context && context.requestBody && context.requestBody.method ? context.requestBody.method + ' ' : '') + 'request start', requestContext);
  70. return ariaNgNativeElectronService.requestHttp(requestContext).then(function onSuccess(response) {
  71. var data = response.data;
  72. ariaNgLogService.debug('[aria2HttpRpcService.request] ' + (context && context.requestBody && context.requestBody.method ? context.requestBody.method + ' ' : '') + 'response success', response);
  73. if (!data) {
  74. return;
  75. }
  76. if (context.connectionSuccessCallback) {
  77. context.connectionSuccessCallback({
  78. rpcUrl: rpcUrl,
  79. method: method
  80. });
  81. }
  82. if (context.successCallback) {
  83. context.successCallback(data.id, data.result);
  84. }
  85. }).catch(function onError(response) {
  86. var data = response.data;
  87. ariaNgLogService.debug('[aria2HttpRpcService.request] ' + (context && context.requestBody && context.requestBody.method ? context.requestBody.method + ' ' : '') + 'response error', response);
  88. if (!data) {
  89. data = {
  90. id: '-1',
  91. error: {
  92. message: 'Cannot connect to aria2!'
  93. }
  94. };
  95. if (context.connectionFailedCallback) {
  96. context.connectionFailedCallback({
  97. rpcUrl: rpcUrl,
  98. method: method
  99. });
  100. }
  101. }
  102. if (context.errorCallback) {
  103. context.errorCallback(data.id, data.error);
  104. }
  105. });
  106. },
  107. reconnect: function () {
  108. //Not implement
  109. },
  110. on: function (eventName, callback) {
  111. //Not implement
  112. }
  113. };
  114. }]);
  115. }());