Draft
Conversation
Add optional pauseTime field to TimerState type to indicate when a
timer should automatically pause (when current part ends and overrun begins).
Benefits:
- Client can handle running→paused transition locally without server update
- Reduces latency in state transitions
- Server still triggers recalculation on Take/part changes
- More declarative timing ("pause at this time" vs "set paused now")
Implementation:
- When not pushing: pauseTime = now + currentPartRemainingTime
- When already pushing: pauseTime = null
- Client should display timer as paused when now >= pauseTime
Document the client-side logic for rendering timer states with pauseTime support: - paused === true: use frozen duration - pauseTime && now >= pauseTime: use zeroTime - pauseTime (auto-pause) - otherwise: use zeroTime - now (running normally)
Add calculateTimerDuration() function to calculate current timer duration
from TimerState, handling all three cases:
- Manually paused or already pushing
- Auto-pause at overrun (pauseTime)
- Running normally
Clients can import and use:
import { calculateTimerDuration } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist'
const duration = calculateTimerDuration(timer.state, getCurrentTime())
4bede23 to
6bd8b20
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
About the Contributor
This pull request is posted by SuperflyTV on behalf of the BBC.
Type of Contribution
This is a Feature
Current Behavior
When a part starts "pushing" and progress through the timeline is paused, the T-Timer estimateState is set to paused on the server and the update is propogated to the clients through the database and meteors standard methods.
New Behavior
Information about when pushing will start and therefore a pause is needed, is included in the estimateState, so the client is able to pause itself, and no update needs to be sent. The pauseTime is a time of day, not a duration. The remaining duration is therefore
zeroTime - pauseTime.This also means a regular T-Timer can have a pause time if you know that you want to hold the clock at a certain point in the future. If you set
zeroTimeandpauseTimeto the same value, the clock will stop at zero, so we could maybe remove the stopAtZero feature.Testing
Affected areas
Time Frame
Other Information
Status