From e963735dbabdc2fea8a95aea325952560c727625 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Mon, 23 Aug 2021 07:40:37 +0200 Subject: [PATCH] Cleanup mjpeg stream when disconnected (+ bump Lit) (#9868) --- package.json | 8 ++++-- src/components/ha-camera-stream.ts | 45 ++++++++++++++++++++---------- yarn.lock | 38 ++++++++++++------------- 3 files changed, 54 insertions(+), 37 deletions(-) diff --git a/package.json b/package.json index 8ca730506d..c13880a872 100644 --- a/package.json +++ b/package.json @@ -113,7 +113,7 @@ "js-yaml": "^4.1.0", "leaflet": "^1.7.1", "leaflet-draw": "^1.0.4", - "lit": "^2.0.0-rc.2", + "lit": "^2.0.0-rc.3", "lit-vaadin-helpers": "^0.1.3", "marked": "^2.0.5", "mdn-polyfills": "^5.16.0", @@ -233,8 +233,10 @@ "resolutions": { "@polymer/polymer": "patch:@polymer/polymer@3.4.1#./.yarn/patches/@polymer/polymer/pr-5569.patch", "@webcomponents/webcomponentsjs": "^2.2.10", - "lit-html": "2.0.0-rc.3", - "lit-element": "3.0.0-rc.2" + "lit": "^2.0.0-rc.3", + "lit-html": "2.0.0-rc.4", + "lit-element": "3.0.0-rc.3", + "@lit/reactive-element": "1.0.0-rc.3" }, "main": "src/home-assistant.js", "husky": { diff --git a/src/components/ha-camera-stream.ts b/src/components/ha-camera-stream.ts index 9d91e81ffd..57b4649a53 100644 --- a/src/components/ha-camera-stream.ts +++ b/src/components/ha-camera-stream.ts @@ -8,7 +8,6 @@ import { } from "lit"; import { customElement, property, state } from "lit/decorators"; import { isComponentLoaded } from "../common/config/is_component_loaded"; -import { fireEvent } from "../common/dom/fire_event"; import { computeStateName } from "../common/entity/compute_state_name"; import { supportsFeature } from "../common/entity/supports-feature"; import { @@ -41,6 +40,32 @@ class HaCameraStream extends LitElement { @state() private _url?: string; + @state() private _connected = false; + + public willUpdate(changedProps: PropertyValues): void { + if ( + changedProps.has("stateObj") && + !this._shouldRenderMJPEG && + this.stateObj && + (changedProps.get("stateObj") as CameraEntity | undefined)?.entity_id !== + this.stateObj.entity_id + ) { + this._forceMJPEG = undefined; + this._url = undefined; + this._getStreamUrl(); + } + } + + public connectedCallback() { + super.connectedCallback(); + this._connected = true; + } + + public disconnectedCallback() { + super.disconnectedCallback(); + this._connected = false; + } + protected render(): TemplateResult { if (!this.stateObj) { return html``; @@ -50,10 +75,11 @@ class HaCameraStream extends LitElement { ${__DEMO__ || this._shouldRenderMJPEG ? html`