Refresh snapshots after light actions
This commit is contained in:
@@ -149,7 +149,8 @@ def snapshot_markup_for_group(group, lang, token_query):
|
||||
if action.cfg.get("snapshot"):
|
||||
snapshot_url = (
|
||||
f"/snapshot/{urllib.parse.quote(action.id)}.jpg"
|
||||
f"?lang={urllib.parse.quote(lang)}{token_query}"
|
||||
f"?lang={urllib.parse.quote(lang)}"
|
||||
f"&v={int(getattr(action, 'snapshot_version', 0) or 0)}{token_query}"
|
||||
)
|
||||
snapshot_markup = (
|
||||
'<div class="media">'
|
||||
@@ -162,6 +163,48 @@ def snapshot_markup_for_group(group, lang, token_query):
|
||||
return snapshot_markup
|
||||
|
||||
|
||||
def camera_stream_url(action):
|
||||
snapshot = action.cfg.get("snapshot") or {}
|
||||
base_url = snapshot.get("public_url") or snapshot.get("frigate_url")
|
||||
camera = snapshot.get("camera")
|
||||
if not base_url or not camera:
|
||||
return None
|
||||
template = snapshot.get("camera_path_template") or "/#{camera_quoted}"
|
||||
values = {
|
||||
"camera": camera,
|
||||
"camera_quoted": urllib.parse.quote(camera, safe=""),
|
||||
"frigate_url": snapshot.get("frigate_url", "").rstrip("/"),
|
||||
"frigate_public_url": base_url.rstrip("/"),
|
||||
}
|
||||
try:
|
||||
link = template.format(**values)
|
||||
except KeyError:
|
||||
link = template
|
||||
if urllib.parse.urlsplit(link).scheme:
|
||||
return link
|
||||
return f"{base_url.rstrip('/')}/{link.lstrip('/')}"
|
||||
|
||||
|
||||
def camera_stream_link(group, lang):
|
||||
action = next((item for item in group["actions"] if item.cfg.get("snapshot")), None)
|
||||
if not action:
|
||||
return ""
|
||||
url = camera_stream_url(action)
|
||||
if not url:
|
||||
return ""
|
||||
label = text_for(lang, "link.open_stream")
|
||||
return (
|
||||
f'<a class="stream-link" href="{html.escape(url)}" target="_blank" rel="noreferrer" '
|
||||
f'title="{html.escape(label)}" aria-label="{html.escape(label)}">'
|
||||
'<svg viewBox="0 0 24 24" aria-hidden="true">'
|
||||
'<path d="M15 3h6v6"></path>'
|
||||
'<path d="M10 14 21 3"></path>'
|
||||
'<path d="M21 13v5a3 3 0 0 1-3 3H6a3 3 0 0 1-3-3V6a3 3 0 0 1 3-3h5"></path>'
|
||||
"</svg>"
|
||||
"</a>"
|
||||
)
|
||||
|
||||
|
||||
def render_action_control(action, lang, token_query):
|
||||
display_name = action_label(action, lang)
|
||||
|
||||
@@ -213,7 +256,10 @@ def render_group_card(group, lang, token_query):
|
||||
f"{snapshot_markup_for_group(group, lang, token_query)}"
|
||||
'<div class="card-body">'
|
||||
'<div class="card-main">'
|
||||
'<div class="card-title-row">'
|
||||
f"<h2>{html.escape(group['name'])}</h2>"
|
||||
f"{camera_stream_link(group, lang)}"
|
||||
"</div>"
|
||||
f'<span class="camera-count">{html.escape(text_for(lang, "camera.controls_count", count=len(group["actions"])))}</span>'
|
||||
"</div>"
|
||||
f'<div class="control-stack">{controls}</div>'
|
||||
|
||||
Reference in New Issue
Block a user