READY page: the weekly worship checklist, checked against Planning Center
- readiness.py looks every 2 minutes (never while a HyperDeck records) at this weekend's PCO plan and what is in place for it: the Ableton set (songs, mix, routing, lighting cues), ProPresenter (every PCO item, MC announcements, baptism names, timelines, backgrounds), the LTC note of every song against the timecode the tracks play, the Band Lineup TV, Resolume's LED cross, and the tracks and ProP bundles for the locations. - READY key on the Status page (row 2, col 7; SPOTIFY now shows inside SHOW) opens page 24. Amber until done, blinking red from Saturday noon; not part of ALL. Tap keys for BOH mix, mics and stage reset every Monday. - Holds fix what can be fixed: re-sync the lineup, put the cross back up, write LTC into PCO, copy tracks to locations, look again. Hold READY fixes everything. - Settings page: a READY page tab (live keys, drag to move, why each key is amber), and Apply re-imports page 24. - Auto-fix: "while_muted" fixes keep running with ALARMS muted (Spotify playlist). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+40
-5
@@ -15,8 +15,10 @@ Buttons write commands into sp_cmd, which status_panel.py reads:
|
||||
press ack <tile> (the master acks everything)
|
||||
hold 2 seconds restart <tile> (fixes what that tile is failing on)
|
||||
Restart page force <key> (hold 2 s: restart that thing even when it looks fine)
|
||||
READY page done <key> (tap a key only a person can check: done for the week)
|
||||
|
||||
python3 make_page.py -> status-page.companionconfig and restart-page.companionconfig
|
||||
python3 make_page.py -> status-page.companionconfig, restart-page.companionconfig
|
||||
and ready-page.companionconfig
|
||||
python3 make_page.py --out DIR -> the same files in DIR (the data dir on the Ingest Mac)
|
||||
"""
|
||||
import gzip
|
||||
@@ -27,7 +29,7 @@ import sys
|
||||
|
||||
HERE = os.path.dirname(os.path.abspath(__file__))
|
||||
sys.path.insert(0, HERE)
|
||||
from status_panel import RESTARTABLE, load_config # noqa: E402
|
||||
from status_panel import RESTARTABLE, load_config, ready_keys # noqa: E402
|
||||
|
||||
# Defaults; "companion", "page_grid", "page_stale_seconds" and "page_hold_ms" in config.json override them.
|
||||
EXPORT_VERSION = 12 # Companion 5.0.7's export format
|
||||
@@ -38,7 +40,7 @@ PURPLE = 0x6A1B9A
|
||||
HOLD_MS = 2000
|
||||
# Every key this tool makes carries one of these in its notes; push_page.py overwrites a page only
|
||||
# when every key on it (besides Companion's own page keys) does.
|
||||
MARKERS = ("STATUS tile", "RESTART key", "STATUS jump key", "RESTART back key", "STATUS nav key")
|
||||
MARKERS = ("STATUS tile", "RESTART key", "STATUS jump key", "RESTART back key", "STATUS nav key", "READY back key")
|
||||
|
||||
|
||||
def settings(cfg):
|
||||
@@ -169,7 +171,24 @@ def button(tid, tile, cfg):
|
||||
hold_ms, secs = opts["hold_ms"], "%g" % (opts["hold_ms"] / 1000.0)
|
||||
kind = tile.get("kind")
|
||||
label = tile["label"]
|
||||
if kind == "master":
|
||||
rp = cfg.get("ready_page") or {}
|
||||
on_ready_page = any(k["id"] == tid for k in rp.get("keys", []))
|
||||
go = None
|
||||
if kind == "ready" and not on_ready_page:
|
||||
stale_text = "'%s\\n?'" % label
|
||||
press, hold, go = None, "restart " + tid, rp.get("page")
|
||||
note = ("Tap: open the READY page (page %s). Hold %s s: fix everything on it that can be fixed "
|
||||
"(re-sync the lineup, the cross background, look again)." % (rp.get("page"), secs))
|
||||
elif kind == "ready":
|
||||
stale_text = "'%s\\n?'" % label
|
||||
press, hold = "ack " + tid, "restart " + tid
|
||||
note = "Press: stop the blinking. Hold %s s: fix everything on this page that can be fixed." % secs
|
||||
elif any(c["type"] == "ready_manual" for c in tile.get("checks", [])):
|
||||
stale_text = "'%s\\n?'" % label
|
||||
press, hold = "done " + tid, None
|
||||
note = "Tap: done for this week (tap again to take it back). Resets every %s." % (
|
||||
(cfg.get("ready") or {}).get("reset_day", "mon").capitalize())
|
||||
elif kind == "master":
|
||||
# Template string: '+' would add numbers, not join text (see above).
|
||||
stale_text = "`${'WATCHDOG\\nDOWN\\n'}${$(internal:instance_errors)} ERR`"
|
||||
press, hold = "ackall", None
|
||||
@@ -193,7 +212,7 @@ def button(tid, tile, cfg):
|
||||
else:
|
||||
note = "Press: acknowledge." + (" Hold %s s: fix what this button is failing on (nothing if it is green)."
|
||||
% secs if hold else "")
|
||||
action_sets = {"down": [], "up": [command_action(tid, "press", names["command"], press)]}
|
||||
action_sets = {"down": [], "up": [set_page_action(tid, "go", go) if go else command_action(tid, "press", names["command"], press)]}
|
||||
run_while_held = []
|
||||
if hold:
|
||||
# Stamped with Companion's clock, so a hold made while the watchdog was down is dropped later.
|
||||
@@ -322,6 +341,18 @@ def build_restart(cfg):
|
||||
return page_export(rp["page_name"], rp["page"], controls, cfg)
|
||||
|
||||
|
||||
def build_ready(cfg):
|
||||
"""The READY page: the weekly checklist, one key per line, drawn by the watchdog like the Status page."""
|
||||
rp = cfg["ready_page"]
|
||||
controls = nav_controls(cfg)
|
||||
place(controls, rp["back_pos"], static_button("ready_back", "STATUS\\nPAGE", 0x37474F, 0xFFFFFF, cfg["page"],
|
||||
"Tap: back to the status page (page %d)." % cfg["page"],
|
||||
"READY back key"))
|
||||
for key in ready_keys(cfg):
|
||||
place(controls, key["pos"], button(key["id"], key, cfg))
|
||||
return page_export(rp["page_name"], rp["page"], controls, cfg)
|
||||
|
||||
|
||||
def write(path, export):
|
||||
with gzip.open(path, "wb") as f: # Companion's own exports are gzipped JSON
|
||||
f.write(json.dumps(export, indent=1).encode())
|
||||
@@ -343,6 +374,10 @@ def main(argv=None):
|
||||
out = os.path.join(folder, "restart-page.companionconfig")
|
||||
write(out, build_restart(cfg))
|
||||
print("wrote %s (%d restart keys)" % (out, len(cfg["restart_page"]["keys"])))
|
||||
if cfg.get("ready_page") and not args.status_file:
|
||||
out = os.path.join(folder, "ready-page.companionconfig")
|
||||
write(out, build_ready(cfg))
|
||||
print("wrote %s (%d READY keys)" % (out, len(ready_keys(cfg))))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
Reference in New Issue
Block a user