More error checking. Increased stability in safari

This commit is contained in:
Thomas Lovén 2022-08-04 11:33:43 +00:00
parent 8da698ab82
commit e2bdad02f4
7 changed files with 47 additions and 15 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -5,7 +5,7 @@
"dependencies": ["panel_custom", "websocket_api", "http", "frontend", "lovelace"], "dependencies": ["panel_custom", "websocket_api", "http", "frontend", "lovelace"],
"codeowners": [], "codeowners": [],
"requirements": [], "requirements": [],
"version": "2.0.0b3", "version": "2.0.0b4",
"iot_class": "local_push", "iot_class": "local_push",
"config_flow": true "config_flow": true
} }

View File

@ -93,6 +93,14 @@ class BrowserModRegisteredBrowsersCard extends LitElement {
@change=${this.toggleCameraEnabled} @change=${this.toggleCameraEnabled}
></ha-switch> ></ha-switch>
</ha-settings-row> </ha-settings-row>
${window.browser_mod?.cameraError
? html`
<ha-alert alert-type="error">
Setting up the device camera failed. Make sure you have
allowed use of the camera in your browser.
</ha-alert>
`
: ""}
${this._renderInteractionAlert()} ${this._renderInteractionAlert()}
${this._renderFKBSettingsInfo()} ${this._renderFKBSettingsInfo()}
` `

View File

@ -3,6 +3,7 @@ export const CameraMixin = (SuperClass) => {
private _video; private _video;
private _canvas; private _canvas;
private _framerate; private _framerate;
public cameraError;
// TODO: Enable WebRTC? // TODO: Enable WebRTC?
// https://levelup.gitconnected.com/establishing-the-webrtc-connection-videochat-with-javascript-step-3-48d4ae0e9ea4 // https://levelup.gitconnected.com/establishing-the-webrtc-connection-videochat-with-javascript-step-3-48d4ae0e9ea4
@ -10,6 +11,7 @@ export const CameraMixin = (SuperClass) => {
constructor() { constructor() {
super(); super();
this._framerate = 2; this._framerate = 2;
this.cameraError = false;
this._setup_camera(); this._setup_camera();
} }
@ -45,6 +47,7 @@ export const CameraMixin = (SuperClass) => {
if (!navigator.mediaDevices) return; if (!navigator.mediaDevices) return;
try {
const stream = await navigator.mediaDevices.getUserMedia({ const stream = await navigator.mediaDevices.getUserMedia({
video: true, video: true,
audio: false, audio: false,
@ -53,6 +56,13 @@ export const CameraMixin = (SuperClass) => {
video.srcObject = stream; video.srcObject = stream;
video.play(); video.play();
this.update_camera(); this.update_camera();
} catch (e) {
if (e.name !== "NotAllowedError") throw e;
else {
this.cameraError = true;
this.fireEvent("browser-mod-config-update");
}
}
} }
async update_camera() { async update_camera() {

View File

@ -57,14 +57,22 @@ export const RequireInteractMixin = (SuperClass) => {
vPlay vPlay
.then(() => { .then(() => {
this._interactionResolve(); this._interactionResolve();
video.pause();
}) })
.catch((e) => { .catch((e) => {
if (e.name === "AbortError") this._interactionResolve(); if (e.name === "AbortError") {
this._interactionResolve();
}
}); });
video.pause();
} }
window.addEventListener("pointerdown", this._interactionResolve); window.addEventListener(
"pointerdown",
() => {
this._interactionResolve();
},
{ once: true }
);
// if (this.fully) this._interactionResolve(); // if (this.fully) this._interactionResolve();

View File

@ -1,7 +1,7 @@
{ {
"name": "browser_mod", "name": "browser_mod",
"private": true, "private": true,
"version": "2.0.0b3", "version": "2.0.0b4",
"description": "", "description": "",
"scripts": { "scripts": {
"build": "rollup -c", "build": "rollup -c",