From 7f232292d5b7c0a6e571b02578a926896f5642f5 Mon Sep 17 00:00:00 2001 From: MaysWind Date: Sun, 22 May 2016 11:13:05 +0800 Subject: [PATCH] support change display order by clicking title, support order by download speed --- app/index.html | 16 ++++++++---- app/scripts/controllers/list.js | 17 +++++++------ app/scripts/controllers/main.js | 23 +++++++++++++---- app/scripts/core/utils.js | 11 +++++++++ app/scripts/filters/taskOrderBy.js | 26 +++++++++++++------- app/scripts/langs/en-US.js | 1 + app/scripts/langs/zh-CN.js | 1 + app/scripts/services/ariaNgSettingService.js | 2 +- app/styles/aria-ng.css | 5 ++++ app/views/list.html | 21 ++++++++-------- 10 files changed, 85 insertions(+), 38 deletions(-) diff --git a/app/index.html b/app/index.html index b786a3d..f58f890 100644 --- a/app/index.html +++ b/app/index.html @@ -62,35 +62,41 @@ diff --git a/app/scripts/controllers/list.js b/app/scripts/controllers/list.js index 99be69f..48d069d 100644 --- a/app/scripts/controllers/list.js +++ b/app/scripts/controllers/list.js @@ -30,9 +30,15 @@ }; var processDownloadTask = function (task) { - var totalLength = parseInt(task.totalLength); - var completedLength = parseInt(task.completedLength); - var remainLength = totalLength - completedLength; + task.totalLength = parseInt(task.totalLength); + task.completedLength = parseInt(task.completedLength); + task.uploadSpeed = parseInt(task.uploadSpeed); + task.downloadSpeed = parseInt(task.downloadSpeed); + task.completePercent = task.completedLength / task.totalLength * 100; + task.idle = task.downloadSpeed == 0; + + var remainLength = task.totalLength - task.completedLength; + task.remainTime = calculateDownloadRemainTime(remainLength, task.downloadSpeed); if (task.bittorrent && task.bittorrent.info) { task.taskName = task.bittorrent.info.name; @@ -41,11 +47,6 @@ } else { task.taskName = translateFilter('Unknown'); } - - task.fileSize = totalLength; - task.completePercent = completedLength / totalLength * 100; - task.idle = task.downloadSpeed == 0; - task.remainTime = calculateDownloadRemainTime(remainLength, task.downloadSpeed); }; var refreshDownloadTask = function () { diff --git a/app/scripts/controllers/main.js b/app/scripts/controllers/main.js index 7104bbd..8298113 100644 --- a/app/scripts/controllers/main.js +++ b/app/scripts/controllers/main.js @@ -1,7 +1,7 @@ (function () { 'use strict'; - angular.module('ariaNg').controller('MainController', ['$scope', '$interval', 'aria2RpcService', 'ariaNgSettingService', function ($scope, $interval, aria2RpcService, ariaNgSettingService) { + angular.module('ariaNg').controller('MainController', ['$scope', '$interval', 'aria2RpcService', 'ariaNgSettingService', 'utils', function ($scope, $interval, aria2RpcService, ariaNgSettingService, utils) { var globalStatRefreshPromise = null; var processStatResult = function (stat) { @@ -26,12 +26,25 @@ refreshGlobalStat(); - $scope.changeDisplayOrder = function (type) { - ariaNgSettingService.setDisplayOrder(type); + $scope.changeDisplayOrder = function (type, autoSetReverse) { + var oldType = utils.parseOrderType(ariaNgSettingService.getDisplayOrder()); + var newType = utils.parseOrderType(type); + + if (autoSetReverse && newType.type == oldType.type) { + newType.reverse = !oldType.reverse; + } + + ariaNgSettingService.setDisplayOrder(newType.getValue()); }; - $scope.isSetDisplayOrder = function (type) { - return ariaNgSettingService.getDisplayOrder() === type; + $scope.isSetDisplayOrder = function (type, reverse) { + var orderType = utils.parseOrderType(ariaNgSettingService.getDisplayOrder()); + + if (angular.isUndefined(reverse)) { + return orderType.type === type; + } else { + return orderType.type === type && orderType.reverse === reverse; + } }; if (ariaNgSettingService.getGlobalStatRefreshInterval() > 0) { diff --git a/app/scripts/core/utils.js b/app/scripts/core/utils.js index 51f1fd9..53cf65d 100644 --- a/app/scripts/core/utils.js +++ b/app/scripts/core/utils.js @@ -36,6 +36,17 @@ } return path.substring(index + 1); + }, + parseOrderType: function (value) { + var values = value.split(':'); + + return { + type: values[0], + reverse: values[1] === 'true', + getValue: function () { + return this.type + ":" + this.reverse.toString(); + } + } } }; }]); diff --git a/app/scripts/filters/taskOrderBy.js b/app/scripts/filters/taskOrderBy.js index 35f2f85..df46b94 100644 --- a/app/scripts/filters/taskOrderBy.js +++ b/app/scripts/filters/taskOrderBy.js @@ -1,20 +1,28 @@ (function () { 'use strict'; - angular.module("ariaNg").filter('taskOrderBy', ['orderByFilter', function (orderByFilter) { + angular.module("ariaNg").filter('taskOrderBy', ['orderByFilter', 'utils', function (orderByFilter, utils) { return function (array, type) { if (!angular.isArray(array)) { return array; } + + var orderType = utils.parseOrderType(type); + + if (orderType == null) { + return array; + } - if (type == 'name') { - return orderByFilter(array, ['taskName'], false); - } else if (type == 'size') { - return orderByFilter(array, ['fileSize'], false); - } else if (type == 'percent') { - return orderByFilter(array, ['completePercent'], true); - } else if (type == 'remain') { - return orderByFilter(array, ['idle', 'remainTime'], false); + if (orderType.type == 'name') { + return orderByFilter(array, ['taskName'], orderType.reverse); + } else if (orderType.type == 'size') { + return orderByFilter(array, ['totalLength'], orderType.reverse); + } else if (orderType.type == 'percent') { + return orderByFilter(array, ['completePercent'], orderType.reverse); + } else if (orderType.type == 'remain') { + return orderByFilter(array, ['idle', 'remainTime'], orderType.reverse); + } else if (orderType.type == 'dspeed') { + return orderByFilter(array, ['downloadSpeed'], orderType.reverse); } else { return array; } diff --git a/app/scripts/langs/en-US.js b/app/scripts/langs/en-US.js index 772f224..cad013b 100644 --- a/app/scripts/langs/en-US.js +++ b/app/scripts/langs/en-US.js @@ -14,6 +14,7 @@ 'By File Size': 'By File Size', 'By Completed Percent': 'By Completed Percent', 'By Remain Time': 'By Remain Time', + 'By Download Speed': 'By Download Speed', 'Download': 'Download', 'Downloading': 'Downloading', 'Waiting': 'Waiting', diff --git a/app/scripts/langs/zh-CN.js b/app/scripts/langs/zh-CN.js index df2b3a7..444932f 100644 --- a/app/scripts/langs/zh-CN.js +++ b/app/scripts/langs/zh-CN.js @@ -14,6 +14,7 @@ 'By File Size': '按文件大小', 'By Completed Percent': '按进度', 'By Remain Time': '按剩余时间', + 'By Download Speed': '按下载速度', 'Download': '下载', 'Downloading': '正在下载', 'Waiting': '正在等待', diff --git a/app/scripts/services/ariaNgSettingService.js b/app/scripts/services/ariaNgSettingService.js index 2bc7ef4..6b6c6a0 100644 --- a/app/scripts/services/ariaNgSettingService.js +++ b/app/scripts/services/ariaNgSettingService.js @@ -99,7 +99,7 @@ var value = getOption('displayOrder'); if (!value) { - value = 'default'; + value = 'default:false'; } return value; diff --git a/app/styles/aria-ng.css b/app/styles/aria-ng.css index 9a83966..ff30515 100644 --- a/app/styles/aria-ng.css +++ b/app/styles/aria-ng.css @@ -257,6 +257,11 @@ td { font-size: 12px; } +.task-table .task-table-title a { + color: #000; + cursor: pointer; +} + .task-table > .task-table-body > div.row { padding: 8px; border-top: 1px solid #ddd; diff --git a/app/views/list.html b/app/views/list.html index e0e283e..3c78de8 100644 --- a/app/views/list.html +++ b/app/views/list.html @@ -5,30 +5,31 @@
- File Name - + File Name +
- File Size - + File Size +
- Completed Percent - + Completed Percent +
- Remain Time - + Remain Time +
- Download Speed + Download Speed +
@@ -38,7 +39,7 @@
- +