mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-31 13:07:49 +00:00
Close websocket connection after being hidden for 5 minutes (#6149)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
This commit is contained in:
parent
6d6eef4e97
commit
6f5e3c2711
@ -87,7 +87,7 @@
|
|||||||
"fuse.js": "^6.0.0",
|
"fuse.js": "^6.0.0",
|
||||||
"google-timezones-json": "^1.0.2",
|
"google-timezones-json": "^1.0.2",
|
||||||
"hls.js": "^0.12.4",
|
"hls.js": "^0.12.4",
|
||||||
"home-assistant-js-websocket": "^5.2.1",
|
"home-assistant-js-websocket": "^5.3.0",
|
||||||
"idb-keyval": "^3.2.0",
|
"idb-keyval": "^3.2.0",
|
||||||
"intl-messageformat": "^8.3.9",
|
"intl-messageformat": "^8.3.9",
|
||||||
"js-yaml": "^3.13.1",
|
"js-yaml": "^3.13.1",
|
||||||
|
@ -12,6 +12,7 @@ import SidebarMixin from "./sidebar-mixin";
|
|||||||
import ThemesMixin from "./themes-mixin";
|
import ThemesMixin from "./themes-mixin";
|
||||||
import TranslationsMixin from "./translations-mixin";
|
import TranslationsMixin from "./translations-mixin";
|
||||||
import { urlSyncMixin } from "./url-sync-mixin";
|
import { urlSyncMixin } from "./url-sync-mixin";
|
||||||
|
import { suspendMixin } from "./suspend-mixin";
|
||||||
|
|
||||||
const ext = <T extends Constructor>(baseClass: T, mixins): T =>
|
const ext = <T extends Constructor>(baseClass: T, mixins): T =>
|
||||||
mixins.reduceRight((base, mixin) => mixin(base), baseClass);
|
mixins.reduceRight((base, mixin) => mixin(base), baseClass);
|
||||||
@ -24,6 +25,7 @@ export class HassElement extends ext(HassBaseEl, [
|
|||||||
SidebarMixin,
|
SidebarMixin,
|
||||||
DisconnectToastMixin,
|
DisconnectToastMixin,
|
||||||
connectionMixin,
|
connectionMixin,
|
||||||
|
suspendMixin,
|
||||||
NotificationMixin,
|
NotificationMixin,
|
||||||
dialogManagerMixin,
|
dialogManagerMixin,
|
||||||
urlSyncMixin,
|
urlSyncMixin,
|
||||||
|
48
src/state/suspend-mixin.ts
Normal file
48
src/state/suspend-mixin.ts
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
import { Constructor } from "../types";
|
||||||
|
import { HassBaseEl } from "./hass-base-mixin";
|
||||||
|
|
||||||
|
export const suspendMixin = <T extends Constructor<HassBaseEl>>(
|
||||||
|
superClass: T
|
||||||
|
) =>
|
||||||
|
class extends superClass {
|
||||||
|
private __hiddenTimeout?: number;
|
||||||
|
|
||||||
|
private __visiblePromiseResolve?: () => void;
|
||||||
|
|
||||||
|
protected hassConnected() {
|
||||||
|
super.hassConnected();
|
||||||
|
|
||||||
|
document.addEventListener(
|
||||||
|
"visibilitychange",
|
||||||
|
() => this.__handleVisibilityChange(),
|
||||||
|
false
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private __handleVisibilityChange() {
|
||||||
|
if (document.hidden) {
|
||||||
|
// If the document is hidden, we will prevent reconnects until we are visible again
|
||||||
|
this.hass!.connection.suspendReconnectUntil(
|
||||||
|
new Promise((resolve) => {
|
||||||
|
this.__visiblePromiseResolve = resolve;
|
||||||
|
})
|
||||||
|
);
|
||||||
|
// We close the connection to Home Assistant after being hidden for 5 minutes
|
||||||
|
this.__hiddenTimeout = window.setTimeout(() => {
|
||||||
|
this.__hiddenTimeout = undefined;
|
||||||
|
this.hass!.connection.suspend();
|
||||||
|
}, 300000);
|
||||||
|
} else {
|
||||||
|
// Clear timer to close the connection
|
||||||
|
if (this.__hiddenTimeout) {
|
||||||
|
clearTimeout(this.__hiddenTimeout);
|
||||||
|
this.__hiddenTimeout = undefined;
|
||||||
|
}
|
||||||
|
// Unsuspend the reconnect
|
||||||
|
if (this.__visiblePromiseResolve) {
|
||||||
|
this.__visiblePromiseResolve();
|
||||||
|
this.__visiblePromiseResolve = undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
@ -6613,10 +6613,10 @@ hmac-drbg@^1.0.0:
|
|||||||
minimalistic-assert "^1.0.0"
|
minimalistic-assert "^1.0.0"
|
||||||
minimalistic-crypto-utils "^1.0.1"
|
minimalistic-crypto-utils "^1.0.1"
|
||||||
|
|
||||||
home-assistant-js-websocket@^5.2.1:
|
home-assistant-js-websocket@^5.3.0:
|
||||||
version "5.2.1"
|
version "5.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/home-assistant-js-websocket/-/home-assistant-js-websocket-5.2.1.tgz#88c06738416e041dfd805f2543722458d9c3a391"
|
resolved "https://registry.yarnpkg.com/home-assistant-js-websocket/-/home-assistant-js-websocket-5.3.0.tgz#261d371c72746ec8b0eb8768b286d4f865e408b7"
|
||||||
integrity sha512-azPiR+KABxaow1sMS70+Jk12KOaKSJY9KSKSGljkAArJmbWum3PEMNXXaG+XJnYmNuDnyzLAwi3/e1cwvVqocA==
|
integrity sha512-treEjeKpHB7JNrLddOf4FJudcm7hf9y23bNv/9GKiOvmmWIbblKt7UN+2V0WjPmBkSRvLmGprA/xxh5cgS8S1g==
|
||||||
|
|
||||||
homedir-polyfill@^1.0.1:
|
homedir-polyfill@^1.0.1:
|
||||||
version "1.0.3"
|
version "1.0.3"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user