From 684fe7142df1bfe9dd7096811aabd3a2f6e9e861 Mon Sep 17 00:00:00 2001 From: schlagmichdoch Date: Thu, 12 Oct 2023 03:39:37 +0200 Subject: [PATCH] Make "Connecting..." toast persistent until connection is established --- public/scripts/network.js | 14 +++++++++----- public/scripts/ui.js | 7 +++++-- public_included_ws_fallback/scripts/network.js | 14 +++++++++----- public_included_ws_fallback/scripts/ui.js | 7 +++++-- 4 files changed, 28 insertions(+), 14 deletions(-) diff --git a/public/scripts/network.js b/public/scripts/network.js index 9d2a69e..4ca3aa6 100644 --- a/public/scripts/network.js +++ b/public/scripts/network.js @@ -38,6 +38,12 @@ class ServerConnection { _connect() { clearTimeout(this._reconnectTimer); if (this._isConnected() || this._isConnecting()) return; + if (this._isReconnect) { + Events.fire('notify-user', { + message: Localization.getTranslation("notifications.connecting"), + persistent: true + }); + } const ws = new WebSocket(this._endpoint()); ws.binaryType = 'arraybuffer'; ws.onopen = _ => this._onOpen(); @@ -221,12 +227,10 @@ class ServerConnection { _onDisconnect() { console.log('WS: server disconnected'); setTimeout(() => { - Events.fire('notify-user', Localization.getTranslation("notifications.connecting")); + this._isReconnect = true; + Events.fire('ws-disconnected'); + this._reconnectTimer = setTimeout(_ => this._connect(), 1000); }, 100); //delay for 100ms to prevent flickering on page reload - clearTimeout(this._reconnectTimer); - this._reconnectTimer = setTimeout(_ => this._connect(), 1000); - Events.fire('ws-disconnected'); - this._isReconnect = true; } _onVisibilityChange() { diff --git a/public/scripts/ui.js b/public/scripts/ui.js index f8bdf38..7af619a 100644 --- a/public/scripts/ui.js +++ b/public/scripts/ui.js @@ -2044,9 +2044,12 @@ class Toast extends Dialog { _onNotify(message) { if (this.hideTimeout) clearTimeout(this.hideTimeout); - this.$el.innerText = message; + this.$el.innerText = typeof message === "object" ? message.message : message; this.show(); - this.hideTimeout = setTimeout(_ => this.hide(), 5000); + + if (typeof message === "object" && message.persistent) return; + + this.hideTimeout = setTimeout(() => this.hide(), 5000); } } diff --git a/public_included_ws_fallback/scripts/network.js b/public_included_ws_fallback/scripts/network.js index 3329d37..9771f44 100644 --- a/public_included_ws_fallback/scripts/network.js +++ b/public_included_ws_fallback/scripts/network.js @@ -36,6 +36,12 @@ class ServerConnection { _connect() { clearTimeout(this._reconnectTimer); if (this._isConnected() || this._isConnecting()) return; + if (this._isReconnect) { + Events.fire('notify-user', { + message: Localization.getTranslation("notifications.connecting"), + persistent: true + }); + } const ws = new WebSocket(this._endpoint()); ws.binaryType = 'arraybuffer'; ws.onopen = _ => this._onOpen(); @@ -232,12 +238,10 @@ class ServerConnection { _onDisconnect() { console.log('WS: server disconnected'); setTimeout(() => { - Events.fire('notify-user', Localization.getTranslation("notifications.connecting")); + this._isReconnect = true; + Events.fire('ws-disconnected'); + this._reconnectTimer = setTimeout(_ => this._connect(), 1000); }, 100); //delay for 100ms to prevent flickering on page reload - clearTimeout(this._reconnectTimer); - this._reconnectTimer = setTimeout(_ => this._connect(), 1000); - Events.fire('ws-disconnected'); - this._isReconnect = true; } _onVisibilityChange() { diff --git a/public_included_ws_fallback/scripts/ui.js b/public_included_ws_fallback/scripts/ui.js index db2facc..6e1c6f9 100644 --- a/public_included_ws_fallback/scripts/ui.js +++ b/public_included_ws_fallback/scripts/ui.js @@ -2046,9 +2046,12 @@ class Toast extends Dialog { _onNotify(message) { if (this.hideTimeout) clearTimeout(this.hideTimeout); - this.$el.innerText = message; + this.$el.innerText = typeof message === "object" ? message.message : message; this.show(); - this.hideTimeout = setTimeout(_ => this.hide(), 5000); + + if (typeof message === "object" && message.persistent) return; + + this.hideTimeout = setTimeout(() => this.hide(), 5000); } }