aria2SettingService.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. (function () {
  2. 'use strict';
  3. angular.module('ariaNg').factory('aria2SettingService', ['ariaNgConstants', 'aria2AllOptions', 'aria2GlobalAvailableOptions', 'aria2QuickSettingsAvailableOptions', 'aria2TaskAvailableOptions', 'aria2RpcService', 'ariaNgLogService', 'ariaNgStorageService', function (ariaNgConstants, aria2AllOptions, aria2GlobalAvailableOptions, aria2QuickSettingsAvailableOptions, aria2TaskAvailableOptions, aria2RpcService, ariaNgLogService, ariaNgStorageService) {
  4. var processStatResult = function (stat) {
  5. if (!stat) {
  6. return stat;
  7. }
  8. var activeCount = parseInt(stat.numActive);
  9. var waitingCount = parseInt(stat.numWaiting);
  10. var totalRunningCount = activeCount + waitingCount;
  11. stat.totalRunningCount = totalRunningCount;
  12. return stat;
  13. };
  14. var getSettingHistoryKey = function (key) {
  15. return ariaNgConstants.settingHistoryKeyPrefix + '.' + key;
  16. };
  17. return {
  18. isOptionKeyValid: function (key) {
  19. var option = aria2AllOptions[key];
  20. return !!option;
  21. },
  22. isOptionKeyRequired: function (key) {
  23. var option = aria2AllOptions[key];
  24. return option && option.required;
  25. },
  26. getAvailableGlobalOptionsKeys: function (type) {
  27. if (type === 'basic') {
  28. return aria2GlobalAvailableOptions.basicOptions;
  29. } else if (type === 'http-ftp-sftp') {
  30. return aria2GlobalAvailableOptions.httpFtpSFtpOptions;
  31. } else if (type === 'http') {
  32. return aria2GlobalAvailableOptions.httpOptions;
  33. } else if (type === 'ftp-sftp') {
  34. return aria2GlobalAvailableOptions.ftpSFtpOptions;
  35. } else if (type === 'bt') {
  36. return aria2GlobalAvailableOptions.btOptions;
  37. } else if (type === 'metalink') {
  38. return aria2GlobalAvailableOptions.metalinkOptions;
  39. } else if (type === 'rpc') {
  40. return aria2GlobalAvailableOptions.rpcOptions;
  41. } else if (type === 'advanced') {
  42. return aria2GlobalAvailableOptions.advancedOptions;
  43. } else {
  44. return false;
  45. }
  46. },
  47. getAria2QuickSettingsAvailableOptions: function (type) {
  48. if (type === 'globalSpeedLimit') {
  49. return aria2QuickSettingsAvailableOptions.globalSpeedLimitOptions;
  50. } else {
  51. return false;
  52. }
  53. },
  54. getAvailableTaskOptionKeys: function (status, isBittorrent) {
  55. var allOptions = aria2TaskAvailableOptions.taskOptions;
  56. var availableOptions = [];
  57. for (var i = 0; i < allOptions.length; i++) {
  58. var option = allOptions[i];
  59. var optionKey = {
  60. key: option.key,
  61. category: option.category
  62. };
  63. if (option.canShow && option.canShow.indexOf(status) < 0) {
  64. continue;
  65. }
  66. if (option.category === 'http' && isBittorrent) {
  67. continue;
  68. } else if (option.category === 'bittorrent' && !isBittorrent) {
  69. continue;
  70. }
  71. if (option.canUpdate && option.canUpdate.indexOf(status) < 0) {
  72. optionKey.readonly = true;
  73. }
  74. availableOptions.push(optionKey);
  75. }
  76. return availableOptions;
  77. },
  78. getNewTaskOptionKeys: function () {
  79. var allOptions = aria2TaskAvailableOptions.taskOptions;
  80. var availableOptions = [];
  81. for (var i = 0; i < allOptions.length; i++) {
  82. var option = allOptions[i];
  83. var optionKey = {
  84. key: option.key,
  85. category: option.category,
  86. showHistory: option.showHistory
  87. };
  88. if (option.canShow && option.canShow.indexOf('new') < 0) {
  89. continue;
  90. }
  91. if (option.canUpdate && option.canUpdate.indexOf('new') < 0) {
  92. optionKey.readonly = true;
  93. }
  94. availableOptions.push(optionKey);
  95. }
  96. return availableOptions;
  97. },
  98. getSpecifiedOptions: function (keys, extendSettings) {
  99. var options = [];
  100. if (!keys) {
  101. return options;
  102. }
  103. for (var i = 0; i < keys.length; i++) {
  104. var key = keys[i];
  105. var readonly = false;
  106. var category = null;
  107. var showHistory = false;
  108. if (angular.isObject(key)) {
  109. var optionKey = key;
  110. key = optionKey.key;
  111. readonly = !!optionKey.readonly;
  112. category = optionKey.category;
  113. showHistory = !!optionKey.showHistory;
  114. }
  115. var option = aria2AllOptions[key];
  116. if (!option) {
  117. continue;
  118. }
  119. option = angular.extend({
  120. key: key,
  121. nameKey: 'options.' + key + '.name',
  122. descriptionKey: 'options.' + key + '.description'
  123. }, option);
  124. if (category) {
  125. option.category = category;
  126. }
  127. if (option.type === 'boolean') {
  128. option.options = ['true', 'false'];
  129. }
  130. if (readonly) {
  131. option.readonly = true;
  132. }
  133. if (showHistory) {
  134. option.showHistory = true;
  135. }
  136. if (extendSettings && extendSettings.disableRequired) {
  137. option.required = false;
  138. }
  139. if (option.options) {
  140. var availableOptions = [];
  141. for (var j = 0; j < option.options.length; j++) {
  142. availableOptions.push({
  143. name: 'option.' + option.options[j],
  144. value: option.options[j]
  145. });
  146. }
  147. option.options = availableOptions;
  148. }
  149. options.push(option);
  150. }
  151. return options;
  152. },
  153. getSettingHistory: function (key) {
  154. if (!this.isOptionKeyValid(key)) {
  155. return [];
  156. }
  157. var storageKey = getSettingHistoryKey(key);
  158. var history = ariaNgStorageService.get(storageKey) || [];
  159. var newHistory = [];
  160. for (var i = 0; i < Math.min(history.length, ariaNgConstants.historyMaxStoreCount); i++) {
  161. newHistory.push(history[i]);
  162. }
  163. return newHistory;
  164. },
  165. addSettingHistory: function (key, value) {
  166. if (!this.isOptionKeyValid(key)) {
  167. return [];
  168. }
  169. var storageKey = getSettingHistoryKey(key);
  170. var history = ariaNgStorageService.get(storageKey) || [];
  171. var newHistory = [];
  172. newHistory.push(value);
  173. for (var i = 0; i < Math.min(history.length, ariaNgConstants.historyMaxStoreCount - 1); i++) {
  174. if (history[i] !== value) {
  175. newHistory.push(history[i]);
  176. }
  177. }
  178. ariaNgStorageService.set(storageKey, newHistory);
  179. return newHistory;
  180. },
  181. clearSettingsHistorys: function () {
  182. var keys = ariaNgStorageService.keys(ariaNgConstants.settingHistoryKeyPrefix + '.');
  183. for (var i = 0; i < keys.length; i++) {
  184. ariaNgStorageService.remove(keys[i]);
  185. }
  186. },
  187. getGlobalOption: function (callback, silent) {
  188. return aria2RpcService.getGlobalOption({
  189. silent: !!silent,
  190. callback: callback
  191. });
  192. },
  193. setGlobalOption: function (key, value, callback, silent) {
  194. var data = {};
  195. data[key] = value;
  196. return aria2RpcService.changeGlobalOption({
  197. options: data,
  198. silent: !!silent,
  199. callback: callback
  200. });
  201. },
  202. getAria2Status: function (callback, silent) {
  203. return aria2RpcService.getVersion({
  204. silent: !!silent,
  205. callback: callback
  206. });
  207. },
  208. getGlobalStat: function (callback, silent) {
  209. return aria2RpcService.getGlobalStat({
  210. silent: !!silent,
  211. callback: function (response) {
  212. if (!callback) {
  213. ariaNgLogService.warn('[aria2SettingService.getGlobalStat] callback is null');
  214. return;
  215. }
  216. var stat = processStatResult(response);
  217. callback(stat);
  218. }
  219. });
  220. },
  221. canReconnect: function () {
  222. return aria2RpcService.canReconnect();
  223. },
  224. reconnect: function () {
  225. return aria2RpcService.reconnect({});
  226. },
  227. saveSession: function (callback, silent) {
  228. return aria2RpcService.saveSession({
  229. silent: !!silent,
  230. callback: callback
  231. });
  232. },
  233. shutdown: function (callback, silent) {
  234. return aria2RpcService.shutdown({
  235. silent: !!silent,
  236. callback: callback
  237. });
  238. }
  239. };
  240. }]);
  241. }());