More error checking. Increased stability in safari
This commit is contained in:
		
							parent
							
								
									8da698ab82
								
							
						
					
					
						commit
						e2bdad02f4
					
				
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@ -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
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -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()}
 | 
				
			||||||
              `
 | 
					              `
 | 
				
			||||||
 | 
				
			|||||||
@ -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() {
 | 
				
			||||||
 | 
				
			|||||||
@ -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();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -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",
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user