From 57aeffcf522756202c0e986615bcb0eef319865b Mon Sep 17 00:00:00 2001 From: MaysWind Date: Mon, 6 Jun 2016 22:34:55 +0800 Subject: [PATCH] add settings in task detail page --- app/scripts/config/aria2options.js | 7 ++++-- app/scripts/controllers/task-detail.js | 6 ++++- app/scripts/services/aria2SettingService.js | 28 ++++++++++++++++----- app/scripts/services/ariaNgCommonService.js | 28 +++++++++++++++++++++ 4 files changed, 60 insertions(+), 9 deletions(-) diff --git a/app/scripts/config/aria2options.js b/app/scripts/config/aria2options.js index 073c048..b8dca07 100644 --- a/app/scripts/config/aria2options.js +++ b/app/scripts/config/aria2options.js @@ -559,7 +559,10 @@ rpcOptions: ['enable-rpc', 'pause-metadata', 'rpc-allow-origin-all', 'rpc-listen-all', 'rpc-listen-port', 'rpc-max-request-size', 'rpc-save-upload-metadata', 'rpc-secure'], advancedOptions: ['allow-overwrite', 'allow-piece-length-change', 'always-resume', 'async-dns', 'auto-file-renaming', 'auto-save-interval', 'conditional-get', 'conf-path', 'console-log-level', 'daemon', 'deferred-input', 'disable-ipv6', 'disk-cache', 'download-result', 'dscp', 'rlimit-nofile', 'enable-color', 'enable-mmap', 'event-poll', 'file-allocation', 'force-save', 'hash-check-only', 'human-readable', 'max-download-result', 'max-mmap-limit', 'max-resume-failure-tries', 'min-tls-version', 'log-level', 'piece-length', 'optimize-concurrent-downloads', 'show-console-readout', 'summary-interval', 'max-overall-download-limit', 'max-download-limit', 'no-conf', 'no-file-allocation-limit', 'parameterized-uri', 'quiet', 'realtime-chunk-checksum', 'remove-control-file', 'save-session', 'save-session-interval', 'socket-recv-buffer-size', 'stop', 'truncate-console-readout'] }).constant('aria2TaskAvailableOptions', { - activeBtOptions: ['max-download-limit', 'max-upload-limit', 'bt-max-peers', 'bt-request-peer-speed-limit', 'bt-remove-unselected-file', 'force-save'], - activeOtherOptions: ['max-download-limit', 'max-upload-limit', 'force-save'] + activeNormalTaskOptions: ['max-download-limit', 'max-upload-limit', 'force-save'], + activeBtTaskOptions: ['max-download-limit', 'max-upload-limit', 'bt-max-peers', 'bt-request-peer-speed-limit', 'bt-remove-unselected-file', 'force-save'], + inactiveNormalTaskOptions: ['max-download-limit', 'max-upload-limit', 'split', 'min-split-size', 'max-connection-per-server', 'force-save'], + inactiveBtTaskOptions: ['max-download-limit', 'max-upload-limit', 'split', 'min-split-size', 'max-connection-per-server', 'bt-max-peers', 'bt-request-peer-speed-limit', 'bt-remove-unselected-file', 'force-save'], + activeTaskReadonlyOptions: ['split', 'min-split-size', 'max-connection-per-server'] }); })(); diff --git a/app/scripts/controllers/task-detail.js b/app/scripts/controllers/task-detail.js index 581a3ea..5617f54 100644 --- a/app/scripts/controllers/task-detail.js +++ b/app/scripts/controllers/task-detail.js @@ -12,7 +12,11 @@ return; } - return aria2SettingService.getSpecifiedOptions(keys); + var options = []; + ariaNgCommonService.pushArrayTo(options, aria2SettingService.getSpecifiedOptions(keys.readwrite)); + ariaNgCommonService.pushArrayTo(options, aria2SettingService.getSpecifiedOptions(keys.readonly, true)); + + return options; }; var refreshBtPeers = function (task, silent) { diff --git a/app/scripts/services/aria2SettingService.js b/app/scripts/services/aria2SettingService.js index 0fef967..e58ee74 100644 --- a/app/scripts/services/aria2SettingService.js +++ b/app/scripts/services/aria2SettingService.js @@ -1,7 +1,7 @@ (function () { 'use strict'; - angular.module('ariaNg').factory('aria2SettingService', ['aria2AllOptions', 'aria2GlobalAvailableOptions', 'aria2TaskAvailableOptions', 'aria2RpcService', function (aria2AllOptions, aria2GlobalAvailableOptions, aria2TaskAvailableOptions, aria2RpcService) { + angular.module('ariaNg').factory('aria2SettingService', ['aria2AllOptions', 'aria2GlobalAvailableOptions', 'aria2TaskAvailableOptions', 'ariaNgCommonService', 'aria2RpcService', function (aria2AllOptions, aria2GlobalAvailableOptions, aria2TaskAvailableOptions, ariaNgCommonService, aria2RpcService) { var processStatResult = function (stat) { if (!stat) { return stat; @@ -40,18 +40,30 @@ }, getAvailableTaskOptionKeys: function (status, isBittorrent) { if (status == 'active' && isBittorrent) { - return aria2TaskAvailableOptions.activeBtOptions; + return { + readwrite: aria2TaskAvailableOptions.activeBtTaskOptions, + readonly: aria2TaskAvailableOptions.activeTaskReadonlyOptions + }; } else if (status == 'active' && !isBittorrent) { - return aria2TaskAvailableOptions.activeOtherOptions; + return { + readwrite: aria2TaskAvailableOptions.activeNormalTaskOptions, + readonly: aria2TaskAvailableOptions.activeTaskReadonlyOptions + }; } else if ((status == 'waiting' || status == 'paused') && isBittorrent) { - return aria2TaskAvailableOptions.activeBtOptions; + return { + readwrite: aria2TaskAvailableOptions.inactiveBtTaskOptions, + readonly: [] + }; } else if ((status == 'waiting' || status == 'paused') && !isBittorrent) { - return aria2TaskAvailableOptions.activeOtherOptions; + return { + readwrite: aria2TaskAvailableOptions.inactiveNormalTaskOptions, + readonly: [] + }; } else { return false; } }, - getSpecifiedOptions: function (keys) { + getSpecifiedOptions: function (keys, readonly) { var options = []; for (var i = 0; i < keys.length; i++) { @@ -72,6 +84,10 @@ option.options = ['true', 'false']; } + if (!!readonly) { + option.readonly = true; + } + if (option.options) { var availableOptions = []; diff --git a/app/scripts/services/ariaNgCommonService.js b/app/scripts/services/ariaNgCommonService.js index a80b083..85fe885 100644 --- a/app/scripts/services/ariaNgCommonService.js +++ b/app/scripts/services/ariaNgCommonService.js @@ -90,6 +90,34 @@ return to; }, + pushArrayTo: function (array, items) { + if (!angular.isArray(array)) { + array = []; + } + + if (!angular.isArray(items) || items.length < 1) { + return array; + } + + for (var i = 0; i < items.length; i++) { + array.push(items[i]); + } + + return array; + }, + combineArray: function () { + var result = []; + + for (var i = 0; i < arguments.length; i++) { + if (angular.isArray(arguments[i])) { + this.pushArrayTo(result, arguments[i]); + } else { + result.push(arguments[i]); + } + } + + return result; + }, parseOrderType: function (value) { var values = value.split(':');