diff --git a/app/ui.js b/app/ui.js index bbdea60d3..5b9345884 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 @@ -1121,6 +1125,23 @@ const UI = { reconnect() { UI.reconnectCallback = null; + const maxTime = UI.getSetting('reconnect_max_time') ?? 600000; // default to 10 minutes => 10 * 60 * 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(); + // Showing this message for long time, because if the connection is unstable and user is not around to see the message when the connection is lost, they will be able to see it when they will come back. (Showing for 3 hours) + UI.showStatus(_("Maximum reconnect attempts reached. Failed to connect to the server."), 'error', 180*60*1000); + UI.updateVisualState('disconnected'); + return; + } // if reconnect has been disabled in the meantime, do nothing. if (UI.inhibitReconnect) { @@ -1154,6 +1175,8 @@ const UI = { } UI.showStatus(msg); UI.updateVisualState('connected'); + // Here we can reset the retry count + UI.resetFirstReconnection(); UI.updateBeforeUnload(); diff --git a/defaults.json b/defaults.json index 0967ef424..de2624428 100644 --- a/defaults.json +++ b/defaults.json @@ -1 +1,3 @@ -{} +{ + "reconnect_max_time": 600000 +}