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

188 lines
6.7 KiB
JavaScript

(function () {
'use strict';
angular.module('ariaNg').factory('aria2SettingService', ['aria2AllOptions', 'aria2GlobalAvailableOptions', 'aria2TaskAvailableOptions', 'ariaNgCommonService', 'aria2RpcService', 'ariaNgLogService', function (aria2AllOptions, aria2GlobalAvailableOptions, aria2TaskAvailableOptions, ariaNgCommonService, aria2RpcService, ariaNgLogService) {
var processStatResult = function (stat) {
if (!stat) {
return stat;
}
var activeCount = parseInt(stat.numActive);
var waitingCount = parseInt(stat.numWaiting);
var totalRunningCount = activeCount + waitingCount;
stat.totalRunningCount = totalRunningCount;
return stat;
};
return {
getAvailableGlobalOptionsKeys: function (type) {
if (type === 'basic') {
return aria2GlobalAvailableOptions.basicOptions;
} else if (type === 'http-ftp-sftp') {
return aria2GlobalAvailableOptions.httpFtpSFtpOptions;
} else if (type === 'http') {
return aria2GlobalAvailableOptions.httpOptions;
} else if (type === 'ftp-sftp') {
return aria2GlobalAvailableOptions.ftpSFtpOptions;
} else if (type === 'bt') {
return aria2GlobalAvailableOptions.btOptions;
} else if (type === 'metalink') {
return aria2GlobalAvailableOptions.metalinkOptions;
} else if (type === 'rpc') {
return aria2GlobalAvailableOptions.rpcOptions;
} else if (type === 'advanced') {
return aria2GlobalAvailableOptions.advancedOptions;
} else {
return false;
}
},
getAvailableTaskOptionKeys: function (status, isBittorrent) {
var allOptions = aria2TaskAvailableOptions.taskOptions;
var availableOptions = [];
for (var i = 0; i < allOptions.length; i++) {
var option = allOptions[i];
var optionKey = {
key: option.key
};
if (option.newOnly) {
continue;
}
if (option.httpOnly && isBittorrent) {
continue;
} else if (option.btOnly && !isBittorrent) {
continue;
}
if (option.activeReadonly && status === 'active') {
optionKey.readonly = true;
}
availableOptions.push(optionKey);
}
return availableOptions;
},
getNewTaskOptionKeys: function (isBittorrent) {
var allOptions = aria2TaskAvailableOptions.taskOptions;
var availableOptions = [];
for (var i = 0; i < allOptions.length; i++) {
var option = allOptions[i];
var optionKey = {
key: option.key
};
availableOptions.push(optionKey);
}
return availableOptions;
},
getSpecifiedOptions: function (keys) {
var options = [];
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
var readonly = false;
if (angular.isObject(key)) {
var optionKey = key;
key = optionKey.key;
readonly = !!optionKey.readonly;
}
var option = aria2AllOptions[key];
if (!option) {
continue;
}
option = angular.extend({
key: key,
nameKey: 'options.' + key + '.name',
descriptionKey: 'options.' + key + '.description'
}, option);
if (option.type === 'boolean') {
option.options = ['true', 'false'];
}
if (readonly) {
option.readonly = true;
}
if (option.options) {
var availableOptions = [];
for (var j = 0; j < option.options.length; j++) {
availableOptions.push({
name: 'options.' + option.options[j],
value: option.options[j]
});
}
option.options = availableOptions;
}
options.push(option);
}
return options;
},
getGlobalOption: function (callback, silent) {
return aria2RpcService.getGlobalOption({
silent: !!silent,
callback: callback
});
},
setGlobalOption: function (key, value, callback, silent) {
var data = {};
data[key] = value;
return aria2RpcService.changeGlobalOption({
options: data,
silent: !!silent,
callback: callback
});
},
getAria2Status: function (callback, silent) {
return aria2RpcService.getVersion({
silent: !!silent,
callback: callback
});
},
getGlobalStat: function (callback, silent) {
return aria2RpcService.getGlobalStat({
silent: !!silent,
callback: function (response) {
if (!callback) {
ariaNgLogService.warn('[aria2SettingService.getGlobalStat] callback is null');
return;
}
var stat = processStatResult(response);
callback(stat);
}
});
},
saveSession: function (callback, silent) {
return aria2RpcService.saveSession({
silent: !!silent,
callback: callback
});
},
shutdown: function (callback, silent) {
return aria2RpcService.shutdown({
silent: !!silent,
callback: callback
});
}
};
}]);
}());