diff --git a/apps/server/src/services/runtime-service/runtime.service.ts b/apps/server/src/services/runtime-service/runtime.service.ts index e5e7f93cd..6a0549fbc 100644 --- a/apps/server/src/services/runtime-service/runtime.service.ts +++ b/apps/server/src/services/runtime-service/runtime.service.ts @@ -273,13 +273,14 @@ class RuntimeService { public startByCue(cue: string): boolean { const state = runtimeState.getState(); const rundown = getCurrentRundown(); - const { playableEventOrder } = getRundownMetadata(); + const { timedEventOrder } = getRundownMetadata(); const event = findNextPlayableWithCue( rundown, - playableEventOrder, + timedEventOrder, cue, state.rundown.selectedEventIndex ?? undefined, + state.timer.playback === Playback.Armed, // If we are armed allow the armed event to be considered for playback ); if (!event) { @@ -341,6 +342,7 @@ class RuntimeService { playableEventOrder, cue, state.rundown.selectedEventIndex ?? undefined, + false, ); if (!event) { diff --git a/apps/server/src/services/runtime-service/runtime.utils.ts b/apps/server/src/services/runtime-service/runtime.utils.ts index 2a1c62269..cf18d7c07 100644 --- a/apps/server/src/services/runtime-service/runtime.utils.ts +++ b/apps/server/src/services/runtime-service/runtime.utils.ts @@ -118,24 +118,25 @@ export function findNextPlayableId(playableEventsOrder: EntryId[], currentEventI */ export function findNextPlayableWithCue( rundown: Rundown, - playableEventsOrder: EntryId[], + timedEventsOrder: EntryId[], targetCue: string, currentEventIndex = 0, + allowCurrent = false, ): OntimeEvent | undefined { - const lowerCaseCue = targetCue.toLowerCase(); + const startFromIndex = allowCurrent ? currentEventIndex : currentEventIndex + 1; - for (let i = currentEventIndex; i < playableEventsOrder.length; i++) { - const eventId = playableEventsOrder[i]; + for (let i = startFromIndex; i < timedEventsOrder.length; i++) { + const eventId = timedEventsOrder[i]; const event = rundown.entries[eventId]; - if (isOntimeEvent(event) && isPlayableEvent(event) && event.cue.toLowerCase() === lowerCaseCue) { + if (isOntimeEvent(event) && isPlayableEvent(event) && event.cue === targetCue) { return event; } } - for (let i = 0; i < currentEventIndex; i++) { - const eventId = playableEventsOrder[i]; + for (let i = 0; i < startFromIndex; i++) { + const eventId = timedEventsOrder[i]; const event = rundown.entries[eventId]; - if (isOntimeEvent(event) && isPlayableEvent(event) && event.cue.toLowerCase() === lowerCaseCue) { + if (isOntimeEvent(event) && isPlayableEvent(event) && event.cue === targetCue) { return event; } }