2016-05-23 19:06:50 +02:00
|
|
|
(function () {
|
|
|
|
'use strict';
|
|
|
|
|
2017-10-14 20:13:28 +02:00
|
|
|
angular.module('ariaNg').controller('TaskDetailController', ['$rootScope', '$scope', '$routeParams', '$interval', 'clipboard', 'aria2RpcErrors', 'ariaNgFileTypes', 'ariaNgCommonService', 'ariaNgSettingService', 'ariaNgMonitorService', 'aria2TaskService', 'aria2SettingService', function ($rootScope, $scope, $routeParams, $interval, clipboard, aria2RpcErrors, ariaNgFileTypes, ariaNgCommonService, ariaNgSettingService, ariaNgMonitorService, aria2TaskService, aria2SettingService) {
|
2016-05-24 19:30:02 +02:00
|
|
|
var tabOrders = ['overview', 'blocks', 'filelist', 'btpeers'];
|
2016-05-23 19:06:50 +02:00
|
|
|
var downloadTaskRefreshPromise = null;
|
2016-06-07 17:40:57 +02:00
|
|
|
var pauseDownloadTaskRefresh = false;
|
2018-02-21 04:09:46 +01:00
|
|
|
var currentRowTriggeredMenu = null;
|
2016-05-23 19:06:50 +02:00
|
|
|
|
2016-06-01 18:02:10 +02:00
|
|
|
var getAvailableOptions = function (status, isBittorrent) {
|
|
|
|
var keys = aria2SettingService.getAvailableTaskOptionKeys(status, isBittorrent);
|
2016-05-25 17:33:06 +02:00
|
|
|
|
2017-03-25 05:57:07 +01:00
|
|
|
return aria2SettingService.getSpecifiedOptions(keys, {
|
|
|
|
disableRequired: true
|
|
|
|
});
|
2016-06-01 18:02:10 +02:00
|
|
|
};
|
2016-05-25 17:33:06 +02:00
|
|
|
|
2016-07-04 18:59:04 +02:00
|
|
|
var processTask = function (task) {
|
|
|
|
if (!task) {
|
2016-06-07 17:40:57 +02:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2016-08-01 16:49:16 +02:00
|
|
|
if (task.status !== 'active' || !task.bittorrent) {
|
2016-07-04 18:59:04 +02:00
|
|
|
if (tabOrders.indexOf('btpeers') >= 0) {
|
|
|
|
tabOrders.splice(tabOrders.indexOf('btpeers'), 1);
|
2016-06-10 13:23:16 +02:00
|
|
|
}
|
2016-07-04 18:59:04 +02:00
|
|
|
}
|
2016-06-10 13:23:16 +02:00
|
|
|
|
2016-08-01 16:49:16 +02:00
|
|
|
if (!$scope.task || $scope.task.status !== task.status) {
|
2016-07-04 18:59:04 +02:00
|
|
|
$scope.context.availableOptions = getAvailableOptions(task.status, !!task.bittorrent);
|
|
|
|
}
|
2016-06-10 13:23:16 +02:00
|
|
|
|
2016-07-04 18:59:04 +02:00
|
|
|
$scope.task = ariaNgCommonService.copyObjectTo(task, $scope.task);
|
|
|
|
|
|
|
|
$rootScope.taskContext.list = [$scope.task];
|
|
|
|
$rootScope.taskContext.selected = {};
|
|
|
|
$rootScope.taskContext.selected[$scope.task.gid] = true;
|
|
|
|
|
|
|
|
ariaNgMonitorService.recordStat(task.gid, task);
|
|
|
|
};
|
|
|
|
|
|
|
|
var processPeers = function (peers) {
|
|
|
|
if (!peers) {
|
|
|
|
return;
|
|
|
|
}
|
2016-05-24 17:30:33 +02:00
|
|
|
|
2016-07-04 18:59:04 +02:00
|
|
|
if (!ariaNgCommonService.extendArray(peers, $scope.context.btPeers, 'peerId')) {
|
|
|
|
$scope.context.btPeers = peers;
|
|
|
|
}
|
|
|
|
|
|
|
|
$scope.context.healthPercent = aria2TaskService.estimateHealthPercentFromPeers($scope.task, $scope.context.btPeers);
|
|
|
|
};
|
|
|
|
|
|
|
|
var requireBtPeers = function (task) {
|
2016-08-01 16:49:16 +02:00
|
|
|
return (task && task.bittorrent && task.status === 'active');
|
2016-07-04 18:59:04 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
var refreshDownloadTask = function (silent) {
|
|
|
|
if (pauseDownloadTaskRefresh) {
|
|
|
|
return;
|
2016-12-10 18:50:25 +01:00
|
|
|
}
|
2016-06-01 18:02:10 +02:00
|
|
|
|
2016-07-04 18:59:04 +02:00
|
|
|
var processError = function (message) {
|
2017-05-20 06:46:26 +02:00
|
|
|
$interval.cancel(downloadTaskRefreshPromise);
|
2016-07-04 18:59:04 +02:00
|
|
|
};
|
2016-05-30 19:26:41 +02:00
|
|
|
|
2016-07-04 18:59:04 +02:00
|
|
|
var includeLocalPeer = true;
|
2018-08-13 19:10:45 +02:00
|
|
|
var addVirtualFileNode = true;
|
2016-07-03 12:07:07 +02:00
|
|
|
|
2016-07-04 18:59:04 +02:00
|
|
|
if (!$scope.task) {
|
|
|
|
return aria2TaskService.getTaskStatus($routeParams.gid, function (response) {
|
|
|
|
if (!response.success) {
|
|
|
|
return processError(response.data.message);
|
2016-07-03 12:07:07 +02:00
|
|
|
}
|
|
|
|
|
2016-07-04 18:59:04 +02:00
|
|
|
var task = response.data;
|
|
|
|
processTask(task);
|
2016-07-03 12:07:07 +02:00
|
|
|
|
2016-07-04 18:59:04 +02:00
|
|
|
if (requireBtPeers(task)) {
|
|
|
|
aria2TaskService.getBtTaskPeers(task, function (response) {
|
|
|
|
if (response.success) {
|
|
|
|
processPeers(response.data);
|
|
|
|
}
|
|
|
|
}, silent, includeLocalPeer);
|
|
|
|
}
|
2018-08-13 19:10:45 +02:00
|
|
|
}, silent, addVirtualFileNode);
|
2016-07-04 18:59:04 +02:00
|
|
|
} else {
|
|
|
|
return aria2TaskService.getTaskStatusAndBtPeers($routeParams.gid, function (response) {
|
|
|
|
if (!response.success) {
|
|
|
|
return processError(response.data.message);
|
|
|
|
}
|
2016-06-10 19:25:09 +02:00
|
|
|
|
2016-07-04 18:59:04 +02:00
|
|
|
processTask(response.task);
|
|
|
|
processPeers(response.peers);
|
2018-08-13 19:10:45 +02:00
|
|
|
}, silent, requireBtPeers($scope.task), includeLocalPeer, addVirtualFileNode);
|
2016-07-04 18:59:04 +02:00
|
|
|
}
|
2016-05-23 19:06:50 +02:00
|
|
|
};
|
|
|
|
|
2016-06-26 12:10:58 +02:00
|
|
|
var setSelectFiles = function (silent) {
|
|
|
|
if (!$scope.task || !$scope.task.files) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
var gid = $scope.task.gid;
|
|
|
|
var selectedFileIndex = [];
|
|
|
|
|
|
|
|
for (var i = 0; i < $scope.task.files.length; i++) {
|
|
|
|
var file = $scope.task.files[i];
|
|
|
|
|
2018-08-13 19:10:45 +02:00
|
|
|
if (file && file.selected && !file.isDir) {
|
2016-06-26 12:10:58 +02:00
|
|
|
selectedFileIndex.push(file.index);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
pauseDownloadTaskRefresh = true;
|
|
|
|
|
|
|
|
return aria2TaskService.selectTaskFile(gid, selectedFileIndex, function (response) {
|
|
|
|
pauseDownloadTaskRefresh = false;
|
|
|
|
|
|
|
|
if (response.success) {
|
|
|
|
refreshDownloadTask(false);
|
|
|
|
}
|
|
|
|
}, silent);
|
|
|
|
};
|
|
|
|
|
2018-08-13 19:10:45 +02:00
|
|
|
var setSelectedNode = function (node, value) {
|
|
|
|
if (!node) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (node.files && node.files.length) {
|
|
|
|
for (var i = 0; i < node.files.length; i++) {
|
|
|
|
var fileNode = node.files[i];
|
|
|
|
fileNode.selected = value;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (node.subDirs && node.subDirs.length) {
|
|
|
|
for (var i = 0; i < node.subDirs.length; i++) {
|
|
|
|
var dirNode = node.subDirs[i];
|
|
|
|
setSelectedNode(dirNode, value);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
node.selected = value;
|
|
|
|
node.partialSelected = false;
|
|
|
|
};
|
|
|
|
|
|
|
|
var updateDirNodeSelectedStatus = function (node) {
|
|
|
|
if (!node) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
var selectedSubNodesCount = 0;
|
|
|
|
var partitalSelectedSubNodesCount = 0;
|
|
|
|
|
|
|
|
if (node.files && node.files.length) {
|
|
|
|
for (var i = 0; i < node.files.length; i++) {
|
|
|
|
var fileNode = node.files[i];
|
|
|
|
selectedSubNodesCount += (fileNode.selected ? 1 : 0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (node.subDirs && node.subDirs.length) {
|
|
|
|
for (var i = 0; i < node.subDirs.length; i++) {
|
|
|
|
var dirNode = node.subDirs[i];
|
|
|
|
updateDirNodeSelectedStatus(dirNode);
|
|
|
|
selectedSubNodesCount += (dirNode.selected ? 1 : 0);
|
|
|
|
partitalSelectedSubNodesCount += (dirNode.partialSelected ? 1 : 0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
node.selected = (selectedSubNodesCount > 0 && selectedSubNodesCount === (node.subDirs.length + node.files.length));
|
|
|
|
node.partialSelected = ((selectedSubNodesCount > 0 && selectedSubNodesCount < (node.subDirs.length + node.files.length)) || partitalSelectedSubNodesCount > 0);
|
|
|
|
};
|
|
|
|
|
|
|
|
var updateAllDirNodesSelectedStatus = function () {
|
|
|
|
if (!$scope.task || !$scope.task.multiDir) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
for (var i = 0; i < $scope.task.files.length; i++) {
|
|
|
|
var node = $scope.task.files[i];
|
|
|
|
|
|
|
|
if (!node.isDir) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
updateDirNodeSelectedStatus(node);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2016-06-01 18:02:10 +02:00
|
|
|
$scope.context = {
|
2016-06-10 19:25:09 +02:00
|
|
|
currentTab: 'overview',
|
2016-12-04 16:36:12 +01:00
|
|
|
isEnableSpeedChart: ariaNgSettingService.getDownloadTaskRefreshInterval() > 0,
|
2016-06-26 12:10:58 +02:00
|
|
|
showChooseFilesToolbar: false,
|
2018-08-13 19:10:45 +02:00
|
|
|
collapsedDirs: {},
|
2016-06-20 18:20:30 +02:00
|
|
|
btPeers: [],
|
2016-06-10 19:25:09 +02:00
|
|
|
healthPercent: 0,
|
2016-07-10 14:42:21 +02:00
|
|
|
collapseTrackers: true,
|
2016-06-10 19:25:09 +02:00
|
|
|
statusData: ariaNgMonitorService.getEmptyStatsData($routeParams.gid),
|
2016-06-20 18:20:30 +02:00
|
|
|
availableOptions: [],
|
|
|
|
options: []
|
2016-06-01 18:02:10 +02:00
|
|
|
};
|
|
|
|
|
2016-06-20 17:45:33 +02:00
|
|
|
$scope.changeTab = function (tabName) {
|
2016-08-01 16:49:16 +02:00
|
|
|
if (tabName === 'settings') {
|
2016-06-20 17:45:33 +02:00
|
|
|
$scope.loadTaskOption($scope.task);
|
|
|
|
}
|
|
|
|
|
|
|
|
$scope.context.currentTab = tabName;
|
|
|
|
};
|
|
|
|
|
2016-05-24 19:30:02 +02:00
|
|
|
$rootScope.swipeActions.extentLeftSwipe = function () {
|
|
|
|
var tabIndex = tabOrders.indexOf($scope.context.currentTab);
|
|
|
|
|
|
|
|
if (tabIndex < tabOrders.length - 1) {
|
2016-06-20 17:45:33 +02:00
|
|
|
$scope.changeTab(tabOrders[tabIndex + 1]);
|
2016-05-24 19:30:02 +02:00
|
|
|
return true;
|
|
|
|
} else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
$rootScope.swipeActions.extentRightSwipe = function () {
|
|
|
|
var tabIndex = tabOrders.indexOf($scope.context.currentTab);
|
|
|
|
|
|
|
|
if (tabIndex > 0) {
|
2016-06-20 17:45:33 +02:00
|
|
|
$scope.changeTab(tabOrders[tabIndex - 1]);
|
2016-05-24 19:30:02 +02:00
|
|
|
return true;
|
|
|
|
} else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2016-05-25 17:33:06 +02:00
|
|
|
$scope.changeFileListDisplayOrder = function (type, autoSetReverse) {
|
2018-08-13 19:10:45 +02:00
|
|
|
if ($scope.task && $scope.task.multiDir) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2016-05-31 16:51:12 +02:00
|
|
|
var oldType = ariaNgCommonService.parseOrderType(ariaNgSettingService.getFileListDisplayOrder());
|
|
|
|
var newType = ariaNgCommonService.parseOrderType(type);
|
2016-05-25 17:33:06 +02:00
|
|
|
|
2016-08-01 16:49:16 +02:00
|
|
|
if (autoSetReverse && newType.type === oldType.type) {
|
2016-05-25 17:33:06 +02:00
|
|
|
newType.reverse = !oldType.reverse;
|
|
|
|
}
|
|
|
|
|
|
|
|
ariaNgSettingService.setFileListDisplayOrder(newType.getValue());
|
|
|
|
};
|
|
|
|
|
2016-05-25 18:09:00 +02:00
|
|
|
$scope.isSetFileListDisplayOrder = function (type) {
|
2016-05-31 16:51:12 +02:00
|
|
|
var orderType = ariaNgCommonService.parseOrderType(ariaNgSettingService.getFileListDisplayOrder());
|
|
|
|
var targetType = ariaNgCommonService.parseOrderType(type);
|
2016-05-25 17:33:06 +02:00
|
|
|
|
2016-05-25 18:09:00 +02:00
|
|
|
return orderType.equals(targetType);
|
2016-05-25 17:33:06 +02:00
|
|
|
};
|
2016-05-25 18:09:00 +02:00
|
|
|
|
2016-05-25 17:33:06 +02:00
|
|
|
$scope.getFileListOrderType = function () {
|
2018-08-13 19:10:45 +02:00
|
|
|
if ($scope.task && $scope.task.multiDir) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
2016-05-25 17:33:06 +02:00
|
|
|
return ariaNgSettingService.getFileListDisplayOrder();
|
|
|
|
};
|
|
|
|
|
2016-06-26 12:10:58 +02:00
|
|
|
$scope.showChooseFilesToolbar = function () {
|
2018-08-13 19:18:04 +02:00
|
|
|
if (!$scope.context.showChooseFilesToolbar) {
|
|
|
|
pauseDownloadTaskRefresh = true;
|
|
|
|
$scope.context.showChooseFilesToolbar = true;
|
|
|
|
} else {
|
|
|
|
$scope.cancelChooseFiles();
|
|
|
|
}
|
2016-06-26 12:10:58 +02:00
|
|
|
};
|
|
|
|
|
2018-08-13 19:10:45 +02:00
|
|
|
$scope.isAnyFileSelected = function () {
|
2016-06-26 12:10:58 +02:00
|
|
|
for (var i = 0; i < $scope.task.files.length; i++) {
|
2018-08-13 19:10:45 +02:00
|
|
|
var file = $scope.task.files[i];
|
|
|
|
|
|
|
|
if (!file.isDir && file.selected) {
|
|
|
|
return true;
|
|
|
|
}
|
2016-06-26 12:10:58 +02:00
|
|
|
}
|
|
|
|
|
2018-08-13 19:10:45 +02:00
|
|
|
return false;
|
2016-06-26 12:10:58 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
$scope.selectFiles = function (type) {
|
2016-06-06 17:15:46 +02:00
|
|
|
if (!$scope.task || !$scope.task.files) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2016-06-26 12:10:58 +02:00
|
|
|
for (var i = 0; i < $scope.task.files.length; i++) {
|
2018-08-13 19:10:45 +02:00
|
|
|
var file = $scope.task.files[i];
|
|
|
|
|
|
|
|
if (file.isDir) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
2016-08-01 16:49:16 +02:00
|
|
|
if (type === 'all') {
|
2018-08-13 19:10:45 +02:00
|
|
|
file.selected = true;
|
2016-08-01 16:49:16 +02:00
|
|
|
} else if (type === 'none') {
|
2018-08-13 19:10:45 +02:00
|
|
|
file.selected = false;
|
2016-08-01 16:49:16 +02:00
|
|
|
} else if (type === 'reverse') {
|
2018-08-13 19:10:45 +02:00
|
|
|
file.selected = !file.selected;
|
2016-06-26 12:10:58 +02:00
|
|
|
}
|
|
|
|
}
|
2018-08-13 19:10:45 +02:00
|
|
|
|
|
|
|
updateAllDirNodesSelectedStatus();
|
2016-06-26 12:10:58 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
$scope.chooseSpecifiedFiles = function (type) {
|
|
|
|
if (!$scope.task || !$scope.task.files || !ariaNgFileTypes[type]) {
|
|
|
|
return;
|
|
|
|
}
|
2016-06-28 16:13:16 +02:00
|
|
|
|
2018-08-13 19:10:45 +02:00
|
|
|
var files = $scope.task.files;
|
2016-06-26 12:10:58 +02:00
|
|
|
var extensions = ariaNgFileTypes[type];
|
|
|
|
var fileIndexes = [];
|
|
|
|
var isAllSelected = true;
|
2016-06-06 17:15:46 +02:00
|
|
|
|
2018-08-13 19:10:45 +02:00
|
|
|
for (var i = 0; i < files.length; i++) {
|
|
|
|
var file = files[i];
|
|
|
|
|
|
|
|
if (file.isDir) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
var extension = ariaNgCommonService.getFileExtension(file.fileName);
|
2016-06-06 17:15:46 +02:00
|
|
|
|
2017-02-09 16:55:18 +01:00
|
|
|
if (extension) {
|
|
|
|
extension = extension.toLowerCase();
|
|
|
|
}
|
|
|
|
|
2016-06-26 12:10:58 +02:00
|
|
|
if (extensions.indexOf(extension) >= 0) {
|
|
|
|
fileIndexes.push(i);
|
|
|
|
|
2018-08-13 19:10:45 +02:00
|
|
|
if (!file.selected) {
|
2016-06-26 12:10:58 +02:00
|
|
|
isAllSelected = false;
|
|
|
|
}
|
2016-06-06 17:15:46 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-06-26 12:10:58 +02:00
|
|
|
for (var i = 0; i < fileIndexes.length; i++) {
|
|
|
|
var index = fileIndexes[i];
|
2018-08-13 19:10:45 +02:00
|
|
|
var file = files[index];
|
|
|
|
|
|
|
|
if (file && !file.isDir) {
|
|
|
|
file.selected = !isAllSelected;
|
|
|
|
}
|
2016-06-26 12:10:58 +02:00
|
|
|
}
|
2018-08-13 19:10:45 +02:00
|
|
|
|
|
|
|
updateAllDirNodesSelectedStatus();
|
2016-06-26 12:10:58 +02:00
|
|
|
};
|
2016-06-07 17:40:57 +02:00
|
|
|
|
2016-06-26 12:10:58 +02:00
|
|
|
$scope.saveChoosedFiles = function () {
|
|
|
|
if ($scope.context.showChooseFilesToolbar) {
|
|
|
|
$rootScope.loadPromise = setSelectFiles(false);
|
|
|
|
$scope.context.showChooseFilesToolbar = false;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
$scope.cancelChooseFiles = function () {
|
|
|
|
if ($scope.context.showChooseFilesToolbar) {
|
2016-06-07 17:40:57 +02:00
|
|
|
pauseDownloadTaskRefresh = false;
|
2016-06-26 12:10:58 +02:00
|
|
|
refreshDownloadTask(true);
|
|
|
|
$scope.context.showChooseFilesToolbar = false;
|
|
|
|
}
|
|
|
|
};
|
2016-06-10 13:23:16 +02:00
|
|
|
|
2018-08-13 19:10:45 +02:00
|
|
|
$scope.setSelectedFile = function (updateNodeSelectedStatus) {
|
|
|
|
if (updateNodeSelectedStatus) {
|
|
|
|
updateAllDirNodesSelectedStatus();
|
|
|
|
}
|
|
|
|
|
2016-06-26 12:10:58 +02:00
|
|
|
if (!$scope.context.showChooseFilesToolbar) {
|
|
|
|
setSelectFiles(true);
|
|
|
|
}
|
2016-06-10 13:23:16 +02:00
|
|
|
};
|
2016-06-06 17:15:46 +02:00
|
|
|
|
2018-08-13 19:10:45 +02:00
|
|
|
$scope.collapseDir = function (dirNode, newValue) {
|
|
|
|
var nodePath = dirNode.nodePath;
|
|
|
|
|
|
|
|
if (angular.isUndefined(newValue)) {
|
|
|
|
newValue = !$scope.context.collapsedDirs[nodePath];
|
|
|
|
}
|
|
|
|
|
|
|
|
if (newValue) {
|
|
|
|
for (var i = 0; i < dirNode.subDirs.length; i++) {
|
|
|
|
$scope.collapseDir(dirNode.subDirs[i], newValue);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (nodePath) {
|
|
|
|
$scope.context.collapsedDirs[nodePath] = newValue;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
$scope.setSelectedNode = function (dirNode) {
|
|
|
|
setSelectedNode(dirNode, dirNode.selected);
|
|
|
|
updateAllDirNodesSelectedStatus();
|
|
|
|
|
|
|
|
if (!$scope.context.showChooseFilesToolbar) {
|
|
|
|
$scope.setSelectedFile(false);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2016-06-11 16:24:49 +02:00
|
|
|
$scope.changePeerListDisplayOrder = function (type, autoSetReverse) {
|
|
|
|
var oldType = ariaNgCommonService.parseOrderType(ariaNgSettingService.getPeerListDisplayOrder());
|
|
|
|
var newType = ariaNgCommonService.parseOrderType(type);
|
|
|
|
|
2016-08-01 16:49:16 +02:00
|
|
|
if (autoSetReverse && newType.type === oldType.type) {
|
2016-06-11 16:24:49 +02:00
|
|
|
newType.reverse = !oldType.reverse;
|
|
|
|
}
|
|
|
|
|
|
|
|
ariaNgSettingService.setPeerListDisplayOrder(newType.getValue());
|
|
|
|
};
|
|
|
|
|
|
|
|
$scope.isSetPeerListDisplayOrder = function (type) {
|
|
|
|
var orderType = ariaNgCommonService.parseOrderType(ariaNgSettingService.getPeerListDisplayOrder());
|
|
|
|
var targetType = ariaNgCommonService.parseOrderType(type);
|
|
|
|
|
|
|
|
return orderType.equals(targetType);
|
|
|
|
};
|
|
|
|
|
|
|
|
$scope.getPeerListOrderType = function () {
|
|
|
|
return ariaNgSettingService.getPeerListDisplayOrder();
|
|
|
|
};
|
|
|
|
|
2016-06-01 18:02:10 +02:00
|
|
|
$scope.loadTaskOption = function (task) {
|
2016-06-10 13:23:16 +02:00
|
|
|
$rootScope.loadPromise = aria2TaskService.getTaskOptions(task.gid, function (response) {
|
|
|
|
if (response.success) {
|
2016-06-20 18:20:30 +02:00
|
|
|
$scope.context.options = response.data;
|
2016-06-10 13:23:16 +02:00
|
|
|
}
|
2016-06-01 18:02:10 +02:00
|
|
|
});
|
|
|
|
};
|
|
|
|
|
2016-06-02 18:16:27 +02:00
|
|
|
$scope.setOption = function (key, value, optionStatus) {
|
2016-06-10 13:23:16 +02:00
|
|
|
return aria2TaskService.setTaskOption($scope.task.gid, key, value, function (response) {
|
2016-08-01 16:49:16 +02:00
|
|
|
if (response.success && response.data === 'OK') {
|
2016-06-02 18:16:27 +02:00
|
|
|
optionStatus.setSuccess();
|
|
|
|
} else {
|
2016-06-25 15:48:06 +02:00
|
|
|
optionStatus.setFailed(response.data.message);
|
2016-06-02 18:16:27 +02:00
|
|
|
}
|
2016-06-10 13:23:16 +02:00
|
|
|
}, true);
|
2016-06-01 18:02:10 +02:00
|
|
|
};
|
|
|
|
|
2018-02-21 04:09:46 +01:00
|
|
|
$scope.copySelectedRowText = function () {
|
|
|
|
if (!currentRowTriggeredMenu) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
var name = currentRowTriggeredMenu.find('.setting-key > span').text().trim();
|
|
|
|
var value = "";
|
|
|
|
|
|
|
|
currentRowTriggeredMenu.find('.setting-value > span').each(function (i, element) {
|
|
|
|
if (i > 0) {
|
|
|
|
value += '\n';
|
|
|
|
}
|
|
|
|
|
|
|
|
value += angular.element(element).text().trim();
|
|
|
|
});
|
|
|
|
|
|
|
|
var info = name + ': ' + value;
|
|
|
|
clipboard.copyText(info);
|
|
|
|
};
|
|
|
|
|
2016-05-23 19:06:50 +02:00
|
|
|
if (ariaNgSettingService.getDownloadTaskRefreshInterval() > 0) {
|
|
|
|
downloadTaskRefreshPromise = $interval(function () {
|
2016-08-01 16:49:16 +02:00
|
|
|
if ($scope.task && ($scope.task.status === 'complete' || $scope.task.status === 'error' || $scope.task.status === 'removed')) {
|
2016-06-28 16:13:16 +02:00
|
|
|
$interval.cancel(downloadTaskRefreshPromise);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2016-06-04 09:33:40 +02:00
|
|
|
refreshDownloadTask(true);
|
2016-05-23 19:06:50 +02:00
|
|
|
}, ariaNgSettingService.getDownloadTaskRefreshInterval());
|
|
|
|
}
|
|
|
|
|
|
|
|
$scope.$on('$destroy', function () {
|
|
|
|
if (downloadTaskRefreshPromise) {
|
|
|
|
$interval.cancel(downloadTaskRefreshPromise);
|
|
|
|
}
|
|
|
|
});
|
2016-05-31 16:51:12 +02:00
|
|
|
|
2018-08-14 23:49:10 +02:00
|
|
|
$scope.onOverviewMouseDown = function () {
|
|
|
|
angular.element('#overview-items .row[contextmenu-bind!="true"]').contextmenu({
|
|
|
|
target: '#task-overview-contextmenu',
|
|
|
|
before: function (e, context) {
|
|
|
|
currentRowTriggeredMenu = context;
|
|
|
|
}
|
|
|
|
}).attr('contextmenu-bind', 'true');
|
|
|
|
};
|
2017-10-14 20:13:28 +02:00
|
|
|
|
2018-02-21 04:09:46 +01:00
|
|
|
angular.element('#task-overview-contextmenu').on('hide.bs.context', function () {
|
|
|
|
currentRowTriggeredMenu = null;
|
|
|
|
});
|
|
|
|
|
2016-06-04 09:33:40 +02:00
|
|
|
$rootScope.loadPromise = refreshDownloadTask(false);
|
2016-05-23 19:06:50 +02:00
|
|
|
}]);
|
2016-08-01 16:49:16 +02:00
|
|
|
}());
|