build 118 - оверлеи

This commit is contained in:
2026-08-26 13:17:08 +03:00
parent 2c9b0d4fcc
commit c5b25c23e2
8 changed files with 31383 additions and 36 deletions

View File

@@ -277,7 +277,7 @@ class VmixAgentHub:
text = re.sub(r"\s+", "", str(function_name or ""))
if text.lower() == "overlayinputalloff":
return ("all", "off")
match = re.search(r"OverlayInput([1-4])(In|Out|Off)?", text, flags=re.IGNORECASE)
match = re.search(r"OverlayInput([1-8])(In|Out|Off)?", text, flags=re.IGNORECASE)
if not match:
return None
raw = str(match.group(2) or "toggle").lower()
@@ -333,7 +333,7 @@ class VmixAgentHub:
def _runtime_overlay_payload(self, device_id: str) -> dict[str, Any]:
source = self._runtime_overlay_state.get(device_id, {})
overlays = {str(layer): dict(value) for layer, value in source.items() if str(layer) in {"1", "2", "3", "4"}}
overlays = {str(layer): dict(value) for layer, value in source.items() if str(layer) in {"1", "2", "3", "4", "5", "6", "7", "8"}}
authoritative = bool(getattr(self, "_runtime_overlay_authoritative", {}).get(device_id, False))
observed = str(getattr(self, "_runtime_overlay_observed_at", {}).get(device_id) or "")
return {
@@ -697,7 +697,7 @@ class VmixAgentHub:
async def receive_overlay_state(self, device_id: str, message: dict[str, Any]) -> None:
raw_overlays = message.get("overlays") if isinstance(message.get("overlays"), dict) else {}
next_state: dict[str, dict[str, str]] = {}
for layer in ("1", "2", "3", "4"):
for layer in ("1", "2", "3", "4", "5", "6", "7", "8"):
raw = raw_overlays.get(layer)
if raw is None:
raw = raw_overlays.get(int(layer))

View File

@@ -340,7 +340,7 @@ class HockeySettingsStore:
source = source_team_states.get(state_key)
source = source if isinstance(source, dict) else {}
overlay = str(source.get("overlay") or defaults["overlay"]).strip()
if overlay not in {"1", "2", "3", "4"}:
if overlay not in {"1", "2", "3", "4", "5", "6", "7", "8"}:
overlay = str(defaults["overlay"])
normalised_team_states[state_key] = {
"ru": str(source.get("ru", defaults["ru"]) or "").strip()[:48],

View File

@@ -653,14 +653,14 @@
function scoreboardTeamStatesMarkup(settings) {
return SCOREBOARD_TEAM_STATE_ROWS.map((row) => {
const value = scoreboardTeamStateValue(settings, row.key);
const overlay = ["1", "2", "3", "4"].includes(String(value.overlay || "")) ? String(value.overlay) : (row.key.includes("empty_net") ? "3" : "2");
const overlay = ["1", "2", "3", "4", "5", "6", "7", "8"].includes(String(value.overlay || "")) ? String(value.overlay) : (row.key.includes("empty_net") ? "3" : "2");
return `
<div class="hockey-team-state-setting-row">
<div class="hockey-team-state-setting-kind"><b>${escapeHtml(row.side)}</b><strong>${escapeHtml(row.title)}</strong></div>
<label><span>Русская надпись</span><input name="team_state_${row.key}_ru" maxlength="48" value="${escapeHtml(value.ru || row.defaultRu)}"></label>
<label><span>English label</span><input name="team_state_${row.key}_en" maxlength="48" value="${escapeHtml(value.en || row.defaultEn)}"></label>
<label><span>vMix Input</span><select name="team_state_${row.key}_input">${scoreboardInputOptions(value.input, value.input_title)}</select></label>
<label><span>Overlay</span><select name="team_state_${row.key}_overlay">${[1,2,3,4].map((item) => `<option value="${item}" ${String(item) === overlay ? "selected" : ""}>Overlay ${item}</option>`).join("")}</select></label>
<label><span>Overlay</span><select name="team_state_${row.key}_overlay">${[1,2,3,4,5,6,7,8].map((item) => `<option value="${item}" ${String(item) === overlay ? "selected" : ""}>Overlay ${item}</option>`).join("")}</select></label>
<label class="hockey-rules-switch compact"><input name="team_state_${row.key}_enabled" type="checkbox" ${value.enabled !== false ? "checked" : ""}><i></i><span><strong>Использовать</strong></span></label>
</div>`;
}).join("");