General: Rework App Log. Launcher is no longer able to get log data from fpPS4 process, CSS: Small fixes

This commit is contained in:
TemmieHeartz 2023-01-03 09:05:52 -03:00
parent ec1efd8d33
commit 0146d0a560
8 changed files with 87 additions and 243 deletions

View file

@ -89,14 +89,14 @@ img {
overflow: hidden;
position: absolute;
background-color: #162a50;
height: calc(100% - 286px);
height: calc(100% - 202px);
background-image: linear-gradient(146deg, #090f1b, #162a50);
}
.DIV_LOG {
left: 0px;
bottom: 0px;
width: 100%;
height: 248px;
height: 164px;
position: absolute;
background-size: auto 50%;
background-position: center;
@ -120,7 +120,7 @@ img {
display: none;
transition: 0.1s;
position: absolute;
height: calc(100% - 298px);
height: calc(100% - 150px);
background-image: linear-gradient(0deg, #162a50, #2a4a86);
}
.DIV_GAME_OPTIONS {
@ -416,7 +416,7 @@ img {
font-family: monospace;
background-image: none;
background-color: #0000;
width: calc(100% - 668px);
width: calc(100% - 628px);
padding: 12px 0px 12px 6px;
}
.INPUT_gameListSearch:focus {
@ -424,17 +424,17 @@ img {
}
.APP_LOG {
color: #0f0;
height: 100%;
resize: none;
border: none;
cursor: text;
outline: none;
transition: 0.16s;
width: calc(100% - 4px);
height: calc(100% - 4px);
backdrop-filter: blur(1.4px);
background-repeat: no-repeat;
text-shadow: 2px 2px 2px #000;
background-image: linear-gradient(180deg, #000000db, #090f1b);
background-image: linear-gradient(180deg, #000e, #090f1b);
}
.BTN_RUN {
left: 8px;

View file

@ -61,13 +61,13 @@
<div class="DIV_settingsEntry DIV_settingsEntryFlex" id="DIV_settingsGridIconSize">
Grid Icon size:
<input type="range" min="116" max="512" step="0.01" value="116" id="RANGE_settingsGridIconSize" oninput="APP.design.renderSettings(!0);">
<input type="range" min="116" max="512" step="0.01" value="116" id="RANGE_settingsGridIconSize" onmouseup="APP.design.renderSettings(!0);" onkeyup="APP.design.renderSettings(!0);">
<label id="LABEL_settingsGridIconSize">???</label>%
</div>
<div class="DIV_settingsEntry DIV_settingsEntryFlex" id="DIV_settingsGridBorderRadius">
Grid Border-Radius:
<input type="range" min="0" max="26" step="1" value="8" id="RANGE_settingsGridIconBorderRadius" oninput="APP.design.renderSettings(!0);">
<input type="range" min="0" max="26" step="1" value="8" id="RANGE_settingsGridIconBorderRadius" onmouseup="APP.design.renderSettings(!0);" onkeyup="APP.design.renderSettings(!0);">
<label id="LABEL_settingsGridBorderRadius">???</label>%
</div>
@ -84,16 +84,23 @@
<div class="DIV_settingsEntry DIV_settingsEntryFlex">
Background Blur:
<input type="range" min="0" max="6" step="0.01" value="2" id="RANGE_settingsGameListBgBlur" oninput="APP.design.renderSettings(!0);">
<input type="range" min="0" max="6" step="0.01" value="2" id="RANGE_settingsGameListBgBlur" onmouseup="APP.design.renderSettings(!0);" onkeyup="APP.design.renderSettings(!0);">
<label id="LABEL_settingsGameListBgBlur">???</label>%
</div>
<div class="DIV_settingsEntry DIV_settingsEntryFlex">
Background Opacity:
<input type="range" min="0" max="1" step="0.01" value="0.6" id="RANGE_settingsGameListBgOpacity" oninput="APP.design.renderSettings(!0);">
<input type="range" min="0" max="1" step="0.01" value="0.6" id="RANGE_settingsGameListBgOpacity" onmouseup="APP.design.renderSettings(!0);" onkeyup="APP.design.renderSettings(!0);">
<label id="LABEL_settingsGameListBgOpacity">???</label>%
</div>
<div class="DIV_settingsEntry DIV_settingsEntryFlex">
<input type="checkbox" id="CHECKBOX_settingsGameSearchCaseSensitive">
<label class="LABEL_checkbox" onclick="APP.tools.processCheckbox('CHECKBOX_settingsGameSearchCaseSensitive');">
Enable case-sentitive search on game list
</label>
</div>
<div class="DIV_settingsEntry DIV_settingsEntryFlex" id="DIV_settingsShowBgOnGameEntry">
<input type="checkbox" id="CHECKBOX_settingsShowBgOnGameEntry">
<label class="LABEL_checkbox" onclick="APP.tools.processCheckbox('CHECKBOX_settingsShowBgOnGameEntry');">
@ -108,26 +115,19 @@
</label>
</div>
<div class="DIV_settingsEntry DIV_settingsEntryFlex">
<input type="checkbox" id="CHECKBOX_settingsGameSearchCaseSensitive">
<label class="LABEL_checkbox" onclick="APP.tools.processCheckbox('CHECKBOX_settingsGameSearchCaseSensitive');">
Enable case sentitive search on game
</label>
</div>
<!-- Emu running -->
<div class="SEPARATOR_00"></div>
<div class="DIV_settingsH2">Emu Running</div>
<div class="DIV_settingsEntry DIV_settingsEntryFlex">
Background Blur:
<input type="range" min="0" max="6" step="0.01" value="6" id="RANGE_settingsEmuRunningBgBlur" oninput="APP.design.renderSettings(!0);">
<input type="range" min="0" max="6" step="0.01" value="6" id="RANGE_settingsEmuRunningBgBlur" onmouseup="APP.design.renderSettings(!0);" onkeyup="APP.design.renderSettings(!0);">
<label id="LABEL_settingsEmuRunningBgBlur">???</label>%
</div>
<div class="DIV_settingsEntry DIV_settingsEntryFlex">
Background Opacity:
<input type="range" min="0" max="1" step="0.01" value="0.7" id="RANGE_settingsEmuRunningBgOpacity">
<input type="range" min="0" max="1" step="0.01" value="0.7" id="RANGE_settingsEmuRunningBgOpacity" onmouseup="APP.design.renderSettings(!0);" onkeyup="APP.design.renderSettings(!0);">
<label id="LABEL_settingsEmuRunningBgOpacity">???</label>%
</div>
@ -142,47 +142,19 @@
<div class="SEPARATOR_00"></div>
<div class="DIV_settingsH2">Log Options</div>
<div class="DIV_settingsEntry DIV_settingsEntryFlex" onclick="APP.design.renderSettings(!0);">
<input type="checkbox" id="CHECKBOX_settingsLogOnExternalWindow">
<label class="LABEL_checkbox" onclick="APP.tools.processCheckbox('CHECKBOX_settingsLogOnExternalWindow');" >
Log fpPS4 output on external window
</label>
</div>
<!-- Log on external window options -->
<div id="DIV_settingsExternalWindow">
<div class="SEPARATOR_00"></div>
<div class="DIV_settingsEntry">
Start console window:
<select id="SELECT_settingsStartExternalWindow" class="SELECT_settings" onchange="APP.design.updateLauncherSettingsGUI();">
<option value="normal">Normal</option>
<option value="max">Maximized</option>
<option value="min">Minimized</option>
</select>
</div>
<div class="DIV_settingsEntry DIV_settingsEntryFlex">
<input type="checkbox" id="CHECKBOX_settingsExternalWindowPrompt">
<label class="LABEL_checkbox" onclick="APP.tools.processCheckbox('CHECKBOX_settingsExternalWindowPrompt');">
Prompt user to press any key when fpPS4 closes
</label>
</div>
<div class="SEPARATOR_00"></div>
<div class="DIV_settingsEntry">
Start console window:
<select id="SELECT_settingsStartExternalWindow" class="SELECT_settings" onchange="APP.design.updateLauncherSettingsGUI();">
<option value="normal">Normal</option>
<option value="max">Maximized</option>
<option value="min">Minimized</option>
</select>
</div>
<div class="DIV_settingsEntry DIV_settingsEntryFlex">
<input type="checkbox" id="CHECKBOX_settingsClearLogOnEmuLoad">
<label class="LABEL_checkbox" onclick="APP.tools.processCheckbox('CHECKBOX_settingsClearLogOnEmuLoad');">
Clear log everytime main emu load
</label>
</div>
<div class="DIV_settingsEntry DIV_settingsEntryFlex">
<input type="checkbox" id="CHECKBOX_settingsSaveLogOnEmuClose">
<label class="LABEL_checkbox" onclick="APP.tools.processCheckbox('CHECKBOX_settingsSaveLogOnEmuClose');">
Save log file everytime main emu closes
<input type="checkbox" id="CHECKBOX_settingsExternalWindowPrompt">
<label class="LABEL_checkbox" onclick="APP.tools.processCheckbox('CHECKBOX_settingsExternalWindowPrompt');">
Prompt user to press any key when fpPS4 closes
</label>
</div>
@ -219,7 +191,7 @@
<input type="button" class="APP_btn BTN_STOP" id="BTN_KILL" onclick="APP.emuManager.killEmu();" disabled="disabled" value="Stop fpPS4">
<input type="button" class="APP_btn BTN_right" onclick="APP.about();" value="About">
<input type="button" class="APP_btn BTN_right" id="BTN_SAVE_LOG" onclick="APP.clearLog();" value="Clear / Save log">
<input type="button" class="APP_btn BTN_right" id="BTN_CLEAR_LOG" onclick="APP.clearLog();" value="Clear log">
<input type="button" class="APP_btn BTN_right" id="BTN_SETTINGS" onclick="APP.design.toggleSettings();" value="Settings">
<input type="button" class="APP_btn BTN_right" id="BTN_REFRESH" onclick="APP.gameList.load();" value="Refresh game list">

View file

@ -183,28 +183,30 @@ temp_DESIGN = {
if (APP.fs.existsSync(APP.settings.data.emuPath) === !0 && APP.gameList.selectedGame !== ''){
var btnRun = '',
btnLog = '',
btnRefresh = '',
btnSettings = '',
logHeight = '248px',
btnKill = 'disabled',
logDisplay = 'block',
emuRunPath = 'block',
bgBlur = APP.settings.data.bgListBlur,
bgOpacity = APP.settings.data.bgListOpacity,
optionsCss = {'height': 'calc(100% - 298px)', 'display': 'block'},
listCss = {'width': 'calc(100% - 280px)', 'height': 'calc(100% - 286px)'};
optionsCss = {'height': 'calc(100% - 214px)', 'display': 'block'},
listCss = {'width': 'calc(100% - 280px)', 'height': 'calc(100% - 202px)'};
// If emu is running
if (APP.emuManager.emuRunning === !0){
btnKill = '';
btnLog = 'disabled';
btnRun = 'disabled';
logDisplay = 'none';
btnRefresh = 'disabled';
btnSettings = 'disabled';
logHeight = 'calc(100% - 400px)';
bgBlur = APP.settings.data.bgEmuBlur;
bgOpacity = APP.settings.data.bgEmuOpacity;
listCss = {'width': '100%', 'height': '362px'};
optionsCss = {'height': '350px', 'display': 'none'};
listCss = {'width': '100%', 'height': 'calc(100% - 38px)'};
}
@ -216,13 +218,14 @@ temp_DESIGN = {
// Update GUI
TMS.css('DIV_LIST', listCss);
TMS.css('DIV_OPTIONS', optionsCss);
TMS.css('DIV_LOG', {'height': logHeight});
TMS.css('DIV_LOG', {'display': logDisplay});
TMS.css('DIV_GAME_DETAILS_currentExec', {'display': emuRunPath});
TMS.css('DIV_GAMELIST_BG', {'filter': 'blur(' + bgBlur + 'px) opacity(' + bgOpacity + ')'});
// Update Buttons
document.getElementById('BTN_RUN').disabled = btnRun;
document.getElementById('BTN_KILL').disabled = btnKill;
document.getElementById('BTN_CLEAR_LOG').disabled = btnLog;
document.getElementById('BTN_REFRESH').disabled = btnRefresh;
document.getElementById('BTN_SETTINGS').disabled = btnSettings;
document.getElementById('INPUT_gameListSearch').disabled = btnRun;
@ -249,13 +252,6 @@ temp_DESIGN = {
TMS.removeClass('DIV_LIST_INTERNAL', 'DIV_LIST_GRID');
}
// Disable Clear / Save log if clearLogOnEmuLoad, saveLogOnEmuClose or logOnExternalWindow are true
var disableClearSaveBtn = '';
if (APP.settings.data.clearLogOnEmuLoad === !0 || APP.settings.data.saveLogOnEmuClose === !0 || APP.settings.data.logOnExternalWindow === !0){
disableClearSaveBtn = 'disabled';
}
document.getElementById('BTN_SAVE_LOG').disabled = disableClearSaveBtn;
// If selected game exists, get it's name
if (APP.gameList.list[APP.gameList.selectedGame] !== void 0){
cGameName = APP.gameList.list[APP.gameList.selectedGame].name;
@ -399,9 +395,6 @@ temp_DESIGN = {
document.getElementById('CHECKBOX_settingsEnableParamSfo').checked = JSON.parse(cSettings.enableParamSfo);
document.getElementById('CHECKBOX_settingsShowExecRunning').checked = JSON.parse(cSettings.showPathRunning);
document.getElementById('CHECKBOX_settingsShowBgOnGameEntry').checked = JSON.parse(cSettings.showBgOnEntry);
document.getElementById('CHECKBOX_settingsSaveLogOnEmuClose').checked = JSON.parse(cSettings.saveLogOnEmuClose);
document.getElementById('CHECKBOX_settingsClearLogOnEmuLoad').checked = JSON.parse(cSettings.clearLogOnEmuLoad);
document.getElementById('CHECKBOX_settingsLogOnExternalWindow').checked = JSON.parse(cSettings.logOnExternalWindow);
document.getElementById('CHECKBOX_settingsGameSearchCaseSensitive').checked = JSON.parse(cSettings.searchCaseSensitive);
document.getElementById('CHECKBOX_settingsExternalWindowPrompt').checked = JSON.parse(cSettings.logExternalWindowPrompt);
@ -437,14 +430,6 @@ temp_DESIGN = {
}
// Log on external window
cDisplayMode = 'none';
var logOnExternalWindow = JSON.parse(document.getElementById('CHECKBOX_settingsLogOnExternalWindow').checked);
if (logOnExternalWindow === !0){
cDisplayMode = 'block';
}
TMS.css('DIV_settingsExternalWindow', {'display': cDisplayMode});
},
// Save user settings
@ -460,9 +445,6 @@ temp_DESIGN = {
APP.settings.data.enableParamSfo = JSON.parse(document.getElementById('CHECKBOX_settingsEnableParamSfo').checked);
APP.settings.data.showBgOnEntry = JSON.parse(document.getElementById('CHECKBOX_settingsShowBgOnGameEntry').checked);
APP.settings.data.showPathRunning = JSON.parse(document.getElementById('CHECKBOX_settingsShowExecRunning').checked);
APP.settings.data.saveLogOnEmuClose = JSON.parse(document.getElementById('CHECKBOX_settingsSaveLogOnEmuClose').checked);
APP.settings.data.clearLogOnEmuLoad = JSON.parse(document.getElementById('CHECKBOX_settingsClearLogOnEmuLoad').checked);
APP.settings.data.logOnExternalWindow = JSON.parse(document.getElementById('CHECKBOX_settingsLogOnExternalWindow').checked);
APP.settings.data.searchCaseSensitive = JSON.parse(document.getElementById('CHECKBOX_settingsGameSearchCaseSensitive').checked);
APP.settings.data.logExternalWindowPrompt = JSON.parse(document.getElementById('CHECKBOX_settingsExternalWindowPrompt').checked);

View file

@ -12,10 +12,6 @@ temp_EMUMANAGER = {
// Emulator is running
emuRunning: !1,
// Emu boot counter
emuCountdown: 0,
emuRunCounter: 0,
// Run emu
runGame: function(){
@ -34,10 +30,6 @@ temp_EMUMANAGER = {
APP.clearLog(!0);
}
// Increase emu counters
APP.emuManager.emuCountdown++;
APP.emuManager.emuRunCounter++;
// If (by some reason) main emu still running, close it!
this.killEmu(!0);
@ -55,10 +47,10 @@ temp_EMUMANAGER = {
});
// Log emu location and args
APP.log('\nINFO - Running fpPS4 with args: ' + emuArgs.toString().replace(RegExp(',', 'gi'), ' ') + '\nEmu location: ' + APP.settings.data.emuPath + '\n\n');
APP.log('\nINFO - Running fpPS4 with args: ' + emuArgs.toString().replace(RegExp(',', 'gi'), ' ') + '\nEmu location: ' + APP.settings.data.emuPath);
// Run fpPS4
APP.runExec(APP.settings.data.emuPath, emuArgs);
APP.runfpPS4(APP.settings.data.emuPath, emuArgs);
this.emuRunning = !0;
// Update main GUI
@ -79,7 +71,7 @@ temp_EMUMANAGER = {
},
// Stop fpPS4
killEmu: function(skipReset){
killEmu: function(){
// Kill process and set emu running var to false
APP.getProcessInfo('fpPS4.exe', function(pData){
@ -87,11 +79,6 @@ temp_EMUMANAGER = {
this.emuRunning = !1;
});
// Reset log
if (skipReset === void 0){
APP.resetLauncher();
}
}
}

View file

@ -89,7 +89,7 @@ temp_GAMELIST = {
}
// Fix space between launcher logs and main emu logs
APP.log(fLog + '\n ');
APP.log(fLog);
},

View file

@ -58,95 +58,24 @@ var APP = {
},
/*
Process spawn outpui
Process std output data (stdout and stderr) to proper log it
*/
processStdOutput: function(data){
const dataConverted = data.toString().split('\n');
dataConverted.forEach(function(logLine){
// If emu catches an "nop" error, update GUI
if (logLine.slice(0, 4).toLowerCase() === 'nop '){
// Update GUI
document.getElementById('LABEL_GAME_DETAILS_STATUS').innerHTML = 'Error ( <label class="user-can-select">' + text + '</label>)';
}
console.info(logLine);
});
},
// Reset launcher
resetLauncher: function(skipSave){
if (APP.emuManager.emuCountdown > 2){
// (Fix) Avoid log not being saved if launcher doesn't have any game selected
var cName = '';
if (APP.gameList.selectedGame !== ''){
cName = '_' + APP.gameList.list[APP.gameList.selectedGame].name.replace(RegExp(' ', 'gi'), '_');
}
// Get current date
var d = new Date(),
saveInfo = '',
cTime = '_' + d.toDateString().replace(RegExp(' ', 'gi'), '_') + '_' + d.getHours() + '_' + d.getMinutes() + '_' + d.getSeconds(),
logName = 'Log' + cName + cTime + '.log';
// Skip saving log
if (skipSave !== !0){
// Update log data
saveInfo = ' You can see all previous data on \"Logs/' + logName + '\"';
// Write log file
APP.fs.writeFileSync(APP.settings.data.nwPath + '/Logs/' + logName, APP.logData, 'utf-8');
}
// Append log info if APP.settings.data.saveLogOnEmuClose is true
if (APP.settings.data.saveLogOnEmuClose === !0){
saveInfo = saveInfo + '\n\nIMPORTANT - All previous log was cleared because \"Save log file everytime main emu closes\" is active.\nTo Prevent this, you can disable it on settings menu.';
}
// Reset log
APP.logData = APP.appVersion;
document.getElementById('APP_LOG').value = APP.appVersion;
APP.log('INFO - Previous log was cleared!' + saveInfo);
// Reset countdown
APP.emuManager.emuCountdown = 0;
/*
Reload launcher
I'm looking after some bugs related for fpPS4 Temmie's launcher not catching some logs...
I will keep the line below disabled... for now!
PS: A simple fix for now is enabling "Log fpPS4 output on external window" on settings menu!
*/
// chrome.runtime.reload();
}
},
// Clear Log
clearLog: function(skipSave){
clearLog: function(){
APP.emuManager.emuCountdown = 3;
this.resetLauncher(skipSave);
// Get current date
var saveInfo = '',
d = new Date(),
logName = 'Log_' + d.toDateString().replace(RegExp(' ', 'gi'), '_') + '_' + d.getHours() + '_' + d.getMinutes() + '_' + d.getSeconds() + '.log';
// Reset log
APP.logData = APP.appVersion;
document.getElementById('APP_LOG').value = APP.appVersion;
APP.log('INFO - Previous log was cleared!' + saveInfo);
},
// Run external software
execEmuPID: 0,
// Run fpPS4
execProcess: void 0,
runExec: function(exe, args){
runfpPS4: function(exe, args){
if (exe !== void 0 && exe !== ''){
@ -156,62 +85,44 @@ var APP = {
*/
process.chdir(APP.path.parse(exe).dir);
// Check if external log window option is enabled
if (APP.settings.data.logOnExternalWindow === !1){
APP.execProcess = APP.childProcess.spawn(exe, args, {
detached: !1
});
APP.execEmuPID = APP.execProcess.pid;
// Window state
var winMode;
switch (APP.settings.data.logExternalWindowStartMode){
} else {
case 'normal':
winMode = '';
break;
// Start window mode
var winMode;
switch (APP.settings.data.logExternalWindowStartMode){
case 'max':
winMode = '/MAX';
break;
case 'normal':
winMode = '';
break;
case 'max':
winMode = '/MAX';
break;
case 'min':
winMode = '/MIN';
break;
}
// Ask user to press any key
var pressAnyKey = '';
if (APP.settings.data.logExternalWindowPrompt === !0){
pressAnyKey = '^& pause';
}
// Transform args into string
var gPath = '"' + args[args.indexOf('-e') + 1] + '"',
parseArgs = args.toString().replace(RegExp(',', 'gi'), ' ').replace(args[args.indexOf('-e') + 1], gPath),
execLine = 'start "Running fpPS4 - ' + APP.gameList.selectedGame + '" ' + winMode + ' cmd /C fpPS4.exe ' + parseArgs + ' ' + pressAnyKey;
// Warn about fpPS4 logs
APP.log('IMPORTANT - Since fpPS4 logs are being displayed on a external window, Temmie\'s launcher aren\'t capable of saving it any information with exception of it\'s ' +
'exit code. If you want to keep all data, you can do it by disabling \"Log fpPS4 output on external window\" on Settings menu.\n ');
// Run
APP.execProcess = APP.childProcess.exec(execLine);
case 'min':
winMode = '/MIN';
break;
}
// Ask user to press any key
var pressAnyKey = '';
if (APP.settings.data.logExternalWindowPrompt === !0){
pressAnyKey = '^& pause';
}
// Transform args into string
var gPath = '"' + args[args.indexOf('-e') + 1] + '"',
parseArgs = args.toString().replace(RegExp(',', 'gi'), ' ').replace(args[args.indexOf('-e') + 1], gPath),
execLine = 'start "Running fpPS4 - ' + APP.gameList.selectedGame + '" ' + winMode + ' cmd /C fpPS4.exe ' + parseArgs + ' ' + pressAnyKey;
// Run
APP.execProcess = APP.childProcess.exec(execLine);
// Log on stdout and stderr
APP.execProcess.stdout.on('data', function(data){
//APP.processStdOutput(data);
APP.log(data.toString());
APP.processStdOutput(data);
});
APP.execProcess.stderr.on('data', function(data){
//APP.processStdOutput(data);
APP.log(data.toString());
APP.processStdOutput(data);
});
// Log on close
@ -235,12 +146,10 @@ var APP = {
APP.clearLog();
}
// Check if need to reset launcher
APP.resetLauncher();
// Scroll game list to last selected game
if (APP.gameList.selectedGame !== ''){
TMS.css('GAME_ENTRY_' + APP.gameList.selectedGame, {'animation': '0.8s hintGameFocus'});
TMS.focus('INPUT_gameListSearch', 100);
setTimeout(function(){
APP.design.selectGame(APP.gameList.selectedGame);

View file

@ -28,12 +28,7 @@ temp_SETTINGS = {
// Enable / Disable PARAM.SFO support
enableParamSfo: !0,
// Log Options
saveLogOnEmuClose: !1,
clearLogOnEmuLoad: !1,
// Log External window
logOnExternalWindow: !1,
logExternalWindowPrompt: !0,
logExternalWindowStartMode: 'normal',
@ -141,7 +136,6 @@ temp_SETTINGS = {
const mainPath = this.data.nwPath,
pathList = [
'/Emu',
'/Logs',
'/Games'
];

View file

@ -1,5 +1,5 @@
{
"version": "1.2.0",
"version": "1.2.1",
"license": "GPL-2",
"main": "App/index.htm",
"author": "TemmieHeartz",
@ -11,8 +11,8 @@
"width": 1186,
"height": 710,
"toolbar": true,
"min_width": 1186,
"min_height": 710,
"min_width": 834,
"min_height": 626,
"fullscreen": false,
"position": "center",
"theme-color": "#000",