| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287 |
- (function () {
- 'use strict';
- angular.module('ariaNg').factory('aria2SettingService', ['ariaNgConstants', 'aria2AllOptions', 'aria2GlobalAvailableOptions', 'aria2QuickSettingsAvailableOptions', 'aria2TaskAvailableOptions', 'aria2RpcService', 'ariaNgLogService', 'ariaNgStorageService', function (ariaNgConstants, aria2AllOptions, aria2GlobalAvailableOptions, aria2QuickSettingsAvailableOptions, aria2TaskAvailableOptions, aria2RpcService, ariaNgLogService, ariaNgStorageService) {
- var processStatResult = function (stat) {
- if (!stat) {
- return stat;
- }
- var activeCount = parseInt(stat.numActive);
- var waitingCount = parseInt(stat.numWaiting);
- var totalRunningCount = activeCount + waitingCount;
- stat.totalRunningCount = totalRunningCount;
- return stat;
- };
- var getSettingHistoryKey = function (key) {
- return ariaNgConstants.settingHistoryKeyPrefix + '.' + key;
- };
- return {
- isOptionKeyValid: function (key) {
- var option = aria2AllOptions[key];
- return !!option;
- },
- isOptionKeyRequired: function (key) {
- var option = aria2AllOptions[key];
- return option && option.required;
- },
- getAvailableGlobalOptionsKeys: function (type) {
- if (type === 'basic') {
- return aria2GlobalAvailableOptions.basicOptions;
- } else if (type === 'http-ftp-sftp') {
- return aria2GlobalAvailableOptions.httpFtpSFtpOptions;
- } else if (type === 'http') {
- return aria2GlobalAvailableOptions.httpOptions;
- } else if (type === 'ftp-sftp') {
- return aria2GlobalAvailableOptions.ftpSFtpOptions;
- } else if (type === 'bt') {
- return aria2GlobalAvailableOptions.btOptions;
- } else if (type === 'metalink') {
- return aria2GlobalAvailableOptions.metalinkOptions;
- } else if (type === 'rpc') {
- return aria2GlobalAvailableOptions.rpcOptions;
- } else if (type === 'advanced') {
- return aria2GlobalAvailableOptions.advancedOptions;
- } else {
- return false;
- }
- },
- getAria2QuickSettingsAvailableOptions: function (type) {
- if (type === 'globalSpeedLimit') {
- return aria2QuickSettingsAvailableOptions.globalSpeedLimitOptions;
- } else {
- return false;
- }
- },
- getAvailableTaskOptionKeys: function (status, isBittorrent) {
- var allOptions = aria2TaskAvailableOptions.taskOptions;
- var availableOptions = [];
- for (var i = 0; i < allOptions.length; i++) {
- var option = allOptions[i];
- var optionKey = {
- key: option.key,
- category: option.category
- };
- if (option.canShow && option.canShow.indexOf(status) < 0) {
- continue;
- }
- if (option.category === 'http' && isBittorrent) {
- continue;
- } else if (option.category === 'bittorrent' && !isBittorrent) {
- continue;
- }
- if (option.canUpdate && option.canUpdate.indexOf(status) < 0) {
- optionKey.readonly = true;
- }
- availableOptions.push(optionKey);
- }
- return availableOptions;
- },
- getNewTaskOptionKeys: function () {
- var allOptions = aria2TaskAvailableOptions.taskOptions;
- var availableOptions = [];
- for (var i = 0; i < allOptions.length; i++) {
- var option = allOptions[i];
- var optionKey = {
- key: option.key,
- category: option.category,
- showHistory: option.showHistory
- };
- if (option.canShow && option.canShow.indexOf('new') < 0) {
- continue;
- }
- if (option.canUpdate && option.canUpdate.indexOf('new') < 0) {
- optionKey.readonly = true;
- }
- availableOptions.push(optionKey);
- }
- return availableOptions;
- },
- getSpecifiedOptions: function (keys, extendSettings) {
- var options = [];
- if (!keys) {
- return options;
- }
- for (var i = 0; i < keys.length; i++) {
- var key = keys[i];
- var readonly = false;
- var category = null;
- var showHistory = false;
- if (angular.isObject(key)) {
- var optionKey = key;
- key = optionKey.key;
- readonly = !!optionKey.readonly;
- category = optionKey.category;
- showHistory = !!optionKey.showHistory;
- }
- var option = aria2AllOptions[key];
- if (!option) {
- continue;
- }
- option = angular.extend({
- key: key,
- nameKey: 'options.' + key + '.name',
- descriptionKey: 'options.' + key + '.description'
- }, option);
- if (category) {
- option.category = category;
- }
- if (option.type === 'boolean') {
- option.options = ['true', 'false'];
- }
- if (readonly) {
- option.readonly = true;
- }
- if (showHistory) {
- option.showHistory = true;
- }
- if (extendSettings && extendSettings.disableRequired) {
- option.required = false;
- }
- if (option.options) {
- var availableOptions = [];
- for (var j = 0; j < option.options.length; j++) {
- availableOptions.push({
- name: 'option.' + option.options[j],
- value: option.options[j]
- });
- }
- option.options = availableOptions;
- }
- options.push(option);
- }
- return options;
- },
- getSettingHistory: function (key) {
- if (!this.isOptionKeyValid(key)) {
- return [];
- }
- var storageKey = getSettingHistoryKey(key);
- var history = ariaNgStorageService.get(storageKey) || [];
- var newHistory = [];
- for (var i = 0; i < Math.min(history.length, ariaNgConstants.historyMaxStoreCount); i++) {
- newHistory.push(history[i]);
- }
- return newHistory;
- },
- addSettingHistory: function (key, value) {
- if (!this.isOptionKeyValid(key)) {
- return [];
- }
- var storageKey = getSettingHistoryKey(key);
- var history = ariaNgStorageService.get(storageKey) || [];
- var newHistory = [];
- newHistory.push(value);
- for (var i = 0; i < Math.min(history.length, ariaNgConstants.historyMaxStoreCount - 1); i++) {
- if (history[i] !== value) {
- newHistory.push(history[i]);
- }
- }
- ariaNgStorageService.set(storageKey, newHistory);
- return newHistory;
- },
- clearSettingsHistorys: function () {
- var keys = ariaNgStorageService.keys(ariaNgConstants.settingHistoryKeyPrefix + '.');
- for (var i = 0; i < keys.length; i++) {
- ariaNgStorageService.remove(keys[i]);
- }
- },
- getGlobalOption: function (callback, silent) {
- return aria2RpcService.getGlobalOption({
- silent: !!silent,
- callback: callback
- });
- },
- setGlobalOption: function (key, value, callback, silent) {
- var data = {};
- data[key] = value;
- return aria2RpcService.changeGlobalOption({
- options: data,
- silent: !!silent,
- callback: callback
- });
- },
- getAria2Status: function (callback, silent) {
- return aria2RpcService.getVersion({
- silent: !!silent,
- callback: callback
- });
- },
- getGlobalStat: function (callback, silent) {
- return aria2RpcService.getGlobalStat({
- silent: !!silent,
- callback: function (response) {
- if (!callback) {
- ariaNgLogService.warn('[aria2SettingService.getGlobalStat] callback is null');
- return;
- }
- var stat = processStatResult(response);
- callback(stat);
- }
- });
- },
- canReconnect: function () {
- return aria2RpcService.canReconnect();
- },
- reconnect: function () {
- return aria2RpcService.reconnect({});
- },
- saveSession: function (callback, silent) {
- return aria2RpcService.saveSession({
- silent: !!silent,
- callback: callback
- });
- },
- shutdown: function (callback, silent) {
- return aria2RpcService.shutdown({
- silent: !!silent,
- callback: callback
- });
- }
- };
- }]);
- }());
|