@@ -389,6 +395,15 @@ class BrowserModRegisteredBrowsersCard extends s {
`)}
+ ${window.browser_mod.browsers["CAST"] === undefined
+ ? $ `
+
+
+ Register CAST Browser
+
+
+ `
+ : ""}
`;
}
diff --git a/custom_components/browser_mod/manifest.json b/custom_components/browser_mod/manifest.json
index bc60a6c..a63f790 100644
--- a/custom_components/browser_mod/manifest.json
+++ b/custom_components/browser_mod/manifest.json
@@ -2,7 +2,7 @@
"domain": "browser_mod",
"name": "Browser mod",
"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": [],
"requirements": [],
"version": "2.0b0",
diff --git a/custom_components/browser_mod/mod_view.py b/custom_components/browser_mod/mod_view.py
index 96746d1..8e54c09 100644
--- a/custom_components/browser_mod/mod_view.py
+++ b/custom_components/browser_mod/mod_view.py
@@ -2,6 +2,10 @@ from homeassistant.components.frontend import add_extra_js_url
from .const import FRONTEND_SCRIPT_URL, SETTINGS_PANEL_URL
+import logging
+
+_LOGGER = logging.getLogger(__name__)
+
async def async_setup_view(hass):
@@ -28,3 +32,25 @@ async def async_setup_view(hass):
SETTINGS_PANEL_URL,
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",
+ }
+ )
diff --git a/custom_components/browser_mod/store.py b/custom_components/browser_mod/store.py
index 5b4dbee..95cce54 100644
--- a/custom_components/browser_mod/store.py
+++ b/custom_components/browser_mod/store.py
@@ -10,7 +10,7 @@ _LOGGER = logging.getLogger(__name__)
@attr.s
-class Settings:
+class SettingsStoreData:
hideSidebar = attr.ib(type=bool, default=None)
hideHeader = attr.ib(type=bool, default=None)
defaultPanel = attr.ib(type=str, default=None)
@@ -32,12 +32,12 @@ class BrowserStoreData:
last_seen = attr.ib(type=int, default=0)
enabled = 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")
@classmethod
def from_dict(cls, data):
- settings = Settings.from_dict(data.get("settings", {}))
+ settings = SettingsStoreData.from_dict(data.get("settings", {}))
return cls(
**(
data
@@ -55,8 +55,8 @@ class BrowserStoreData:
class ConfigStoreData:
browsers = attr.ib(type=dict[str:BrowserStoreData], factory=dict)
version = attr.ib(type=str, default="2.0")
- settings = attr.ib(type=Settings, factory=Settings)
- user_settings = attr.ib(type=dict[str:Settings], factory=dict)
+ settings = attr.ib(type=SettingsStoreData, factory=SettingsStoreData)
+ user_settings = attr.ib(type=dict[str:SettingsStoreData], factory=dict)
@classmethod
def from_dict(cls, data={}):
@@ -65,9 +65,10 @@ class ConfigStoreData:
for k, v in data.get("browsers", {}).items()
}
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(
**(
data
@@ -135,10 +136,10 @@ class BrowserModStore:
await self.updated()
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):
- settings = self.data.user_settings.get(name, Settings())
+ settings = self.data.user_settings.get(name, SettingsStoreData())
settings.__dict__.update(data)
self.data.user_settings[name] = settings
await self.updated()
diff --git a/js/config_panel/registered-browsers-card.ts b/js/config_panel/registered-browsers-card.ts
index a60789a..30ce9c2 100644
--- a/js/config_panel/registered-browsers-card.ts
+++ b/js/config_panel/registered-browsers-card.ts
@@ -28,7 +28,7 @@ class BrowserModRegisteredBrowsersCard extends LitElement {
window.browser_mod.showPopup(
"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_action: unregisterCallback,
@@ -37,6 +37,13 @@ class BrowserModRegisteredBrowsersCard extends LitElement {
);
}
+ register_cast() {
+ window.browser_mod.connection.sendMessage({
+ type: "browser_mod/register",
+ browserID: "CAST",
+ });
+ }
+
render() {
return html`