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
|
|
|
|
2018-05-20 16:56:12 +02:00
|
|
|
var getSettingHistoryKey = function (key) {
|
|
|
|
return ariaNgConstants.settingHistoryKeyPrefix + '.' + key;
|
|
|
|
};
|
|
|
|
|
2016-05-31 16:51:12 +02:00
|
|
|
return {
|
2017-12-09 15:05:15 +01:00
|
|
|
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 = {
|
2016-12-24 18:07:16 +01:00
|
|
|
key: option.key,
|
|
|
|
category: option.category
|
2016-06-06 16:34:55 +02:00
|
|
|
};
|
2016-07-03 10:15:47 +02:00
|
|
|
|
2016-12-24 18:07:16 +01:00
|
|
|
if (option.canShow && option.canShow.indexOf(status) < 0) {
|
2016-07-03 10:15:47 +02:00
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
2016-12-24 18:07:16 +01:00
|
|
|
if (option.category === 'http' && isBittorrent) {
|
2016-07-03 10:15:47 +02:00
|
|
|
continue;
|
2016-12-24 18:07:16 +01:00
|
|
|
} else if (option.category === 'bittorrent' && !isBittorrent) {
|
2016-07-03 10:15:47 +02:00
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
2016-12-24 18:07:16 +01:00
|
|
|
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
|
|
|
},
|
2017-03-25 05:57:07 +01: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 = {
|
2016-12-24 18:07:16 +01:00
|
|
|
key: option.key,
|
2018-05-20 16:56:12 +02:00
|
|
|
category: option.category,
|
|
|
|
showHistory: option.showHistory
|
2016-07-03 10:15:47 +02:00
|
|
|
};
|
|
|
|
|
2016-12-24 18:07:16 +01: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;
|
2016-06-19 17:10:26 +02:00
|
|
|
},
|
2017-03-25 05:57:07 +01:00
|
|
|
getSpecifiedOptions: function (keys, extendSettings) {
|
2016-05-31 16:51:12 +02:00
|
|
|
var options = [];
|
|
|
|
|
2017-03-25 05:57:07 +01:00
|
|
|
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;
|
2016-12-24 18:07:16 +01:00
|
|
|
var category = null;
|
2018-05-20 16:56:12 +02:00
|
|
|
var showHistory = false;
|
2016-07-03 10:15:47 +02:00
|
|
|
|
|
|
|
if (angular.isObject(key)) {
|
|
|
|
var optionKey = key;
|
|
|
|
|
|
|
|
key = optionKey.key;
|
|
|
|
readonly = !!optionKey.readonly;
|
2016-12-24 18:07:16 +01:00
|
|
|
category = optionKey.category;
|
2018-05-20 16:56:12 +02:00
|
|
|
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);
|
|
|
|
|
2016-12-24 18:07:16 +01:00
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
2018-05-20 16:56:12 +02:00
|
|
|
if (showHistory) {
|
|
|
|
option.showHistory = true;
|
|
|
|
}
|
|
|
|
|
2017-03-25 05:57:07 +01:00
|
|
|
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;
|
|
|
|
},
|
2018-05-20 16:56:12 +02:00
|
|
|
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) || [];
|
2018-05-20 16:56:12 +02:00
|
|
|
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) || [];
|
2018-05-20 16:56:12 +02:00
|
|
|
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);
|
2018-05-20 16:56:12 +02:00
|
|
|
|
|
|
|
return newHistory;
|
|
|
|
},
|
|
|
|
clearSettingsHistorys: function () {
|
2018-08-12 14:47:48 +02:00
|
|
|
var keys = ariaNgStorageService.keys(ariaNgConstants.settingHistoryKeyPrefix + '.');
|
2018-05-20 16:56:12 +02:00
|
|
|
|
|
|
|
for (var i = 0; i < keys.length; i++) {
|
2018-08-12 14:47:48 +02:00
|
|
|
ariaNgStorageService.remove(keys[i]);
|
2018-05-20 16:56:12 +02:00
|
|
|
}
|
|
|
|
},
|
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-05 18:01:11 +02:00
|
|
|
},
|
2016-06-10 13:23:16 +02:00
|
|
|
saveSession: function (callback, silent) {
|
2016-06-05 18:01:11 +02:00
|
|
|
return aria2RpcService.saveSession({
|
2016-06-10 13:23:16 +02:00
|
|
|
silent: !!silent,
|
2016-06-05 18:01:11 +02:00
|
|
|
callback: callback
|
2016-12-10 18:50:25 +01:00
|
|
|
});
|
2016-06-05 18:01:11 +02:00
|
|
|
},
|
2016-06-10 13:23:16 +02:00
|
|
|
shutdown: function (callback, silent) {
|
2016-06-05 18:01:11 +02:00
|
|
|
return aria2RpcService.shutdown({
|
2016-06-10 13:23:16 +02:00
|
|
|
silent: !!silent,
|
2016-06-05 18:01:11 +02:00
|
|
|
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
|
|
|
}());
|