diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..aef84430 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "liveServer.settings.port": 5501 +} \ No newline at end of file diff --git a/app/ui.js b/app/ui.js index 51e57bd3..12bc9472 100644 --- a/app/ui.js +++ b/app/ui.js @@ -45,6 +45,7 @@ const UI = { inhibitReconnect: true, reconnectCallback: null, reconnectPassword: null, + firstReconnectTime: 0, async start(options={}) { UI.customSettings = options.settings || {}; @@ -961,6 +962,9 @@ const UI = { UI.closePowerPanel(); } }, + resetFirstReconnection(){ + UI.firstReconnectTime = 0; + }, /* ------^------- * /POWER @@ -1120,6 +1124,22 @@ const UI = { reconnect() { UI.reconnectCallback = null; + const maxTime = UI.getSetting('reconnect_max_time') ?? 600000; // 20s - 20 * 1000 ms + + // Initialize first reconnect time if it's the first attempt + if (UI.firstReconnectTime === null) { + UI.firstReconnectTime = Date.now(); + } + const elapsedTime = Date.now() - UI.firstReconnectTime; + + // Check if we've exceeded the max reconnect time + if ((Date.now() - UI.firstReconnectTime) >= maxTime) { + // hiding the previous status message + UI.hideStatus(); + UI.showStatus(_("Maximum reconnect attempts reached. Failed to connect to the server."), 'error', 1000*60*240); // Show for 4 hours + UI.updateVisualState('disconnected'); + return; + } // if reconnect has been disabled in the meantime, do nothing. if (UI.inhibitReconnect) { @@ -1153,7 +1173,8 @@ const UI = { } UI.showStatus(msg); UI.updateVisualState('connected'); - + // Here we can reset the retry count + UI.resetFirstReconnection(); // Do this last because it can only be used on rendered elements UI.rfb.focus(); }, diff --git a/defaults.json b/defaults.json index 0967ef42..de262442 100644 --- a/defaults.json +++ b/defaults.json @@ -1 +1,3 @@ -{} +{ + "reconnect_max_time": 600000 +}