Recall browserID from backend if it suddenly disappears
This commit is contained in:
parent
5ecf24d501
commit
ae916a3900
@ -156,7 +156,17 @@ def getBrowser(hass, browserID, *, create=True):
|
||||
|
||||
|
||||
def deleteBrowser(hass, browserID):
|
||||
"""Delete a browser by BrowserID."""
|
||||
browsers = hass.data[DOMAIN][DATA_BROWSERS]
|
||||
if browserID in browsers:
|
||||
browsers[browserID].delete(hass)
|
||||
del browsers[browserID]
|
||||
|
||||
|
||||
def getBrowserByConnection(hass, connection):
|
||||
"""Get the browser that has a given connection open."""
|
||||
browsers = hass.data[DOMAIN][DATA_BROWSERS]
|
||||
|
||||
for k, v in browsers.items():
|
||||
if any([c[0] == connection for c in v.connection]):
|
||||
return v
|
||||
|
@ -2062,12 +2062,25 @@ const BrowserIDMixin = (SuperClass) => {
|
||||
}
|
||||
}
|
||||
}
|
||||
async recall_id() {
|
||||
// If the connection is still open, but the BrowserID has disappeared - recall it from the backend
|
||||
// This happens e.g. when the frontend cache is reset in the Compainon app
|
||||
if (!this.connection)
|
||||
return;
|
||||
const recalledID = await this.connection.sendMessagePromise({
|
||||
type: "browser_mod/recall_id",
|
||||
});
|
||||
if (recalledID) {
|
||||
localStorage[ID_STORAGE_KEY] = recalledID;
|
||||
}
|
||||
}
|
||||
get browserID() {
|
||||
if (document.querySelector("hc-main"))
|
||||
return "CAST";
|
||||
if (localStorage[ID_STORAGE_KEY])
|
||||
return localStorage[ID_STORAGE_KEY];
|
||||
this.browserID = "";
|
||||
this.recall_id();
|
||||
return this.browserID;
|
||||
}
|
||||
set browserID(id) {
|
||||
|
@ -18,7 +18,7 @@ from .const import (
|
||||
DOMAIN,
|
||||
)
|
||||
|
||||
from .browser import getBrowser, deleteBrowser
|
||||
from .browser import getBrowser, deleteBrowser, getBrowserByConnection
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
@ -159,9 +159,34 @@ async def async_setup_connection(hass):
|
||||
await store.set_global_settings(**{msg["key"]: msg.get("value", None)})
|
||||
pass
|
||||
|
||||
@websocket_api.websocket_command(
|
||||
{
|
||||
vol.Required("type"): "browser_mod/recall_id",
|
||||
}
|
||||
)
|
||||
def handle_recall_id(hass, connection, msg):
|
||||
dev = getBrowserByConnection(hass, connection)
|
||||
if dev:
|
||||
connection.send_message(
|
||||
websocket_api.result_message(msg["id"], dev.browserID)
|
||||
)
|
||||
connection.send_message(websocket_api.result_message(msg["id"], None))
|
||||
|
||||
@websocket_api.websocket_command(
|
||||
{
|
||||
vol.Required("type"): "browser_mod/log",
|
||||
vol.Required("message"): str,
|
||||
}
|
||||
)
|
||||
def handle_log(hass, connection, msg):
|
||||
_LOGGER.info("LOG MESSAGE")
|
||||
_LOGGER.info(msg["message"])
|
||||
|
||||
async_register_command(hass, handle_connect)
|
||||
async_register_command(hass, handle_register)
|
||||
async_register_command(hass, handle_unregister)
|
||||
async_register_command(hass, handle_reregister)
|
||||
async_register_command(hass, handle_update)
|
||||
async_register_command(hass, handle_settings)
|
||||
async_register_command(hass, handle_recall_id)
|
||||
async_register_command(hass, handle_log)
|
||||
|
@ -20,10 +20,23 @@ export const BrowserIDMixin = (SuperClass) => {
|
||||
}
|
||||
}
|
||||
|
||||
async recall_id() {
|
||||
// If the connection is still open, but the BrowserID has disappeared - recall it from the backend
|
||||
// This happens e.g. when the frontend cache is reset in the Compainon app
|
||||
if (!this.connection) return;
|
||||
const recalledID = await this.connection.sendMessagePromise({
|
||||
type: "browser_mod/recall_id",
|
||||
});
|
||||
if (recalledID) {
|
||||
localStorage[ID_STORAGE_KEY] = recalledID;
|
||||
}
|
||||
}
|
||||
|
||||
get browserID() {
|
||||
if (document.querySelector("hc-main")) return "CAST";
|
||||
if (localStorage[ID_STORAGE_KEY]) return localStorage[ID_STORAGE_KEY];
|
||||
this.browserID = "";
|
||||
this.recall_id();
|
||||
return this.browserID;
|
||||
}
|
||||
set browserID(id) {
|
||||
|
@ -16,6 +16,11 @@ export const ConnectionMixin = (SuperClass) => {
|
||||
return;
|
||||
const dt = new Date();
|
||||
console.log(`${dt.toLocaleTimeString()}`, ...args);
|
||||
|
||||
this.connection.sendMessage({
|
||||
type: "browser_mod/log",
|
||||
message: args[0],
|
||||
});
|
||||
}
|
||||
|
||||
private fireEvent(event, detail = undefined) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user