mirror of
https://github.com/cpvalente/ontime.git
synced 2026-08-13 11:23:50 +00:00
refactor: extract and simplify logic
This commit is contained in:
committed by
Carlos Valente
parent
49cae647d6
commit
3f35b5e297
@@ -0,0 +1,128 @@
|
||||
import { MaybeNumber, MessageState, Playback, TimerMessage, TimerPhase, TimerType, ViewSettings } from 'ontime-types';
|
||||
|
||||
import { getFormattedTimer } from '../../features/viewers/common/viewUtils';
|
||||
|
||||
/**
|
||||
* Whether a message should be shown
|
||||
*/
|
||||
export function getShowMessage(message: TimerMessage): boolean {
|
||||
return message.text !== '' && message.visible;
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether the playback is playing
|
||||
*/
|
||||
export function getIsPlaying(playback: Playback): boolean {
|
||||
return playback === Playback.Play || playback === Playback.Roll;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the total time from the duration and added time of an event
|
||||
*/
|
||||
export function getTotalTime(duration: MaybeNumber, addedTime: MaybeNumber): number {
|
||||
return (duration ?? 0) + (addedTime ?? 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether the progress bar should be shown for this timer type
|
||||
*/
|
||||
export function getShowProgressBar(timerType: TimerType) {
|
||||
return timerType !== TimerType.None && timerType !== TimerType.Clock;
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether the clock should be shown with this timer type
|
||||
*/
|
||||
export function getShowClock(timerType: TimerType) {
|
||||
return timerType !== TimerType.Clock;
|
||||
}
|
||||
|
||||
const fontSizeMap: { [key: number]: number } = {
|
||||
4: 28, // 9:01
|
||||
5: 28, // -9:01, 10:01, 9 min
|
||||
6: 25, // -10:01, 10 min
|
||||
8: 20, // 23:01:01
|
||||
9: 20, // -23:01:01
|
||||
};
|
||||
|
||||
/**
|
||||
* Finds a font size that fits the timer in the screen
|
||||
* Unfortunately hand tweaked
|
||||
*/
|
||||
export function getEstimatedFontSize(stageTimer: string, secondaryContent?: string) {
|
||||
const stageTimerCharacters = stageTimer.length;
|
||||
let timerFontSize = (100 / (stageTimerCharacters - 1)) * 1.25;
|
||||
|
||||
if (fontSizeMap[stageTimerCharacters]) {
|
||||
timerFontSize = fontSizeMap[stageTimerCharacters];
|
||||
}
|
||||
|
||||
let externalFontSize = timerFontSize * 0.2;
|
||||
if (secondaryContent) {
|
||||
// we need to shrink the timer if the external is going to be there
|
||||
// this number has been tweaked to fit in a landscape mobile screen
|
||||
timerFontSize *= 0.6;
|
||||
if (secondaryContent.length > 25) {
|
||||
externalFontSize = (100 / (secondaryContent.length - 1)) * 1.8;
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
timerFontSize,
|
||||
externalFontSize,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* which, if any, modifier should be shown at any time
|
||||
*/
|
||||
export function getShowModifiers(
|
||||
timerType: TimerType,
|
||||
countToEnd: boolean,
|
||||
phase: TimerPhase,
|
||||
viewSettings: ViewSettings,
|
||||
) {
|
||||
const showModifiers = timerType === TimerType.CountDown || countToEnd;
|
||||
const finished = phase === TimerPhase.Overtime;
|
||||
return {
|
||||
showEndMessage: showModifiers && finished && viewSettings.endMessage,
|
||||
showFinished: showModifiers && finished, // ????
|
||||
showWarning: showModifiers && phase === TimerPhase.Warning,
|
||||
showDanger: showModifiers && phase === TimerPhase.Danger,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Which colour should the timer have at a given moment
|
||||
*/
|
||||
export function getTimerColour(viewSettings: ViewSettings, showWarning: boolean, showDanger: boolean) {
|
||||
if (showWarning) return viewSettings.warningColor;
|
||||
if (showDanger) return viewSettings.dangerColor;
|
||||
return viewSettings.normalColor;
|
||||
}
|
||||
|
||||
/**
|
||||
* What, if anything, should be displayed in the secondary field
|
||||
*/
|
||||
export function getSecondaryDisplay(
|
||||
message: MessageState,
|
||||
currentAux: MaybeNumber,
|
||||
localisedMinutes: string,
|
||||
removeSeconds: boolean,
|
||||
removeLeadingZero: boolean,
|
||||
hideExternal: boolean,
|
||||
): string | undefined {
|
||||
if (hideExternal) {
|
||||
return;
|
||||
}
|
||||
if (message.timer.secondarySource === 'aux') {
|
||||
return getFormattedTimer(currentAux, TimerType.CountDown, localisedMinutes, {
|
||||
removeSeconds,
|
||||
removeLeadingZero,
|
||||
});
|
||||
}
|
||||
if (message.timer.secondarySource === 'external' && message.external) {
|
||||
return message.external;
|
||||
}
|
||||
return;
|
||||
}
|
||||
Reference in New Issue
Block a user