refactor code

master
MaysWind 2016-06-10 19:23:16 +08:00
parent 7b7c322d22
commit 02a248c1a5
17 changed files with 355 additions and 222 deletions

View File

@ -268,8 +268,9 @@
<script src="scripts/config/configuration.js"></script>
<script src="scripts/config/initiator.js"></script>
<script src="scripts/config/languages.js"></script>
<script src="scripts/config/language-default.js"></script>
<script src="scripts/config/aria2options.js"></script>
<script src="scripts/config/defaultLanguage.js"></script>
<script src="scripts/config/aria2Options.js"></script>
<script src="scripts/config/aria2RpcConstants.js"></script>
<script src="scripts/controllers/main.js"></script>
<script src="scripts/controllers/list.js"></script>
<script src="scripts/controllers/task-detail.js"></script>

View File

@ -64,8 +64,10 @@
"Percent": "完成度",
"Download / Upload Speed": "下载 / 上传速度",
"No connected peers": "没有连接到其他节点",
"Failed to change some tasks state.": "修改一些任务状态时失败.",
"Confirm Remove": "确认删除",
"Are you sure you want to remove the selected task?": "您是否要删除选中的任务?",
"Failed to remove some task(s).": "删除一些任务时失败.",
"Confirm Clear": "确认清除",
"Are you sure you want to clear stopped tasks?": "您是否要清除已结束的任务?",
"Language": "语言",
@ -83,9 +85,7 @@
"Confirm Shutdown": "确认关闭",
"Are you sure you want to shutdown aria2?": "您是否要关闭 Aria2?",
"Session has been saved successfully.": "会话已经成功保存.",
"Failed to save session.": "会话保存失败.",
"Aria2 has been shutdown successfully.": "Aria2 已经成功关闭.",
"Failed to shutdown aria2.": "关闭 Aria2 失败.",
"Toggle Navigation": "切换导航",
"Loading": "正在加载...",
"More Than One Day": "超过1天",

View File

@ -0,0 +1,14 @@
(function () {
'use strict';
angular.module('ariaNg').constant('aria2RpcConstants', {
rpcServiceVersion: '2.0',
rpcServiceName: 'aria2',
rpcSystemServiceName: 'system',
rpcTokenPrefix: 'token:'
}).constant('aria2RpcErrors', {
Unauthorized: {
message: 'Unauthorized'
}
});
})();

View File

@ -14,10 +14,5 @@
secret: '',
globalStatRefreshInterval: 1000,
downloadTaskRefreshInterval: 1000
}).constant('aria2RpcConstants', {
rpcServiceVersion: '2.0',
rpcServiceName: 'aria2',
rpcSystemServiceName: 'system',
rpcTokenPrefix: 'token:'
});
})();

View File

@ -68,8 +68,10 @@
'Percent': 'Percent',
'Download / Upload Speed': 'Download / Upload Speed',
'No connected peers': 'No connected peers',
'Failed to change some tasks state.': 'Failed to change some tasks state.',
'Confirm Remove': 'Confirm Remove',
'Are you sure you want to remove the selected task?': 'Are you sure you want to remove the selected task?',
'Failed to remove some task(s).': 'Failed to remove some task(s).',
'Confirm Clear': 'Confirm Clear',
'Are you sure you want to clear stopped tasks?': 'Are you sure you want to clear stopped tasks?',
'Language': 'Language',
@ -87,9 +89,7 @@
'Confirm Shutdown': 'Confirm Shutdown',
'Are you sure you want to shutdown aria2?': 'Are you sure you want to shutdown aria2?',
'Session has been saved successfully.': 'Session has been saved successfully.',
'Failed to save session.': 'Failed to save session.',
'Aria2 has been shutdown successfully.': 'Aria2 has been shutdown successfully.',
'Failed to shutdown aria2.': 'Failed to shutdown aria2.',
'Toggle Navigation': 'Toggle Navigation',
'Loading': 'Loading...',
'More Than One Day': 'More than 1 day',

View File

