Make work with Cast
This commit is contained in:
		
							parent
							
								
									02c8f91690
								
							
						
					
					
						commit
						1cb64a2c8d
					
				@ -338,8 +338,7 @@ const ConnectionMixin = (SuperClass) => {
 | 
				
			|||||||
            this.browserEntities = {};
 | 
					            this.browserEntities = {};
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        LOG(...args) {
 | 
					        LOG(...args) {
 | 
				
			||||||
            const dt = new Date();
 | 
					            return;
 | 
				
			||||||
            console.log(`${dt.toLocaleTimeString()}`, ...args);
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        fireEvent(event, detail = undefined) {
 | 
					        fireEvent(event, detail = undefined) {
 | 
				
			||||||
            this.dispatchEvent(new CustomEvent(event, { detail }));
 | 
					            this.dispatchEvent(new CustomEvent(event, { detail }));
 | 
				
			||||||
@ -1964,6 +1963,8 @@ const BrowserIDMixin = (SuperClass) => {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        get browserID() {
 | 
					        get browserID() {
 | 
				
			||||||
 | 
					            if (document.querySelector("hc-main"))
 | 
				
			||||||
 | 
					                return "CAST";
 | 
				
			||||||
            if (localStorage[ID_STORAGE_KEY])
 | 
					            if (localStorage[ID_STORAGE_KEY])
 | 
				
			||||||
                return localStorage[ID_STORAGE_KEY];
 | 
					                return localStorage[ID_STORAGE_KEY];
 | 
				
			||||||
            this.browserID = "";
 | 
					            this.browserID = "";
 | 
				
			||||||
@ -2032,12 +2033,12 @@ const BrowserIDMixin = (SuperClass) => {
 | 
				
			|||||||
    x Title templates
 | 
					    x Title templates
 | 
				
			||||||
  - Tweaks
 | 
					  - Tweaks
 | 
				
			||||||
    - Quickbar tweaks (ctrl+enter)?
 | 
					    - Quickbar tweaks (ctrl+enter)?
 | 
				
			||||||
    - Card-mod preload
 | 
					    x Card-mod preload
 | 
				
			||||||
  - Video player?
 | 
					  - Video player?
 | 
				
			||||||
  - Media_seek
 | 
					  - Media_seek
 | 
				
			||||||
  - Screensavers
 | 
					  - Screensavers
 | 
				
			||||||
  - IMPORTANT: FIX DEFAULT HIDING OF ENTITIES
 | 
					  - IMPORTANT: FIX DEFAULT HIDING OF ENTITIES
 | 
				
			||||||
  - Check functionality with CAST - may need to add frontend part as a lovelace resource
 | 
					  X Check functionality with CAST - may need to add frontend part as a lovelace resource
 | 
				
			||||||
  */
 | 
					  */
 | 
				
			||||||
class BrowserMod extends ServicesMixin(PopupMixin(ActivityMixin(BrowserStateMixin(CameraMixin(MediaPlayerMixin(ScreenSaverMixin(AutoSettingsMixin(FullyMixin(RequireInteractMixin(ConnectionMixin(BrowserIDMixin(EventTarget)))))))))))) {
 | 
					class BrowserMod extends ServicesMixin(PopupMixin(ActivityMixin(BrowserStateMixin(CameraMixin(MediaPlayerMixin(ScreenSaverMixin(AutoSettingsMixin(FullyMixin(RequireInteractMixin(ConnectionMixin(BrowserIDMixin(EventTarget)))))))))))) {
 | 
				
			||||||
    constructor() {
 | 
					    constructor() {
 | 
				
			||||||
 | 
				
			|||||||
@ -365,12 +365,18 @@ class BrowserModRegisteredBrowsersCard extends s {
 | 
				
			|||||||
                });
 | 
					                });
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
        window.browser_mod.showPopup("Unregister browser", `Are you sure you want to unregister browser ${browserID}?`, {
 | 
					        window.browser_mod.showPopup("Unregister browser", `Are you sure you want to unregister Browser ${browserID}?`, {
 | 
				
			||||||
            right_button: "Yes",
 | 
					            right_button: "Yes",
 | 
				
			||||||
            right_button_action: unregisterCallback,
 | 
					            right_button_action: unregisterCallback,
 | 
				
			||||||
            left_button: "No",
 | 
					            left_button: "No",
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    register_cast() {
 | 
				
			||||||
 | 
					        window.browser_mod.connection.sendMessage({
 | 
				
			||||||
 | 
					            type: "browser_mod/register",
 | 
				
			||||||
 | 
					            browserID: "CAST",
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    render() {
 | 
					    render() {
 | 
				
			||||||
        return $ `
 | 
					        return $ `
 | 
				
			||||||
      <ha-card header="Registered Browsers" outlined>
 | 
					      <ha-card header="Registered Browsers" outlined>
 | 
				
			||||||
@ -389,6 +395,15 @@ class BrowserModRegisteredBrowsersCard extends s {
 | 
				
			|||||||
              </ha-icon-button>
 | 
					              </ha-icon-button>
 | 
				
			||||||
            </ha-settings-row>`)}
 | 
					            </ha-settings-row>`)}
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
 | 
					        ${window.browser_mod.browsers["CAST"] === undefined
 | 
				
			||||||
 | 
					            ? $ `
 | 
				
			||||||
 | 
					              <div class="card-actions">
 | 
				
			||||||
 | 
					                <mwc-button @click=${this.register_cast}>
 | 
				
			||||||
 | 
					                  Register CAST Browser
 | 
				
			||||||
 | 
					                </mwc-button>
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
 | 
					            `
 | 
				
			||||||
 | 
					            : ""}
 | 
				
			||||||
      </ha-card>
 | 
					      </ha-card>
 | 
				
			||||||
    `;
 | 
					    `;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,7 @@
 | 
				
			|||||||
  "domain": "browser_mod",
 | 
					  "domain": "browser_mod",
 | 
				
			||||||
  "name": "Browser mod",
 | 
					  "name": "Browser mod",
 | 
				
			||||||
  "documentation": "https://github.com/thomasloven/hass-browser_mod/blob/master/README.md",
 | 
					  "documentation": "https://github.com/thomasloven/hass-browser_mod/blob/master/README.md",
 | 
				
			||||||
  "dependencies": ["panel_custom", "websocket_api", "http", "frontend"],
 | 
					  "dependencies": ["panel_custom", "websocket_api", "http", "frontend", "lovelace"],
 | 
				
			||||||
  "codeowners": [],
 | 
					  "codeowners": [],
 | 
				
			||||||
  "requirements": [],
 | 
					  "requirements": [],
 | 
				
			||||||
  "version": "2.0b0",
 | 
					  "version": "2.0b0",
 | 
				
			||||||
 | 
				
			|||||||
@ -2,6 +2,10 @@ from homeassistant.components.frontend import add_extra_js_url
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
from .const import FRONTEND_SCRIPT_URL, SETTINGS_PANEL_URL
 | 
					from .const import FRONTEND_SCRIPT_URL, SETTINGS_PANEL_URL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import logging
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					_LOGGER = logging.getLogger(__name__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
async def async_setup_view(hass):
 | 
					async def async_setup_view(hass):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -28,3 +32,25 @@ async def async_setup_view(hass):
 | 
				
			|||||||
        SETTINGS_PANEL_URL,
 | 
					        SETTINGS_PANEL_URL,
 | 
				
			||||||
        hass.config.path("custom_components/browser_mod/browser_mod_panel.js"),
 | 
					        hass.config.path("custom_components/browser_mod/browser_mod_panel.js"),
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Also load Browser Mod as a lovelace resource so it's accessible to Cast
 | 
				
			||||||
 | 
					    resources = hass.data["lovelace"]["resources"]
 | 
				
			||||||
 | 
					    if resources:
 | 
				
			||||||
 | 
					        if not resources.loaded:
 | 
				
			||||||
 | 
					            await resources.async_load()
 | 
				
			||||||
 | 
					            resources.loaded = True
 | 
				
			||||||
 | 
					        frontend_added = False
 | 
				
			||||||
 | 
					        for r in resources.async_items():
 | 
				
			||||||
 | 
					            if r["url"].startswith(FRONTEND_SCRIPT_URL):
 | 
				
			||||||
 | 
					                frontend_added = True
 | 
				
			||||||
 | 
					                continue
 | 
				
			||||||
 | 
					            # While going through the resources, also preload card-mod if it is found
 | 
				
			||||||
 | 
					            if "card-mod.js" in r["url"]:
 | 
				
			||||||
 | 
					                add_extra_js_url(hass, r["url"])
 | 
				
			||||||
 | 
					        if not frontend_added:
 | 
				
			||||||
 | 
					            await resources.async_create_item(
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    "res_type": "module",
 | 
				
			||||||
 | 
					                    "url": FRONTEND_SCRIPT_URL + "?automatically-added",
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 | 
				
			|||||||
@ -10,7 +10,7 @@ _LOGGER = logging.getLogger(__name__)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@attr.s
 | 
					@attr.s
 | 
				
			||||||
class Settings:
 | 
					class SettingsStoreData:
 | 
				
			||||||
    hideSidebar = attr.ib(type=bool, default=None)
 | 
					    hideSidebar = attr.ib(type=bool, default=None)
 | 
				
			||||||
    hideHeader = attr.ib(type=bool, default=None)
 | 
					    hideHeader = attr.ib(type=bool, default=None)
 | 
				
			||||||
    defaultPanel = attr.ib(type=str, default=None)
 | 
					    defaultPanel = attr.ib(type=str, default=None)
 | 
				
			||||||
@ -32,12 +32,12 @@ class BrowserStoreData:
 | 
				
			|||||||
    last_seen = attr.ib(type=int, default=0)
 | 
					    last_seen = attr.ib(type=int, default=0)
 | 
				
			||||||
    enabled = attr.ib(type=bool, default=False)
 | 
					    enabled = attr.ib(type=bool, default=False)
 | 
				
			||||||
    camera = attr.ib(type=bool, default=False)
 | 
					    camera = attr.ib(type=bool, default=False)
 | 
				
			||||||
    settings = attr.ib(type=Settings, factory=Settings)
 | 
					    settings = attr.ib(type=SettingsStoreData, factory=SettingsStoreData)
 | 
				
			||||||
    meta = attr.ib(type=str, default="default")
 | 
					    meta = attr.ib(type=str, default="default")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @classmethod
 | 
					    @classmethod
 | 
				
			||||||
    def from_dict(cls, data):
 | 
					    def from_dict(cls, data):
 | 
				
			||||||
        settings = Settings.from_dict(data.get("settings", {}))
 | 
					        settings = SettingsStoreData.from_dict(data.get("settings", {}))
 | 
				
			||||||
        return cls(
 | 
					        return cls(
 | 
				
			||||||
            **(
 | 
					            **(
 | 
				
			||||||
                data
 | 
					                data
 | 
				
			||||||
@ -55,8 +55,8 @@ class BrowserStoreData:
 | 
				
			|||||||
class ConfigStoreData:
 | 
					class ConfigStoreData:
 | 
				
			||||||
    browsers = attr.ib(type=dict[str:BrowserStoreData], factory=dict)
 | 
					    browsers = attr.ib(type=dict[str:BrowserStoreData], factory=dict)
 | 
				
			||||||
    version = attr.ib(type=str, default="2.0")
 | 
					    version = attr.ib(type=str, default="2.0")
 | 
				
			||||||
    settings = attr.ib(type=Settings, factory=Settings)
 | 
					    settings = attr.ib(type=SettingsStoreData, factory=SettingsStoreData)
 | 
				
			||||||
    user_settings = attr.ib(type=dict[str:Settings], factory=dict)
 | 
					    user_settings = attr.ib(type=dict[str:SettingsStoreData], factory=dict)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @classmethod
 | 
					    @classmethod
 | 
				
			||||||
    def from_dict(cls, data={}):
 | 
					    def from_dict(cls, data={}):
 | 
				
			||||||
@ -65,9 +65,10 @@ class ConfigStoreData:
 | 
				
			|||||||
            for k, v in data.get("browsers", {}).items()
 | 
					            for k, v in data.get("browsers", {}).items()
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        user_settings = {
 | 
					        user_settings = {
 | 
				
			||||||
            k: Settings.from_dict(v) for k, v in data.get("user_settings", {}).items()
 | 
					            k: SettingsStoreData.from_dict(v)
 | 
				
			||||||
 | 
					            for k, v in data.get("user_settings", {}).items()
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        settings = Settings.from_dict(data.get("settings", {}))
 | 
					        settings = SettingsStoreData.from_dict(data.get("settings", {}))
 | 
				
			||||||
        return cls(
 | 
					        return cls(
 | 
				
			||||||
            **(
 | 
					            **(
 | 
				
			||||||
                data
 | 
					                data
 | 
				
			||||||
@ -135,10 +136,10 @@ class BrowserModStore:
 | 
				
			|||||||
        await self.updated()
 | 
					        await self.updated()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_user_settings(self, name):
 | 
					    def get_user_settings(self, name):
 | 
				
			||||||
        return self.data.user_settings.get(name, Settings())
 | 
					        return self.data.user_settings.get(name, SettingsStoreData())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    async def set_user_settings(self, name, **data):
 | 
					    async def set_user_settings(self, name, **data):
 | 
				
			||||||
        settings = self.data.user_settings.get(name, Settings())
 | 
					        settings = self.data.user_settings.get(name, SettingsStoreData())
 | 
				
			||||||
        settings.__dict__.update(data)
 | 
					        settings.__dict__.update(data)
 | 
				
			||||||
        self.data.user_settings[name] = settings
 | 
					        self.data.user_settings[name] = settings
 | 
				
			||||||
        await self.updated()
 | 
					        await self.updated()
 | 
				
			||||||
 | 
				
			|||||||
@ -28,7 +28,7 @@ class BrowserModRegisteredBrowsersCard extends LitElement {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    window.browser_mod.showPopup(
 | 
					    window.browser_mod.showPopup(
 | 
				
			||||||
      "Unregister browser",
 | 
					      "Unregister browser",
 | 
				
			||||||
      `Are you sure you want to unregister browser ${browserID}?`,
 | 
					      `Are you sure you want to unregister Browser ${browserID}?`,
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
        right_button: "Yes",
 | 
					        right_button: "Yes",
 | 
				
			||||||
        right_button_action: unregisterCallback,
 | 
					        right_button_action: unregisterCallback,
 | 
				
			||||||
@ -37,6 +37,13 @@ class BrowserModRegisteredBrowsersCard extends LitElement {
 | 
				
			|||||||
    );
 | 
					    );
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  register_cast() {
 | 
				
			||||||
 | 
					    window.browser_mod.connection.sendMessage({
 | 
				
			||||||
 | 
					      type: "browser_mod/register",
 | 
				
			||||||
 | 
					      browserID: "CAST",
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  render() {
 | 
					  render() {
 | 
				
			||||||
    return html`
 | 
					    return html`
 | 
				
			||||||
      <ha-card header="Registered Browsers" outlined>
 | 
					      <ha-card header="Registered Browsers" outlined>
 | 
				
			||||||
@ -57,6 +64,15 @@ class BrowserModRegisteredBrowsersCard extends LitElement {
 | 
				
			|||||||
            </ha-settings-row>`
 | 
					            </ha-settings-row>`
 | 
				
			||||||
          )}
 | 
					          )}
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
 | 
					        ${window.browser_mod.browsers["CAST"] === undefined
 | 
				
			||||||
 | 
					          ? html`
 | 
				
			||||||
 | 
					              <div class="card-actions">
 | 
				
			||||||
 | 
					                <mwc-button @click=${this.register_cast}>
 | 
				
			||||||
 | 
					                  Register CAST Browser
 | 
				
			||||||
 | 
					                </mwc-button>
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
 | 
					            `
 | 
				
			||||||
 | 
					          : ""}
 | 
				
			||||||
      </ha-card>
 | 
					      </ha-card>
 | 
				
			||||||
    `;
 | 
					    `;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
				
			|||||||
@ -21,6 +21,7 @@ export const BrowserIDMixin = (SuperClass) => {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    get browserID() {
 | 
					    get browserID() {
 | 
				
			||||||
 | 
					      if (document.querySelector("hc-main")) return "CAST";
 | 
				
			||||||
      if (localStorage[ID_STORAGE_KEY]) return localStorage[ID_STORAGE_KEY];
 | 
					      if (localStorage[ID_STORAGE_KEY]) return localStorage[ID_STORAGE_KEY];
 | 
				
			||||||
      this.browserID = "";
 | 
					      this.browserID = "";
 | 
				
			||||||
      return this.browserID;
 | 
					      return this.browserID;
 | 
				
			||||||
 | 
				
			|||||||
@ -13,6 +13,7 @@ export const ConnectionMixin = (SuperClass) => {
 | 
				
			|||||||
    public browserEntities = {};
 | 
					    public browserEntities = {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    LOG(...args) {
 | 
					    LOG(...args) {
 | 
				
			||||||
 | 
					      return;
 | 
				
			||||||
      const dt = new Date();
 | 
					      const dt = new Date();
 | 
				
			||||||
      console.log(`${dt.toLocaleTimeString()}`, ...args);
 | 
					      console.log(`${dt.toLocaleTimeString()}`, ...args);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -60,12 +60,12 @@ import { BrowserIDMixin } from "./browserID";
 | 
				
			|||||||
    x Title templates
 | 
					    x Title templates
 | 
				
			||||||
  - Tweaks
 | 
					  - Tweaks
 | 
				
			||||||
    - Quickbar tweaks (ctrl+enter)?
 | 
					    - Quickbar tweaks (ctrl+enter)?
 | 
				
			||||||
    - Card-mod preload
 | 
					    x Card-mod preload
 | 
				
			||||||
  - Video player?
 | 
					  - Video player?
 | 
				
			||||||
  - Media_seek
 | 
					  - Media_seek
 | 
				
			||||||
  - Screensavers
 | 
					  - Screensavers
 | 
				
			||||||
  - IMPORTANT: FIX DEFAULT HIDING OF ENTITIES
 | 
					  - IMPORTANT: FIX DEFAULT HIDING OF ENTITIES
 | 
				
			||||||
  - Check functionality with CAST - may need to add frontend part as a lovelace resource
 | 
					  X Check functionality with CAST - may need to add frontend part as a lovelace resource
 | 
				
			||||||
  */
 | 
					  */
 | 
				
			||||||
export class BrowserMod extends ServicesMixin(
 | 
					export class BrowserMod extends ServicesMixin(
 | 
				
			||||||
  PopupMixin(
 | 
					  PopupMixin(
 | 
				
			||||||
 | 
				
			|||||||
@ -2,6 +2,12 @@ default_config:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
demo:
 | 
					demo:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					http:
 | 
				
			||||||
 | 
					  use_x_forwarded_for: true
 | 
				
			||||||
 | 
					  trusted_proxies:
 | 
				
			||||||
 | 
					    - 172.17.0.4
 | 
				
			||||||
 | 
					    # Update this as needed for testing with Cast
 | 
				
			||||||
 | 
					
 | 
				
			||||||
logger:
 | 
					logger:
 | 
				
			||||||
  default: warning
 | 
					  default: warning
 | 
				
			||||||
  logs:
 | 
					  logs:
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user