This repository has been archived on 2022-01-02. You can view files and clone it, but cannot push or open issues or pull requests.
AriaNg/app/scripts/controllers/task-detail.js

165 lines
6 KiB
JavaScript
Raw Normal View History

2016-05-23 19:06:50 +02:00
(function () {
'use strict';
2016-06-01 18:02:10 +02:00
angular.module('ariaNg').controller('TaskDetailController', ['$rootScope', '$scope', '$routeParams', '$interval', 'ariaNgCommonService', 'ariaNgSettingService', 'aria2TaskService', 'aria2SettingService', function ($rootScope, $scope, $routeParams, $interval, ariaNgCommonService, ariaNgSettingService, aria2TaskService, aria2SettingService) {
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;
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-06-01 18:02:10 +02:00
if (!keys) {
return;
}
2016-06-06 16:34:55 +02:00
var options = [];
ariaNgCommonService.pushArrayTo(options, aria2SettingService.getSpecifiedOptions(keys.readwrite));
ariaNgCommonService.pushArrayTo(options, aria2SettingService.getSpecifiedOptions(keys.readonly, true));
return options;
2016-06-01 18:02:10 +02:00
};
2016-06-04 09:33:40 +02:00
var refreshBtPeers = function (task, silent) {
2016-06-01 16:05:36 +02:00
return aria2TaskService.getBtTaskPeers(task.gid, function (result) {
2016-05-31 16:51:12 +02:00
if (!ariaNgCommonService.extendArray(result, $scope.peers, 'peerId')) {
$scope.peers = result;
}
2016-05-31 16:51:12 +02:00
2016-06-01 16:05:36 +02:00
$scope.healthPercent = aria2TaskService.estimateHealthPercentFromPeers(task, $scope.peers);
2016-06-04 09:33:40 +02:00
}, silent);
};
2016-06-04 09:33:40 +02:00
var refreshDownloadTask = function (silent) {
2016-06-07 17:40:57 +02:00
if (pauseDownloadTaskRefresh) {
return;
}
2016-06-01 16:05:36 +02:00
return aria2TaskService.getTaskStatus($routeParams.gid, function (result) {
2016-05-31 16:51:12 +02:00
if (result.status == 'active' && result.bittorrent) {
2016-06-04 09:33:40 +02:00
refreshBtPeers(result, true);
2016-05-31 16:51:12 +02:00
} else {
if (tabOrders.indexOf('btpeers') >= 0) {
tabOrders.splice(tabOrders.indexOf('btpeers'), 1);
}
2016-05-31 16:51:12 +02:00
}
2016-06-01 18:02:10 +02:00
if (!$scope.task || $scope.task.status != result.status) {
$scope.availableOptions = getAvailableOptions(result.status, !!result.bittorrent);
}
2016-05-31 16:51:12 +02:00
$scope.task = ariaNgCommonService.copyObjectTo(result, $scope.task);
2016-05-30 19:26:41 +02:00
2016-05-31 16:51:12 +02:00
$rootScope.taskContext.list = [$scope.task];
$rootScope.taskContext.selected = {};
$rootScope.taskContext.selected[$scope.task.gid] = true;
2016-06-04 09:33:40 +02:00
}, silent);
2016-05-23 19:06:50 +02:00
};
2016-06-01 18:02:10 +02:00
$scope.context = {
currentTab: 'overview'
};
$scope.healthPercent = 0;
$scope.availableOptions = [];
$rootScope.swipeActions.extentLeftSwipe = function () {
var tabIndex = tabOrders.indexOf($scope.context.currentTab);
if (tabIndex < tabOrders.length - 1) {
$scope.context.currentTab = tabOrders[tabIndex + 1];
return true;
} else {
return false;
}
};
$rootScope.swipeActions.extentRightSwipe = function () {
var tabIndex = tabOrders.indexOf($scope.context.currentTab);
if (tabIndex > 0) {
$scope.context.currentTab = tabOrders[tabIndex - 1];
return true;
} else {
return false;
}
};
$scope.changeFileListDisplayOrder = function (type, autoSetReverse) {
2016-05-31 16:51:12 +02:00
var oldType = ariaNgCommonService.parseOrderType(ariaNgSettingService.getFileListDisplayOrder());
var newType = ariaNgCommonService.parseOrderType(type);
if (autoSetReverse && newType.type == oldType.type) {
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 18:09:00 +02:00
return orderType.equals(targetType);
};
2016-05-25 18:09:00 +02:00
$scope.getFileListOrderType = function () {
return ariaNgSettingService.getFileListDisplayOrder();
};
2016-06-06 17:15:46 +02:00
$scope.setSelectedFile = function () {
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];
if (file && file.selected) {
selectedFileIndex.push(file.index);
}
}
2016-06-07 17:40:57 +02:00
pauseDownloadTaskRefresh = true;
2016-06-06 17:15:46 +02:00
return aria2TaskService.selectTaskFile(gid, selectedFileIndex, function () {
2016-06-07 17:40:57 +02:00
pauseDownloadTaskRefresh = false;
2016-06-06 17:15:46 +02:00
refreshDownloadTask(false);
});
};
2016-06-01 18:02:10 +02:00
$scope.loadTaskOption = function (task) {
$rootScope.loadPromise = aria2TaskService.getTaskOptions(task.gid, function (result) {
$scope.options = result;
});
};
2016-06-02 18:16:27 +02:00
$scope.setOption = function (key, value, optionStatus) {
2016-06-01 18:02:10 +02:00
return aria2TaskService.setTaskOption($scope.task.gid, key, value, function (result) {
2016-06-02 18:16:27 +02:00
if (result == 'OK') {
optionStatus.setSuccess();
} else {
optionStatus.setFailed();
}
2016-06-01 18:02:10 +02:00
});
};
2016-05-23 19:06:50 +02:00
if (ariaNgSettingService.getDownloadTaskRefreshInterval() > 0) {
downloadTaskRefreshPromise = $interval(function () {
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
2016-06-04 09:33:40 +02:00
$rootScope.loadPromise = refreshDownloadTask(false);
2016-05-23 19:06:50 +02:00
}]);
})();