allowedTracks gating, constraint/exclusive helpers, duplicate trigger source validation, re-enable untimed block validation

This commit is contained in:
Ian Gulliver
2026-02-20 22:31:04 -07:00
parent 99f79e82f3
commit 7d3a23dfc1
4 changed files with 135 additions and 49 deletions

View File

@@ -91,6 +91,7 @@ func (show *Show) Validate() error {
}
hookTargeted := map[blockEvent]bool{}
startTargeted := map[string]bool{}
sourceUsed := map[blockEvent]bool{}
for _, trigger := range show.Triggers {
sourceBlock := blocksByID[trigger.Source.Block]
if sourceBlock == nil {
@@ -99,6 +100,11 @@ func (show *Show) Validate() error {
if !isValidEventForBlock(sourceBlock, trigger.Source.Signal) {
return fmt.Errorf("trigger source signal %q is invalid for block %q", trigger.Source.Signal, trigger.Source.Block)
}
src := blockEvent{trigger.Source.Block, trigger.Source.Signal}
if sourceUsed[src] {
return fmt.Errorf("duplicate trigger source: block %q signal %q", trigger.Source.Block, trigger.Source.Signal)
}
sourceUsed[src] = true
for _, target := range trigger.Targets {
targetBlock := blocksByID[target.Block]
@@ -122,12 +128,9 @@ func (show *Show) Validate() error {
if !startTargeted[block.ID] {
return fmt.Errorf("block %q has no trigger for its START", block.ID)
}
/*
TODO: Put this back when mock is fixed
if !block.hasDefinedTiming() && !hookTargeted[blockEvent{block.ID, "FADE_OUT"}] && !hookTargeted[blockEvent{block.ID, "END"}] {
return fmt.Errorf("block %q has no defined timing and nothing triggers its FADE_OUT or END", block.ID)
}
*/
if !block.hasDefinedTiming() && !hookTargeted[blockEvent{block.ID, "FADE_OUT"}] && !hookTargeted[blockEvent{block.ID, "END"}] {
return fmt.Errorf("block %q has no defined timing and nothing triggers its FADE_OUT or END", block.ID)
}
}
for _, trigger := range show.Triggers {