Every MIDI link by wired address: flag links joined by name, hold MIDI moves them, refuse non-wired addresses
Tracks had joined NA Ingest, Lighting PC and Studio B by Bonjour name: macOS picks the network each time, so a reconnect could land on Wi-Fi or Dante. The wired check now also names a link joined by name; holding MIDI moves it to the wired address its own MIDI check names (a hold only: auto-fix never moves a working link). Reconnects prefer a wired address over a Wi-Fi or by-name one they last saw. The settings refuse a MIDI link whose address is a name or off the wired network, and the add-a-link screen fills in the wired address. Studio B's link now has its wired address, and Tracks' link to NA Ingest is watched (TRK INGEST). All links on the four Macs were moved and checked: wired IPv4, running. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -715,6 +715,29 @@ def validate(cfg, live=None):
|
||||
errors.append("key %s check %d: unknown computer %s" % (t.get("id"), i + 1, c["host"]))
|
||||
elif h.get("self"):
|
||||
errors.append("key %s check %d: %s is this Mac" % (t.get("id"), i + 1, c["host"]))
|
||||
# Network MIDI rides the wired network (2026-10-20): a link set to a Bonjour name or to an
|
||||
# address off it can come back over Wi-Fi or Dante, so it is refused once the MIDI key has the rule.
|
||||
nets = []
|
||||
for t in cfg["tiles"] + ((cfg.get("ready_page") or {}).get("keys") or []):
|
||||
for c in t.get("checks", []):
|
||||
if c.get("type") == "midi_wired":
|
||||
for n in c.get("nets") or []:
|
||||
try:
|
||||
nets.append(ipaddress.ip_network(str(n), strict=False))
|
||||
except ValueError:
|
||||
pass
|
||||
if nets:
|
||||
for t in cfg["tiles"] + ((cfg.get("ready_page") or {}).get("keys") or []):
|
||||
for c in t.get("checks", []):
|
||||
if c.get("type") != "midi_peer" or c.get("disabled"):
|
||||
continue
|
||||
where = "key %s, MIDI link %s" % (t.get("id"), c.get("peer"))
|
||||
ip = sp.peer_ip(c.get("address"))
|
||||
if not c.get("address"):
|
||||
warnings.append("%s: no wired address - a reconnect may pick Wi-Fi or Dante" % where)
|
||||
elif ip is None or not any(ip in n for n in nets):
|
||||
errors.append("%s: %s is not on the wired network (%s) - give its wired address, like 10.1.10.206:5004"
|
||||
% (where, str(c["address"]).strip() or "?", ", ".join(str(n) for n in nets)))
|
||||
a = cfg.get("auto_fix") or {}
|
||||
for f in a.get("fixes", []):
|
||||
if f not in fixes:
|
||||
|
||||
Reference in New Issue
Block a user