446 lines
19 KiB
HTML
446 lines
19 KiB
HTML
<div id="gametitle">
|
|
<h1 id="gametitle_label">Settings</h1>
|
|
</div>
|
|
|
|
<h3>Libraries</h3>
|
|
<table id="settings_libraries" class="romtable" style="width: 100%;" cellspacing="0">
|
|
|
|
</table>
|
|
<div style="text-align: right;"><button id="settings_newlibrary" onclick="showDialog('librarynew');">New Library</button></div>
|
|
|
|
<h2>Advanced Settings</h2>
|
|
<p><strong>Warning</strong> Do not modify the below settings unless you know what you're doing.</p>
|
|
<h3>Background Task Timers</h3>
|
|
<table id="settings_tasktimers" class="romtable" style="width: 100%;" cellspacing="0">
|
|
|
|
</table>
|
|
<div style="text-align: right;"><button id="settings_tasktimers_default" onclick="defaultTaskTimers();">Reset to Default</button><button id="settings_tasktimers_new" onclick="saveTaskTimers();">Save</button></div>
|
|
|
|
<h3>System Settings</h3>
|
|
<table cellspacing="0" style="width: 100%;">
|
|
<tr>
|
|
<th colspan="2">Logging</th>
|
|
</tr>
|
|
<tr>
|
|
<th>
|
|
Write logs
|
|
</th>
|
|
<td>
|
|
<input type="radio" name="settings_logs_write" id="settings_logs_write_db" value="false" checked="checked"><label for="settings_logs_write_db"> To database only (default)</label>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td></td>
|
|
<td>
|
|
<input type="radio" name="settings_logs_write" id="settings_logs_write_fs" value="true"><label for="settings_logs_write_fs"> To database and disk</label>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2"> </td>
|
|
</tr>
|
|
<tr>
|
|
<th>
|
|
Minimum log retention (days):
|
|
</th>
|
|
<td>
|
|
<input type="number" min="1" id="settings_logs_retention" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<th colspan="2">Emulator</th>
|
|
</tr>
|
|
<tr>
|
|
<th>Enable debug mode</th>
|
|
<td><input type="checkbox" name="settings_emulator" id="settings_emulator_debug" checked="checked" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2" style="text-align: right;">
|
|
<button id="settings_tasktimers_new" onclick="setSystemSettings();">Save</button>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<script type="text/javascript">
|
|
function drawLibrary() {
|
|
ajaxCall(
|
|
'/api/v1.1/Library',
|
|
'GET',
|
|
function (result) {
|
|
var newTable = document.getElementById('settings_libraries');
|
|
newTable.innerHTML = '';
|
|
newTable.appendChild(createTableRow(true, ['Name', 'Path', 'Default Platform', 'Default Library', '']));
|
|
|
|
for (var i = 0; i < result.length; i++) {
|
|
var platformName = '';
|
|
if (result[i].defaultPlatformId == 0) {
|
|
if (result[i].isDefaultLibrary == true) {
|
|
platformName = "n/a";
|
|
} else {
|
|
platformName = "";
|
|
}
|
|
} else {
|
|
platformName = result[i].defaultPlatformName;
|
|
}
|
|
|
|
var defaultLibrary = '';
|
|
if (result[i].isDefaultLibrary == true) {
|
|
defaultLibrary = "Yes";
|
|
} else {
|
|
defaultLibrary = "";
|
|
}
|
|
|
|
var deleteButton = '';
|
|
if (result[i].isDefaultLibrary == false) {
|
|
var deleteButton = '<a href="#" onclick="showSubDialog(\'librarydelete\', ' + result[i].id + ');" class="romlink"><img src="/images/delete.svg" class="banner_button_image" alt="Delete" title="Delete" /></a>';
|
|
}
|
|
|
|
newTable.appendChild(createTableRow(
|
|
false,
|
|
[
|
|
result[i].name,
|
|
result[i].path,
|
|
platformName,
|
|
defaultLibrary,
|
|
'<div style="text-align: right;">' + deleteButton + '</div>'
|
|
],
|
|
'romrow',
|
|
'romcell'
|
|
));
|
|
}
|
|
}
|
|
);
|
|
}
|
|
|
|
function getBackgroundTaskTimers() {
|
|
ajaxCall(
|
|
'/api/v1/System/Settings/BackgroundTasks/Configuration',
|
|
'GET',
|
|
function(result) {
|
|
var targetTable = document.getElementById('settings_tasktimers');
|
|
targetTable.innerHTML = '';
|
|
|
|
for (const [key, value] of Object.entries(result)) {
|
|
var newTableRowBody = document.createElement('tbody');
|
|
newTableRowBody.className = 'romrow';
|
|
|
|
var enabledString = "";
|
|
if (value.enabled == true) {
|
|
enabledString = 'checked="checked"';
|
|
}
|
|
|
|
var newTableIntervalRow = createTableRow(
|
|
false,
|
|
[
|
|
GetTaskFriendlyName(value.task),
|
|
'Enabled',
|
|
'<input id="settings_enabled_' + value.task + '" name="settings_tasktimers_enabled" type="checkbox" ' + enabledString + '/>',
|
|
],
|
|
'',
|
|
'romcell'
|
|
);
|
|
newTableRowBody.appendChild(newTableIntervalRow);
|
|
|
|
var newTableRow = createTableRow(
|
|
false,
|
|
[
|
|
'',
|
|
'Minimum Interval (Minutes):',
|
|
'<input id="settings_tasktimers_' + value.task + '" name="settings_tasktimers_values" data-name="' + value.task + '" data-default="' + value.defaultInterval + '" type="number" placeholder="' + value.defaultInterval + '" min="' + value.minimumAllowedInterval + '" value="' + value.interval + '" />'
|
|
],
|
|
'',
|
|
'romcell'
|
|
);
|
|
newTableRowBody.appendChild(newTableRow);
|
|
|
|
// allowed time periods row
|
|
var newTableRowTime = document.createElement('tr');
|
|
var rowTimeSpace = document.createElement('td');
|
|
newTableRowTime.appendChild(rowTimeSpace);
|
|
|
|
var rowTimeContentTitle = document.createElement('td');
|
|
rowTimeContentTitle.className = 'romcell';
|
|
rowTimeContentTitle.innerHTML = "Allowed Days:";
|
|
newTableRowTime.appendChild(rowTimeContentTitle);
|
|
|
|
var rowTimeContent = document.createElement('td');
|
|
// rowTimeContent.setAttribute('colspan', 2);
|
|
rowTimeContent.className = 'romcell';
|
|
var daySelector = document.createElement('select');
|
|
daySelector.id = 'settings_alloweddays_' + value.task;
|
|
daySelector.name = 'settings_alloweddays';
|
|
daySelector.multiple = 'multiple';
|
|
daySelector.setAttribute('data-default', value.defaultAllowedDays.join(","));
|
|
daySelector.style.width = '95%';
|
|
var days = [ "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" ];
|
|
for (var d = 0; d < days.length; d++) {
|
|
var dayOpt = document.createElement('option');
|
|
dayOpt.value = days[d];
|
|
dayOpt.innerHTML = days[d];
|
|
if (value.allowedDays.includes(days[d])) {
|
|
dayOpt.selected = 'selected';
|
|
}
|
|
daySelector.appendChild(dayOpt);
|
|
}
|
|
rowTimeContent.appendChild(daySelector);
|
|
$(daySelector).select2({
|
|
tags: false
|
|
});
|
|
newTableRowTime.appendChild(rowTimeContent);
|
|
|
|
newTableRowBody.appendChild(newTableRowTime);
|
|
|
|
// add start and end times
|
|
var newTableRowClock = document.createElement('tr');
|
|
var rowClockSpace = document.createElement('td');
|
|
newTableRowClock.appendChild(rowClockSpace);
|
|
|
|
var rowClockContentTitle = document.createElement('td');
|
|
rowClockContentTitle.className = 'romcell';
|
|
rowClockContentTitle.innerHTML = "Time Range:";
|
|
newTableRowClock.appendChild(rowClockContentTitle);
|
|
|
|
var rowClockContent = document.createElement('td');
|
|
rowClockContent.className = 'romcell';
|
|
// rowClockContent.setAttribute('colspan', 2);
|
|
|
|
rowClockContent.appendChild(generateTimeDropDowns(value.task, 'Start', value.defaultAllowedStartHours, value.defaultAllowedStartMinutes, value.allowedStartHours, value.allowedStartMinutes));
|
|
|
|
rowClockContentSeparator = document.createElement('span');
|
|
rowClockContentSeparator.innerHTML = ' - ';
|
|
rowClockContent.appendChild(rowClockContentSeparator);
|
|
|
|
rowClockContent.appendChild(generateTimeDropDowns(value.task, 'End', value.defaultAllowedEndHours, value.defaultAllowedEndMinutes, value.allowedEndHours, value.allowedEndMinutes));
|
|
|
|
newTableRowClock.appendChild(rowClockContent);
|
|
|
|
newTableRowBody.appendChild(newTableRowClock);
|
|
|
|
// blocks tasks
|
|
var newTableRowBlocks = document.createElement('tr');
|
|
var rowBlocksSpace = document.createElement('td');
|
|
newTableRowBlocks.appendChild(rowBlocksSpace);
|
|
|
|
var rowBlocksContentTitle = document.createElement('td');
|
|
rowBlocksContentTitle.className = 'romcell';
|
|
rowBlocksContentTitle.innerHTML = "Blocks:";
|
|
newTableRowBlocks.appendChild(rowBlocksContentTitle);
|
|
|
|
var rowBlocksContent = document.createElement('td');
|
|
rowBlocksContent.className = 'romcell';
|
|
// rowBlocksContent.setAttribute('colspan', 2);
|
|
var blocksString = "";
|
|
for (var i = 0; i < value.blocks.length; i++) {
|
|
if (blocksString.length > 0) { blocksString += ", "; }
|
|
blocksString += GetTaskFriendlyName(value.blocks[i]);
|
|
}
|
|
if (blocksString.length == 0) { blocksString = 'None'; }
|
|
rowBlocksContent.innerHTML = blocksString;
|
|
newTableRowBlocks.appendChild(rowBlocksContent);
|
|
|
|
newTableRowBody.appendChild(newTableRowBlocks);
|
|
|
|
// blocked by tasks
|
|
var newTableRowBlockedBy = document.createElement('tr');
|
|
var rowBlockedBySpace = document.createElement('td');
|
|
newTableRowBlockedBy.appendChild(rowBlockedBySpace);
|
|
|
|
var rowBlockedByContentTitle = document.createElement('td');
|
|
rowBlockedByContentTitle.className = 'romcell';
|
|
rowBlockedByContentTitle.innerHTML = "Blocked By:";
|
|
newTableRowBlockedBy.appendChild(rowBlockedByContentTitle);
|
|
|
|
var rowBlockedByContent = document.createElement('td');
|
|
rowBlockedByContent.className = 'romcell';
|
|
// rowBlockedByContent.setAttribute('colspan', 2);
|
|
var BlockedByString = "";
|
|
for (var i = 0; i < value.blockedBy.length; i++) {
|
|
if (BlockedByString.length > 0) { BlockedByString += ", "; }
|
|
BlockedByString += GetTaskFriendlyName(value.blockedBy[i]);
|
|
}
|
|
if (BlockedByString.length == 0) { BlockedByString = 'None'; }
|
|
rowBlockedByContent.innerHTML = BlockedByString;
|
|
newTableRowBlockedBy.appendChild(rowBlockedByContent);
|
|
|
|
newTableRowBody.appendChild(newTableRowBlockedBy);
|
|
|
|
// complete row
|
|
targetTable.appendChild(newTableRowBody);
|
|
}
|
|
}
|
|
);
|
|
}
|
|
|
|
function generateTimeDropDowns(taskName, rangeName, defaultHour, defaultMinute, valueHour, valueMinute) {
|
|
var container = document.createElement('div');
|
|
container.style.display = 'inline';
|
|
|
|
var elementName = 'settings_tasktimers_time';
|
|
|
|
var hourSelector = document.createElement('input');
|
|
hourSelector.id = 'settings_tasktimers_' + taskName + '_' + rangeName + '_Hour';
|
|
hourSelector.name = elementName;
|
|
hourSelector.setAttribute('data-name', taskName);
|
|
hourSelector.setAttribute('type', 'number');
|
|
hourSelector.setAttribute('min', '0');
|
|
hourSelector.setAttribute('max', '23');
|
|
hourSelector.setAttribute('placeholder', defaultHour);
|
|
hourSelector.value = valueHour;
|
|
container.appendChild(hourSelector);
|
|
|
|
var separator = document.createElement('span');
|
|
separator.innerHTML = " : ";
|
|
container.appendChild(separator);
|
|
|
|
var minSelector = document.createElement('input');
|
|
minSelector.id = 'settings_tasktimers_' + taskName + '_' + rangeName + '_Minute';
|
|
minSelector.name = elementName;
|
|
minSelector.setAttribute('type', 'number');
|
|
minSelector.setAttribute('min', '0');
|
|
minSelector.setAttribute('max', '59');
|
|
minSelector.setAttribute('placeholder', defaultMinute);
|
|
minSelector.value = valueMinute;
|
|
container.appendChild(minSelector);
|
|
|
|
return container;
|
|
}
|
|
|
|
function saveTaskTimers() {
|
|
var timerValues = document.getElementsByName('settings_tasktimers_values');
|
|
|
|
var model = [];
|
|
for (var i = 0; i < timerValues.length; i++) {
|
|
var taskName = timerValues[i].getAttribute('data-name');
|
|
var taskEnabled = document.getElementById('settings_enabled_' + taskName).checked;
|
|
var taskIntervalObj = document.getElementById('settings_tasktimers_' + taskName);
|
|
var taskInterval = function() { if (taskIntervalObj.value) { return taskIntervalObj.value; } else { return taskIntervalObj.getAttribute('placeholder'); } };
|
|
var taskDaysRaw = $('#settings_alloweddays_' + taskName).select2('data');
|
|
var taskDays = [];
|
|
if (taskDaysRaw.length > 0) {
|
|
for (var d = 0; d < taskDaysRaw.length; d++) {
|
|
taskDays.push(taskDaysRaw[d].id);
|
|
}
|
|
} else {
|
|
taskDays.push("Monday");
|
|
}
|
|
var taskStartHourObj = document.getElementById('settings_tasktimers_' + taskName + '_Start_Hour');
|
|
var taskStartMinuteObj = document.getElementById('settings_tasktimers_' + taskName + '_Start_Minute');
|
|
var taskEndHourObj = document.getElementById('settings_tasktimers_' + taskName + '_End_Hour');
|
|
var taskEndMinuteObj = document.getElementById('settings_tasktimers_' + taskName + '_End_Minute');
|
|
|
|
var taskStartHour = function() { if (taskStartHourObj.value) { return taskStartHourObj.value; } else { return taskStartHourObj.getAttribute('placeholder'); } };
|
|
var taskStartMinute = function() { if (taskStartMinuteObj.value) { return taskStartMinuteObj.value; } else { return taskStartMinuteObj.getAttribute('placeholder'); } };
|
|
var taskEndHour = function() { if (taskEndHourObj.value) { return taskEndHourObj.value; } else { return taskEndHourObj.getAttribute('placeholder'); } };
|
|
var taskEndMinute = function() { if (taskEndMinuteObj.value) { return taskEndMinuteObj.value; } else { return taskEndMinuteObj.getAttribute('placeholder'); } };
|
|
|
|
model.push(
|
|
{
|
|
"task": taskName,
|
|
"enabled": taskEnabled,
|
|
"interval": taskInterval(),
|
|
"allowedDays": taskDays,
|
|
"allowedStartHours": taskStartHour(),
|
|
"allowedStartMinutes": taskStartMinute(),
|
|
"allowedEndHours": taskEndHour(),
|
|
"allowedEndMinutes": taskEndMinute()
|
|
}
|
|
);
|
|
}
|
|
|
|
ajaxCall(
|
|
'/api/v1/System/Settings/BackgroundTasks/Configuration',
|
|
'POST',
|
|
function(result) {
|
|
getBackgroundTaskTimers();
|
|
},
|
|
function(error) {
|
|
getBackgroundTaskTimers();
|
|
},
|
|
JSON.stringify(model)
|
|
);
|
|
}
|
|
|
|
function defaultTaskTimers() {
|
|
var timerValues = document.getElementsByName('settings_tasktimers_enabled');
|
|
|
|
for (var i = 0; i < timerValues.length; i++) {
|
|
timerValues[i].checked = true;
|
|
}
|
|
|
|
var timerValues = document.getElementsByName('settings_tasktimers_values');
|
|
|
|
for (var i = 0; i < timerValues.length; i++) {
|
|
timerValues[i].value = timerValues[i].getAttribute('data-default');
|
|
}
|
|
|
|
var timerValues = document.getElementsByName('settings_alloweddays');
|
|
|
|
for (var i = 0; i < timerValues.length; i++) {
|
|
var defaultSelections = timerValues[i].getAttribute('data-default').split(',');
|
|
$(timerValues[i]).val(defaultSelections);
|
|
$(timerValues[i]).trigger('change');
|
|
}
|
|
|
|
var timerValues = document.getElementsByName('settings_tasktimers_time');
|
|
|
|
for (var i = 0; i < timerValues.length; i++) {
|
|
timerValues[i].value = timerValues[i].getAttribute('placeholder');
|
|
}
|
|
|
|
saveTaskTimers();
|
|
}
|
|
|
|
function getSystemSettings() {
|
|
ajaxCall(
|
|
'/api/v1/System/Settings/System',
|
|
'GET',
|
|
function(result) {
|
|
var optionToSelect = 'settings_logs_write_db';
|
|
if (result.alwaysLogToDisk == true) {
|
|
optionToSelect = 'settings_logs_write_fs';
|
|
}
|
|
document.getElementById(optionToSelect).checked = true;
|
|
|
|
document.getElementById('settings_logs_retention').value = result.minimumLogRetentionPeriod;
|
|
|
|
document.getElementById('settings_emulator_debug').checked = result.emulatorDebugMode;
|
|
}
|
|
);
|
|
}
|
|
|
|
function setSystemSettings() {
|
|
var alwaysLogToDisk = false;
|
|
if ($("input[type='radio'][name='settings_logs_write']:checked").val() == "true") {
|
|
alwaysLogToDisk = true;
|
|
}
|
|
|
|
var retention = document.getElementById('settings_logs_retention');
|
|
var retentionValue = 0;
|
|
if (retention.value) {
|
|
retentionValue = retention.value;
|
|
} else {
|
|
retentionValue = 7;
|
|
}
|
|
|
|
var model = {
|
|
"alwaysLogToDisk": alwaysLogToDisk,
|
|
"minimumLogRetentionPeriod": retentionValue,
|
|
"emulatorDebugMode": document.getElementById('settings_emulator_debug').checked
|
|
};
|
|
|
|
ajaxCall(
|
|
'/api/v1/System/Settings/System',
|
|
'POST',
|
|
function(result) {
|
|
getSystemSettings();
|
|
},
|
|
function(error) {
|
|
getSystemSettings();
|
|
},
|
|
JSON.stringify(model)
|
|
);
|
|
}
|
|
|
|
drawLibrary();
|
|
getBackgroundTaskTimers();
|
|
getSystemSettings();
|
|
</script> |