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/src/scripts/services/aria2SettingService.js

277 lines
10 KiB
JavaScript
Raw Normal View History

2016-05-31 16:51:12 +02:00
(function () {
'use strict';
2018-08-12 14:47:48 +02:00
angular.module('ariaNg').factory('aria2SettingService', ['ariaNgConstants', 'aria2AllOptions', 'aria2GlobalAvailableOptions', 'aria2QuickSettingsAvailableOptions', 'aria2TaskAvailableOptions', 'aria2RpcService', 'ariaNgLogService', 'ariaNgStorageService', function (ariaNgConstants, aria2AllOptions, aria2GlobalAvailableOptions, aria2QuickSettingsAvailableOptions, aria2TaskAvailableOptions, aria2RpcService, ariaNgLogService, ariaNgStorageService) {
2016-05-31 16:51:12 +02:00
var processStatResult = function (stat) {
if (!stat) {
return stat;
}
2016-06-01 18:02:10 +02:00
2016-05-31 16:51:12 +02:00
var activeCount = parseInt(stat.numActive);
var waitingCount = parseInt(stat.numWaiting);
var totalRunningCount = activeCount + waitingCount;
stat.totalRunningCount = totalRunningCount;
2016-06-01 18:02:10 +02:00
2016-05-31 16:51:12 +02:00
return stat;
};
2016-06-01 18:02:10 +02:00
var getSettingHistoryKey = function (key) {
return ariaNgConstants.settingHistoryKeyPrefix + '.' + key;
};
2016-05-31 16:51:12 +02:00
return {
isOptionKeyValid: function (key) {
var option = aria2AllOptions[key];
return !!option;
},
2016-06-01 18:02:10 +02:00
getAvailableGlobalOptionsKeys: function (type) {
2016-08-01 19:26:10 +02:00
if (type === 'basic') {
2016-05-31 16:51:12 +02:00
return aria2GlobalAvailableOptions.basicOptions;
2016-08-01 19:26:10 +02:00
} else if (type === 'http-ftp-sftp') {
2016-05-31 16:51:12 +02:00
return aria2GlobalAvailableOptions.httpFtpSFtpOptions;
2016-08-01 19:26:10 +02:00
} else if (type === 'http') {
2016-05-31 16:51:12 +02:00
return aria2GlobalAvailableOptions.httpOptions;
2016-08-01 19:26:10 +02:00
} else if (type === 'ftp-sftp') {
2016-05-31 16:51:12 +02:00
return aria2GlobalAvailableOptions.ftpSFtpOptions;
2016-08-01 19:26:10 +02:00
} else if (type === 'bt') {
2016-05-31 16:51:12 +02:00
return aria2GlobalAvailableOptions.btOptions;
2016-08-01 19:26:10 +02:00
} else if (type === 'metalink') {
2016-05-31 16:51:12 +02:00
return aria2GlobalAvailableOptions.metalinkOptions;
2016-08-01 19:26:10 +02:00
} else if (type === 'rpc') {
2016-05-31 16:51:12 +02:00
return aria2GlobalAvailableOptions.rpcOptions;
2016-08-01 19:26:10 +02:00
} else if (type === 'advanced') {
2016-05-31 16:51:12 +02:00
return aria2GlobalAvailableOptions.advancedOptions;
} else {
return false;
}
},
2018-05-20 16:58:16 +02:00
getAria2QuickSettingsAvailableOptions: function (type) {
2017-05-14 16:45:35 +02:00
if (type === 'globalSpeedLimit') {
return aria2QuickSettingsAvailableOptions.globalSpeedLimitOptions;
} else {
return false;
}
},
2016-06-01 18:02:10 +02:00
getAvailableTaskOptionKeys: function (status, isBittorrent) {
2016-07-03 10:15:47 +02:00
var allOptions = aria2TaskAvailableOptions.taskOptions;
var availableOptions = [];
for (var i = 0; i < allOptions.length; i++) {
var option = allOptions[i];
var optionKey = {
key: option.key,
category: option.category
2016-06-06 16:34:55 +02:00
};
2016-07-03 10:15:47 +02:00
if (option.canShow && option.canShow.indexOf(status) < 0) {
2016-07-03 10:15:47 +02:00
continue;
}
if (option.category === 'http' && isBittorrent) {
2016-07-03 10:15:47 +02:00
continue;
} else if (option.category === 'bittorrent' && !isBittorrent) {
2016-07-03 10:15:47 +02:00
continue;
}
if (option.canUpdate && option.canUpdate.indexOf(status) < 0) {
2016-07-03 10:15:47 +02:00
optionKey.readonly = true;
}
availableOptions.push(optionKey);
2016-06-01 18:02:10 +02:00
}
2016-07-03 10:15:47 +02:00
return availableOptions;
2016-06-01 18:02:10 +02:00
},
getNewTaskOptionKeys: function () {
2016-07-03 10:15:47 +02:00
var allOptions = aria2TaskAvailableOptions.taskOptions;
var availableOptions = [];
for (var i = 0; i < allOptions.length; i++) {
var option = allOptions[i];
var optionKey = {
key: option.key,
category: option.category,
showHistory: option.showHistory
2016-07-03 10:15:47 +02:00
};
if (option.canShow && option.canShow.indexOf('new') < 0) {
continue;
}
if (option.canUpdate && option.canUpdate.indexOf('new') < 0) {
optionKey.readonly = true;
}
2016-07-03 10:15:47 +02:00
availableOptions.push(optionKey);
}
return availableOptions;
},
getSpecifiedOptions: function (keys, extendSettings) {
2016-05-31 16:51:12 +02:00
var options = [];
if (!keys) {
return options;
}
2016-05-31 16:51:12 +02:00
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
2016-07-03 10:15:47 +02:00
var readonly = false;
var category = null;
var showHistory = false;
2016-07-03 10:15:47 +02:00
if (angular.isObject(key)) {
var optionKey = key;
key = optionKey.key;
readonly = !!optionKey.readonly;
category = optionKey.category;
showHistory = !!optionKey.showHistory;
2016-07-03 10:15:47 +02:00
}
2016-05-31 16:51:12 +02:00
var option = aria2AllOptions[key];
if (!option) {
continue;
}
option = angular.extend({
key: key,
nameKey: 'options.' + key + '.name',
descriptionKey: 'options.' + key + '.description'
}, option);
if (category) {
option.category = category;
}
2016-08-01 19:26:10 +02:00
if (option.type === 'boolean') {
2016-06-05 18:49:48 +02:00
option.options = ['true', 'false'];
}
2016-06-10 13:23:16 +02:00
2016-07-03 10:15:47 +02:00
if (readonly) {
2016-06-06 16:34:55 +02:00
option.readonly = true;
}
if (showHistory) {
option.showHistory = true;
}
if (extendSettings && extendSettings.disableRequired) {
option.required = false;
}
2016-06-05 18:49:48 +02:00
if (option.options) {
var availableOptions = [];
for (var j = 0; j < option.options.length; j++) {
availableOptions.push({
2018-07-01 16:53:20 +02:00
name: 'option.' + option.options[j],
2016-06-05 18:49:48 +02:00
value: option.options[j]
});
}
option.options = availableOptions;
}
2016-05-31 16:51:12 +02:00
options.push(option);
}
return options;
},
getSettingHistory: function (key) {
if (!this.isOptionKeyValid(key)) {
return [];
}
var storageKey = getSettingHistoryKey(key);
2018-08-12 14:47:48 +02:00
var history = ariaNgStorageService.get(storageKey) || [];
var newHistory = [];
for (var i = 0; i < Math.min(history.length, ariaNgConstants.historyMaxStoreCount); i++) {
newHistory.push(history[i]);
}
return newHistory;
},
addSettingHistory: function (key, value) {
if (!this.isOptionKeyValid(key)) {
return [];
}
var storageKey = getSettingHistoryKey(key);
2018-08-12 14:47:48 +02:00
var history = ariaNgStorageService.get(storageKey) || [];
var newHistory = [];
newHistory.push(value);
for (var i = 0; i < Math.min(history.length, ariaNgConstants.historyMaxStoreCount - 1); i++) {
if (history[i] !== value) {
newHistory.push(history[i]);
}
}
2018-08-12 14:47:48 +02:00
ariaNgStorageService.set(storageKey, newHistory);
return newHistory;
},
clearSettingsHistorys: function () {
2018-08-12 14:47:48 +02:00
var keys = ariaNgStorageService.keys(ariaNgConstants.settingHistoryKeyPrefix + '.');
for (var i = 0; i < keys.length; i++) {
2018-08-12 14:47:48 +02:00
ariaNgStorageService.remove(keys[i]);
}
},
2016-06-10 13:23:16 +02:00
getGlobalOption: function (callback, silent) {
2016-05-31 16:51:12 +02:00
return aria2RpcService.getGlobalOption({
2016-06-10 13:23:16 +02:00
silent: !!silent,
2016-05-31 16:51:12 +02:00
callback: callback
});
},
2016-06-10 13:23:16 +02:00
setGlobalOption: function (key, value, callback, silent) {
2016-05-31 16:51:12 +02:00
var data = {};
data[key] = value;
return aria2RpcService.changeGlobalOption({
options: data,
2016-06-10 13:23:16 +02:00
silent: !!silent,
2016-05-31 16:51:12 +02:00
callback: callback
});
},
2016-06-10 13:23:16 +02:00
getAria2Status: function (callback, silent) {
2016-05-31 16:51:12 +02:00
return aria2RpcService.getVersion({
2016-06-10 13:23:16 +02:00
silent: !!silent,
2016-05-31 16:51:12 +02:00
callback: callback
2016-12-10 18:50:25 +01:00
});
2016-05-31 16:51:12 +02:00
},
2016-06-04 09:33:40 +02:00
getGlobalStat: function (callback, silent) {
2016-05-31 16:51:12 +02:00
return aria2RpcService.getGlobalStat({
2016-06-04 09:33:40 +02:00
silent: !!silent,
2016-07-03 11:53:25 +02:00
callback: function (response) {
2016-05-31 16:51:12 +02:00
if (!callback) {
2016-12-10 18:50:25 +01:00
ariaNgLogService.warn('[aria2SettingService.getGlobalStat] callback is null');
2016-05-31 16:51:12 +02:00
return;
}
2016-07-03 11:53:25 +02:00
var stat = processStatResult(response);
2016-05-31 16:51:12 +02:00
callback(stat);
}
});
},
2016-06-10 13:23:16 +02:00
saveSession: function (callback, silent) {
return aria2RpcService.saveSession({
2016-06-10 13:23:16 +02:00
silent: !!silent,
callback: callback
2016-12-10 18:50:25 +01:00
});
},
2016-06-10 13:23:16 +02:00
shutdown: function (callback, silent) {
return aria2RpcService.shutdown({
2016-06-10 13:23:16 +02:00
silent: !!silent,
callback: callback
2016-12-10 18:50:25 +01:00
});
2016-05-31 16:51:12 +02:00
}
};
}]);
2016-08-01 16:49:16 +02:00
}());