@ -1,7 +1,7 @@
(function () {
'use strict';
angular.module('ariaNg').controller('DownloadListController', ['$rootScope', '$scope', '$window', '$location', '$route', '$interval', 'dragulaService', 'ariaNgCommonService', 'ariaNgSettingService', 'aria2TaskService', function ($rootScope, $scope, $window, $location, $route, $interval, dragulaService, ariaNgCommonService, ariaNgSettingService, aria2TaskService) {
angular.module('ariaNg').controller('DownloadListController', ['$rootScope', '$scope', '$window', '$location', '$route', '$interval', 'dragulaService', 'aria2RpcErrors', 'ariaNgCommonService', 'ariaNgSettingService', 'aria2TaskService', function ($rootScope, $scope, $window, $location, $route, $interval, dragulaService, aria2RpcErrors, ariaNgCommonService, ariaNgSettingService, aria2TaskService) {
var location = $location.path().substring(1);
var downloadTaskRefreshPromise = null;
var pauseDownloadTaskRefresh = false;
@ -12,10 +12,20 @@
return;
}
return aria2TaskService.getTaskList(location, needRequestWholeInfo, function (result) {
if (!ariaNgCommonService.extendArray(result, $rootScope.taskContext.list, 'gid')) {
return aria2TaskService.getTaskList(location, needRequestWholeInfo, function (response) {
if (!response.success) {
if (response.data.message == aria2RpcErrors.Unauthorized.message) {
$interval.cancel(downloadTaskRefreshPromise);
}
return;
}
var taskList = response.data;
if (!ariaNgCommonService.extendArray(taskList, $rootScope.taskContext.list, 'gid')) {
if (needRequestWholeInfo) {
$rootScope.taskContext.list = result;
$rootScope.taskContext.list = taskList;
needRequestWholeInfo = false;
} else {
needRequestWholeInfo = true;
@ -73,9 +83,9 @@
pauseDownloadTaskRefresh = true;
aria2TaskService.changeTaskPosition(gid, index, function (result) {
aria2TaskService.changeTaskPosition(gid, index, function () {
pauseDownloadTaskRefresh = false;
});
}, true);
});
$scope.$on('$destroy', function () {

View File

@ -1,12 +1,19 @@
(function () {
'use strict';
angular.module('ariaNg').controller('MainController', ['$rootScope', '$scope', '$route', '$location', '$interval', 'ariaNgCommonService', 'ariaNgSettingService', 'aria2TaskService', 'aria2SettingService', function ($rootScope, $scope, $route, $location, $interval, ariaNgCommonService, ariaNgSettingService, aria2TaskService, aria2SettingService) {
angular.module('ariaNg').controller('MainController', ['$rootScope', '$scope', '$route', '$location', '$interval', 'aria2RpcErrors', 'ariaNgCommonService', 'ariaNgSettingService', 'aria2TaskService', 'aria2SettingService', function ($rootScope, $scope, $route, $location, $interval, aria2RpcErrors, ariaNgCommonService, ariaNgSettingService, aria2TaskService, aria2SettingService) {
var globalStatRefreshPromise = null;
var refreshGlobalStat = function (silent) {
return aria2SettingService.getGlobalStat(function (result) {
$scope.globalStat = result;
return aria2SettingService.getGlobalStat(function (response) {
if (!response.success && response.data.message == aria2RpcErrors.Unauthorized.message) {
$interval.cancel(globalStatRefreshPromise);
return;
}
if (response.success) {
$scope.globalStat = response.data;
}
}, silent);
};
@ -67,10 +74,31 @@
return;
}
$rootScope.loadPromise = invoke(gids, function (result) {
$rootScope.loadPromise = invoke(gids, function (response) {
if (response.hasError && gids.length > 1) {
ariaNgCommonService.showError('Failed to change some tasks state.');
}
if (!response.hasSuccess) {
return;
}
refreshGlobalStat(true);
$route.reload();
});
if (!response.hasError && state == 'start') {
if ($location.path() == '/waiting') {
$location.path('/downloading');
} else {
$route.reload();
}
} else if (!response.hasError && state == 'pause') {
if ($location.path() == '/downloading') {
$location.path('/waiting');
} else {
$route.reload();
}
}
}, (gids.length > 1));
};
$scope.removeTasks = function () {
@ -81,21 +109,37 @@
}
ariaNgCommonService.confirm('Confirm Remove', 'Are you sure you want to remove the selected task?', 'warning', function () {
$rootScope.loadPromise = aria2TaskService.removeTasks(tasks, function (result) {
refreshGlobalStat(true);
if ($location.path() == '/stopped') {
$route.reload();
} else {
$location.path('/stopped');
$rootScope.loadPromise = aria2TaskService.removeTasks(tasks, function (response) {
if (response.hasError && tasks.length > 1) {
ariaNgCommonService.showError('Failed to remove some task(s).');
}
});
if (!response.hasSuccess) {
return;
}
refreshGlobalStat(true);
if (!response.hasError) {
if ($location.path() == '/stopped') {
$route.reload();
} else {
$location.path('/stopped');
}
}
}, (tasks.length > 1));
});
};
$scope.clearStoppedTasks = function () {
ariaNgCommonService.confirm('Confirm Clear', 'Are you sure you want to clear stopped tasks?', 'warning', function () {
$rootScope.loadPromise = aria2TaskService.clearStoppedTasks(function (result) {
$rootScope.loadPromise = aria2TaskService.clearStoppedTasks(function (response) {
if (!response.success) {
return;
}
refreshGlobalStat(true);
if ($location.path() == '/stopped') {
$route.reload();
} else {

View File

@ -4,7 +4,7 @@
angular.module('ariaNg').controller('Aria2SettingsController', ['$rootScope', '$scope', '$location', 'ariaNgConstants', 'ariaNgCommonService', 'aria2SettingService', function ($rootScope, $scope, $location, ariaNgConstants, ariaNgCommonService, aria2SettingService) {
var location = $location.path().substring($location.path().lastIndexOf('/') + 1);
var getAvailableOptions = function (type) {
$scope.availableOptions = (function (type) {
var keys = aria2SettingService.getAvailableGlobalOptionsKeys(type);
if (!keys) {
@ -13,23 +13,23 @@
}
return aria2SettingService.getSpecifiedOptions(keys);
};
$scope.availableOptions = getAvailableOptions(location);
})(location);
$scope.setGlobalOption = function (key, value, optionStatus) {
return aria2SettingService.setGlobalOption(key, value, function (result) {
if (result == 'OK') {
return aria2SettingService.setGlobalOption(key, value, function (response) {
if (response.success && response.data == 'OK') {
optionStatus.setSuccess();
} else {
optionStatus.setFailed();
}
});
}, true);
};
$rootScope.loadPromise = (function () {
return aria2SettingService.getGlobalOption(function (result) {
$scope.globalOptions = result;
return aria2SettingService.getGlobalOption(function (response) {
if (response.success) {
$scope.globalOptions = response.data;
}
});
})();
}]);

View File

@ -2,32 +2,30 @@
'use strict';
angular.module('ariaNg').controller('Aria2StatusController', ['$rootScope', '$scope', 'ariaNgCommonService', 'aria2SettingService', function ($rootScope, $scope, ariaNgCommonService, aria2SettingService) {
$rootScope.loadPromise = (function () {
return aria2SettingService.getAria2Status(function (result) {
$scope.aria2Status = result;
});
})();
$scope.saveSession = function () {
return aria2SettingService.saveSession(function (result) {
if (result == 'OK') {
return aria2SettingService.saveSession(function (response) {
if (response.success && response.data == 'OK') {
ariaNgCommonService.showOperationSucceeded('Session has been saved successfully.');
} else {
ariaNgCommonService.showError('Failed to save session.');
}
});
};
$scope.shutdown = function () {
ariaNgCommonService.confirm('Confirm Shutdown', 'Are you sure you want to shutdown aria2?', 'warning', function (status) {
return aria2SettingService.shutdown(function (result) {
if (result == 'OK') {
return aria2SettingService.shutdown(function (response) {
if (response.success && response.data == 'OK') {
ariaNgCommonService.showOperationSucceeded('Aria2 has been shutdown successfully.');
} else {
ariaNgCommonService.showError('Failed to shutdown aria2.');
}
});
}, true);
};
$rootScope.loadPromise = (function () {
return aria2SettingService.getAria2Status(function (response) {
if (response.success) {
$scope.aria2Status = response.data;
}
});
})();
}]);
})();

View File

@ -1,7 +1,7 @@
(function () {
'use strict';
angular.module('ariaNg').controller('TaskDetailController', ['$rootScope', '$scope', '$routeParams', '$interval', 'ariaNgCommonService', 'ariaNgSettingService', 'aria2TaskService', 'aria2SettingService', function ($rootScope, $scope, $routeParams, $interval, ariaNgCommonService, ariaNgSettingService, aria2TaskService, aria2SettingService) {
angular.module('ariaNg').controller('TaskDetailController', ['$rootScope', '$scope', '$routeParams', '$interval', 'aria2RpcErrors', 'ariaNgCommonService', 'ariaNgSettingService', 'aria2TaskService', 'aria2SettingService', function ($rootScope, $scope, $routeParams, $interval, aria2RpcErrors, ariaNgCommonService, ariaNgSettingService, aria2TaskService, aria2SettingService) {
var tabOrders = ['overview', 'blocks', 'filelist', 'btpeers'];
var downloadTaskRefreshPromise = null;
var pauseDownloadTaskRefresh = false;
@ -21,9 +21,15 @@
};
var refreshBtPeers = function (task, silent) {
return aria2TaskService.getBtTaskPeers(task.gid, function (result) {
if (!ariaNgCommonService.extendArray(result, $scope.peers, 'peerId')) {
$scope.peers = result;
return aria2TaskService.getBtTaskPeers(task.gid, function (response) {
if (!response.success) {
return;
}
var peers = response.data;
if (!ariaNgCommonService.extendArray(peers, $scope.peers, 'peerId')) {
$scope.peers = peers;
}
$scope.healthPercent = aria2TaskService.estimateHealthPercentFromPeers(task, $scope.peers);
@ -35,20 +41,32 @@
return;
}
return aria2TaskService.getTaskStatus($routeParams.gid, function (result) {
if (result.status == 'active' && result.bittorrent) {
refreshBtPeers(result, true);
return aria2TaskService.getTaskStatus($routeParams.gid, function (response) {
if (!response.success) {
if (response.data.message == aria2RpcErrors.Unauthorized.message) {
$interval.cancel(downloadTaskRefreshPromise);
}
return;
}
var task = response.data;
if (task.status == 'active' && task.bittorrent) {
if ($scope.context.currentTab == 'btpeers') {
refreshBtPeers(task, true);
}
} else {
if (tabOrders.indexOf('btpeers') >= 0) {
tabOrders.splice(tabOrders.indexOf('btpeers'), 1);
}
}
if (!$scope.task || $scope.task.status != result.status) {
$scope.availableOptions = getAvailableOptions(result.status, !!result.bittorrent);
if (!$scope.task || $scope.task.status != task.status) {
$scope.availableOptions = getAvailableOptions(task.status, !!task.bittorrent);
}
$scope.task = ariaNgCommonService.copyObjectTo(result, $scope.task);
$scope.task = ariaNgCommonService.copyObjectTo(task, $scope.task);
$rootScope.taskContext.list = [$scope.task];
$rootScope.taskContext.selected = {};
@ -125,26 +143,35 @@
pauseDownloadTaskRefresh = true;
return aria2TaskService.selectTaskFile(gid, selectedFileIndex, function () {
return aria2TaskService.selectTaskFile(gid, selectedFileIndex, function (response) {
pauseDownloadTaskRefresh = false;
refreshDownloadTask(false);
});
if (response.success) {
refreshDownloadTask(false);
}
}, true);
};
$scope.loadBtPeers = function (task) {
$rootScope.loadPromise = refreshBtPeers(task, false);
};
$scope.loadTaskOption = function (task) {
$rootScope.loadPromise = aria2TaskService.getTaskOptions(task.gid, function (result) {
$scope.options = result;
$rootScope.loadPromise = aria2TaskService.getTaskOptions(task.gid, function (response) {
if (response.success) {
$scope.options = response.data;
}
});
};
$scope.setOption = function (key, value, optionStatus) {
return aria2TaskService.setTaskOption($scope.task.gid, key, value, function (result) {
if (result == 'OK') {
return aria2TaskService.setTaskOption($scope.task.gid, key, value, function (response) {
if (response.success && response.data == 'OK') {
optionStatus.setSuccess();
} else {
optionStatus.setFailed();
}
});
}, true);
};
if (ariaNgSettingService.getDownloadTaskRefreshInterval() > 0) {

View File

@ -21,8 +21,8 @@
return;
}
if (context.callback) {
context.callback(data.result);
if (context.successCallback) {
context.successCallback(data.id, data.result);
}
}).error(function (data, header, config, status) {
if (!data) {
@ -30,11 +30,7 @@
}
if (context.errorCallback) {
context.errorCallback(data.error);
}
if (context.callback) {
context.callback(data.error);
context.errorCallback(data.id, data.error);
}
});
}

View File

@ -1,7 +1,7 @@
(function () {
'use strict';
angular.module('ariaNg').factory('aria2RpcService', ['$q', 'aria2RpcConstants', 'ariaNgCommonService', 'ariaNgSettingService', 'aria2HttpRpcService', 'aria2WebSocketRpcService', function ($q, aria2RpcConstants, ariaNgCommonService, ariaNgSettingService, aria2HttpRpcService, aria2WebSocketRpcService) {
angular.module('ariaNg').factory('aria2RpcService', ['$q', 'aria2RpcConstants', 'aria2RpcErrors', 'ariaNgCommonService', 'ariaNgSettingService', 'aria2HttpRpcService', 'aria2WebSocketRpcService', function ($q, aria2RpcConstants, aria2RpcErrors, ariaNgCommonService, ariaNgSettingService, aria2HttpRpcService, aria2WebSocketRpcService) {
var protocol = ariaNgSettingService.getProtocol();
var secret = ariaNgSettingService.getSecret();
@ -13,58 +13,43 @@
return aria2RpcConstants.rpcServiceName + '.' + methodName;
};
var invoke = function (method, context) {
var isSystemMethod = checkIsSystemMethod(method);
var finalParams = [];
var invoke = function (context) {
var uniqueId = ariaNgCommonService.generateUniqueId();
if (secret && !isSystemMethod) {
finalParams.push(aria2RpcConstants.rpcTokenPrefix + secret);
}
if (angular.isArray(context.params) && context.params.length > 0) {
for (var i = 0; i < context.params.length; i++) {
finalParams.push(context.params[i]);
}
}
context.uniqueId = ariaNgCommonService.generateUniqueId();
context.requestBody = {
var requestBody = {
jsonrpc: aria2RpcConstants.rpcServiceVersion,
method: (!isSystemMethod ? getAria2MethodFullName(method) : method),
id: context.uniqueId
method: context.methodName,
id: uniqueId,
params: context.params
};
if (finalParams.length > 0) {
context.requestBody.params = finalParams;
}
if (!context.silent) {
context.errorCallback = function (error) {
if (!error || !error.message) {
return;
}
if (error.message == 'Unauthorized') {
ariaNgCommonService.showError('rpc.error.' + error.message);
return;
}
}
}
var requestContext = {
uniqueId: uniqueId,
requestBody: requestBody,
successCallback: context.successCallback,
errorCallback: context.errorCallback
};
if (protocol == 'ws' || protocol == 'wss') {
return aria2WebSocketRpcService.request(context);
return aria2WebSocketRpcService.request(requestContext);
} else {
return aria2HttpRpcService.request(context);
return aria2HttpRpcService.request(requestContext);
}
};
var invokeMulti = function (methodFunc, contexts, keyProperty, callback) {
var invokeMulti = function (methodFunc, contexts, callback) {
var promises = [];
var hasSuccess = false;
var hasError = false;
var results = [];
for (var i = 0; i < contexts.length; i++) {
contexts[i].callback = function (result) {
results.push(result);
contexts[i].callback = function (response) {
results.push(response);
hasSuccess = hasSuccess | response.success;
hasError = hasError | !response.success;
};
promises.push(methodFunc(contexts[i]));
@ -72,33 +57,83 @@
return $q.all(promises).finally(function () {
if (callback) {
callback(results);
callback({
hasSuccess: !!hasSuccess,
hasError: !!hasError,
results: results
});
}
});
};
var processError = function (error) {
if (!error || !error.message) {
return false;
}
if (error.message == aria2RpcErrors.Unauthorized.message) {
ariaNgCommonService.showError('rpc.error.' + error.message);
return true;
} else {
ariaNgCommonService.showError(error.message);
return true;
}
};
var buildRequestContext = function () {
var context = {};
var methodName = arguments[0];
var isSystemMethod = checkIsSystemMethod(methodName);
var finalParams = [];
if (arguments.length > 0) {
var invokeContext = arguments[0];
var context = {
methodName: (!isSystemMethod ? getAria2MethodFullName(methodName) : methodName)
};
context.silent = invokeContext.silent === true;
context.callback = invokeContext.callback;
if (secret && !isSystemMethod) {
finalParams.push(aria2RpcConstants.rpcTokenPrefix + secret);
}
if (arguments.length > 1) {
var params = [];
var invokeContext = arguments[1];
for (var i = 1; i < arguments.length; i++) {
context.successCallback = function (id, result) {
if (invokeContext.callback) {
invokeContext.callback({
id: id,
success: true,
data: result
});
}
};
context.errorCallback = function (id, error) {
var errorProcessed = false;
if (!invokeContext.silent) {
errorProcessed = processError(error);
}
if (invokeContext.callback) {
invokeContext.callback({
id: id,
success: false,
data: error,
errorProcessed: errorProcessed
});
}
};
}
if (arguments.length > 2) {
for (var i = 2; i < arguments.length; i++) {
if (arguments[i] != null && !angular.isUndefined(arguments[i])) {
params.push(arguments[i]);
finalParams.push(arguments[i]);
}
}
}
if (params.length > 0) {
context.params = params;
}
if (finalParams.length > 0) {
context.params = finalParams;
}
return context;
@ -136,167 +171,158 @@
// return invoke('addMetalink', context);
// },
remove: function (context) {
return invoke('remove', buildRequestContext(context, context.gid));
return invoke(buildRequestContext('remove', context, context.gid));
},
forceRemove: function (context) {
return invoke('forceRemove', buildRequestContext(context, context.gid));
return invoke(buildRequestContext('forceRemove', context, context.gid));
},
forceRemoveMulti: function (context) {
var contexts = [];
for (var i = 0; i < context.gids.length; i++) {
contexts.push({
silent: !!context.silent,
gid: context.gids[i]
});
}
return invokeMulti(this.forceRemove, contexts, 'gid', context.callback);
return invokeMulti(this.forceRemove, contexts, context.callback);
},
pause: function (context) {
return invoke('pause', buildRequestContext(context, context.gid));
return invoke(buildRequestContext('pause', context, context.gid));
},
pauseAll: function (context) {
return invoke('pauseAll', buildRequestContext(context));
return invoke(buildRequestContext('pauseAll', context));
},
forcePause: function (context) {
return invoke('forcePause', buildRequestContext(context, context.gid));
return invoke(buildRequestContext('forcePause', context, context.gid));
},
forcePauseMulti: function (context) {
var contexts = [];
for (var i = 0; i < context.gids.length; i++) {
contexts.push({
silent: !!context.silent,
gid: context.gids[i]
});
}
return invokeMulti(this.forcePause, contexts, 'gid', context.callback);
return invokeMulti(this.forcePause, contexts, context.callback);
},
forcePauseAll: function (context) {
return invoke('forcePauseAll', buildRequestContext(context));
return invoke(buildRequestContext('forcePauseAll', context));
},
unpause: function (context) {
return invoke('unpause', buildRequestContext(context, context.gid));
return invoke(buildRequestContext('unpause', context, context.gid));
},
unpauseMulti: function (context) {
var contexts = [];
for (var i = 0; i < context.gids.length; i++) {
contexts.push({
silent: !!context.silent,
gid: context.gids[i]
});
}
return invokeMulti(this.unpause, contexts, 'gid', context.callback);
return invokeMulti(this.unpause, contexts, context.callback);
},
unpauseAll: function (context) {
return invoke('unpauseAll', buildRequestContext(context));
return invoke(buildRequestContext('unpauseAll', context));
},
tellStatus: function (context) {
return invoke('tellStatus', buildRequestContext(context, context.gid));
return invoke(buildRequestContext('tellStatus', context, context.gid));
},
getUris: function (context) {
return invoke('getUris', buildRequestContext(context, context.gid));
return invoke(buildRequestContext('getUris', context, context.gid));
},
getFiles: function (context) {
return invoke('getFiles', buildRequestContext(context, context.gid));
return invoke(buildRequestContext('getFiles', context, context.gid));
},
getPeers: function (context) {
return invoke('getPeers', buildRequestContext(context, context.gid));
return invoke(buildRequestContext('getPeers', context, context.gid));
},
getServers: function (context) {
return invoke('getServers', buildRequestContext(context, context.gid));
return invoke(buildRequestContext('getServers', context, context.gid));
},
tellActive: function (context) {
return invoke('tellActive', buildRequestContext(context,
return invoke(buildRequestContext('tellActive', context,
angular.isUndefined(context.requestParams) ? null : context.requestParams
));
},
tellWaiting: function (context) {
return invoke('tellWaiting', buildRequestContext(context,
return invoke(buildRequestContext('tellWaiting', context,
angular.isUndefined(context.offset) ? 0 : context.offset,
angular.isUndefined(context.num) ? 1000 : context.num,
angular.isUndefined(context.requestParams) ? null : context.requestParams
));
},
tellStopped: function (context) {
return invoke('tellStopped', buildRequestContext(context,
return invoke(buildRequestContext('tellStopped', context,
angular.isUndefined(context.offset) ? 0 : context.offset,
angular.isUndefined(context.num) ? 1000 : context.num,
angular.isUndefined(context.requestParams) ? null : context.requestParams
));
},
changePosition: function (context) {
return invoke('changePosition', buildRequestContext(context, context.gid, context.pos, context.how));
return invoke(buildRequestContext('changePosition', context, context.gid, context.pos, context.how));
},
// changeUri: function (context) {
// return invoke('changeUri', context);
// },
getOption: function (context) {
return invoke('getOption', buildRequestContext(context, context.gid));
return invoke(buildRequestContext('getOption', context, context.gid));
},
changeOption: function (context) {
return invoke('changeOption', buildRequestContext(context, context.gid, context.options));
return invoke(buildRequestContext('changeOption', context, context.gid, context.options));
},
getGlobalOption: function (context) {
return invoke('getGlobalOption', buildRequestContext(context));
return invoke(buildRequestContext('getGlobalOption', context));
},
changeGlobalOption: function (context) {
return invoke('changeGlobalOption', buildRequestContext(context, context.options));
return invoke(buildRequestContext('changeGlobalOption', context, context.options));
},
getGlobalStat: function (context) {
return invoke('getGlobalStat', buildRequestContext(context));
return invoke(buildRequestContext('getGlobalStat', context));
},
purgeDownloadResult: function (context) {
return invoke('purgeDownloadResult', buildRequestContext(context));
return invoke(buildRequestContext('purgeDownloadResult', context));
},
removeDownloadResult: function (context) {
return invoke('removeDownloadResult', buildRequestContext(context, context.gid));
return invoke(buildRequestContext('removeDownloadResult', context, context.gid));
},
removeDownloadResultMulti: function (context) {
var contexts = [];
for (var i = 0; i < context.gids.length; i++) {
contexts.push({
silent: !!context.silent,
gid: context.gids[i]
});
}
return invokeMulti(this.removeDownloadResult, contexts, 'gid', context.callback);
return invokeMulti(this.removeDownloadResult, contexts, context.callback);
},
getVersion: function (context) {
return invoke('getVersion', buildRequestContext(context));
return invoke(buildRequestContext('getVersion', context));
},
getSessionInfo: function (context) {
return invoke('getSessionInfo', buildRequestContext(context));
return invoke(buildRequestContext('getSessionInfo', context));
},
shutdown: function (context) {
return invoke('shutdown', buildRequestContext(context));
return invoke(buildRequestContext('shutdown', context));
},
forceShutdown: function (context) {
return invoke('forceShutdown', buildRequestContext(context));
return invoke(buildRequestContext('forceShutdown', context));
},
saveSession: function (context) {
return invoke('saveSession', buildRequestContext(context));
return invoke(buildRequestContext('saveSession', context));
},
multicall: function (context) {
var requestContext = {
params: [],
silent: context.silent === true,
callback: context.callback
};
if (angular.isArray(context.methods) && context.methods.length > 0) {
for (var i = 0; i < context.methods.length; i++) {
var method = context.methods[i];
requestContext.params.push([method]);
}
}
return invoke('system.multicall', requestContext);
return invoke(buildRequestContext('system.multicall', context, context.methods));
},
listMethods: function (context) {
return invoke('system.listMethods', buildRequestContext(context));
return invoke(buildRequestContext('system.listMethods', context));
}
};
}]);

View File

@ -83,7 +83,7 @@
if (option.type == 'boolean') {
option.options = ['true', 'false'];
}
if (!!readonly) {
option.readonly = true;
}
@ -106,22 +106,25 @@
return options;
},
getGlobalOption: function (callback) {
getGlobalOption: function (callback, silent) {
return aria2RpcService.getGlobalOption({
silent: !!silent,
callback: callback
});
},
setGlobalOption: function (key, value, callback) {
setGlobalOption: function (key, value, callback, silent) {
var data = {};
data[key] = value;
return aria2RpcService.changeGlobalOption({
options: data,
silent: !!silent,
callback: callback
});
},
getAria2Status: function (callback) {
getAria2Status: function (callback, silent) {
return aria2RpcService.getVersion({
silent: !!silent,
callback: callback
})
},
@ -138,13 +141,15 @@
}
});
},
saveSession: function (callback) {
saveSession: function (callback, silent) {
return aria2RpcService.saveSession({
silent: !!silent,
callback: callback
})
},
shutdown: function (callback) {
shutdown: function (callback, silent) {
return aria2RpcService.shutdown({
silent: !!silent,
callback: callback
})
}

View File

@ -1,7 +1,7 @@
(function () {
'use strict';
angular.module('ariaNg').factory('aria2TaskService', ['$q', '$translate', 'aria2RpcService', function ($q, $translate, aria2RpcService) {
angular.module('ariaNg').factory('aria2TaskService', ['$q', '$translate', 'aria2RpcService', 'ariaNgCommonService', function ($q, $translate, aria2RpcService, ariaNgCommonService) {
var getFileNameFromPath = function (path) {
if (!path) {
return path;
@ -114,12 +114,12 @@
return invokeMethod({
requestParams: full ? aria2RpcService.getFullTaskParams() : aria2RpcService.getBasicTaskParams(),
silent: !!silent,
callback: function (result) {
callback: function (response) {
if (!callback) {
return;
}
callback(result);
callback(response);
}
});
},
@ -127,33 +127,38 @@
return aria2RpcService.tellStatus({
gid: gid,
silent: !!silent,
callback: function (result) {
callback: function (response) {
if (!callback) {
return;
}
var task = processDownloadTask(result);
callback(task);
if (response.success) {
processDownloadTask(response.data);
}
callback(response);
}
});
},
getTaskOptions: function (gid, callback) {
getTaskOptions: function (gid, callback, silent) {
return aria2RpcService.getOption({
gid: gid,
silent: !!silent,
callback: callback
});
},
setTaskOption: function (gid, key, value, callback) {
setTaskOption: function (gid, key, value, callback, silent) {
var data = {};
data[key] = value;
return aria2RpcService.changeOption({
gid: gid,
options: data,
silent: !!silent,
callback: callback
});
},
selectTaskFile: function (gid, selectedFileIndexArr, callback) {
selectTaskFile: function (gid, selectedFileIndexArr, callback, silent) {
var selectedFileIndex = '';
for (var i = 0; i < selectedFileIndexArr.length; i++) {
@ -164,41 +169,45 @@
selectedFileIndex += selectedFileIndexArr[i];
}
return this.setTaskOption(gid, 'select-file', selectedFileIndex, callback);
return this.setTaskOption(gid, 'select-file', selectedFileIndex, callback, silent);
},
getBtTaskPeers: function (gid, callback, silent) {
return aria2RpcService.getPeers({
gid: gid,
silent: !!silent,
callback: function (result) {
callback: function (response) {
if (!callback) {
return;
}
if (result) {
for (var i = 0; i < result.length; i++) {
var peer = result[i];
if (response.success) {
var peers = response.data;
for (var i = 0; i < peers.length; i++) {
var peer = peers[i];
peer.completePercent = estimateCompletedPercentFromBitField(peer.bitfield) * 100;
}
}
callback(result);
callback(response);
}
});
},
startTasks: function (gids, callback) {
startTasks: function (gids, callback, silent) {
return aria2RpcService.unpauseMulti({
gids: gids,
silent: !!silent,
callback: callback
});
},
pauseTasks: function (gids, callback) {
pauseTasks: function (gids, callback, silent) {
return aria2RpcService.forcePauseMulti({
gids: gids,
silent: !!silent,
callback: callback
});
},
removeTasks: function (tasks, callback) {
removeTasks: function (tasks, callback, silent) {
var runningTaskGids = [];
var stoppedTaskGids = [];
@ -211,16 +220,19 @@
}
var promises = [];
var results = {
runningResult: null,
stoppedResult: null
};
var hasSuccess = false;
var hasError = false;
var results = [];
if (runningTaskGids.length > 0) {
promises.push(aria2RpcService.forceRemoveMulti({
gids: runningTaskGids,
callback: function (result) {
results.runningResult = result;
silent: !!silent,
callback: function (response) {
ariaNgCommonService.pushArrayTo(results, response.results);
hasSuccess = hasSuccess | response.hasSuccess;
hasError = hasError | response.hasError;
}
}));
}
@ -228,28 +240,37 @@
if (stoppedTaskGids.length > 0) {
promises.push(aria2RpcService.removeDownloadResultMulti({
gids: stoppedTaskGids,
callback: function (result) {
results.stoppedResult = result;
silent: !!silent,
callback: function (response) {
ariaNgCommonService.pushArrayTo(results, response.results);
hasSuccess = hasSuccess | response.hasSuccess;
hasError = hasError | response.hasError;
}
}));
}
return $q.all(promises).then(function () {
if (callback) {
callback(results);
callback({
hasSuccess: !!hasSuccess,
hasError: !!hasError,
results: results
});
}
});
},
changeTaskPosition: function (gid, position, callback) {
changeTaskPosition: function (gid, position, callback, silent) {
return aria2RpcService.changePosition({
gid: gid,
pos: position,
how: 'POS_SET',
silent: !!silent,
callback: callback
})
},
clearStoppedTasks: function (callback) {
clearStoppedTasks: function (callback, silent) {
return aria2RpcService.purgeDownloadResult({
silent: !!silent,
callback: callback
});
},

View File

@ -40,16 +40,12 @@
context: context
});
if (content.error && context.errorCallback) {
context.errorCallback(content.error);
if (content.result && context.successCallback) {
context.successCallback(context.id, content.result);
}
if (context.callback) {
if (content.result) {
context.callback(content.result);
} else if (content.error) {
context.callback(content.error);
}
if (content.error && context.errorCallback) {
context.errorCallback(context.id, content.error);
}
delete sendIdStates[uniqueId];

View File

@ -11,7 +11,7 @@
<a class="pointer-cursor" ng-click="context.currentTab = 'filelist'" translate>Files</a>
</li>
<li ng-class="{'active': context.currentTab == 'btpeers'}" ng-if="task && task.status == 'active' && task.bittorrent">
<a class="pointer-cursor" ng-click="context.currentTab = 'btpeers'" translate>Peers</a>
<a class="pointer-cursor" ng-click="context.currentTab = 'btpeers';loadBtPeers(task);" translate>Peers</a>
</li>
<li ng-class="{'active': context.currentTab == 'settings'}" ng-if="task && (task.status == 'active' || task.status == 'waiting' || task.status == 'paused')" class="slim">
<a class="pointer-cursor" ng-click="context.currentTab = 'settings';loadTaskOption(task);">