Skip to content

Commit 997e111

Browse files
committed
chore: refactoring
1 parent b20b4a4 commit 997e111

File tree

3 files changed

+186
-165
lines changed

3 files changed

+186
-165
lines changed

packages/job-worker/src/playout/timeline/part.ts

Lines changed: 53 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -13,65 +13,34 @@ import { assertNever, literal } from '@sofie-automation/corelib/dist/lib'
1313
import { getPartGroupId, getPartFirstObjectId } from '@sofie-automation/corelib/dist/playout/ids'
1414
import { PieceInstanceWithTimings } from '@sofie-automation/corelib/dist/playout/processAndPrune'
1515
import { PieceTimelineMetadata } from './pieceGroup'
16-
import { PartCalculatedTimings } from '@sofie-automation/corelib/dist/playout/timings'
1716
import { JobContext } from '../../jobs'
1817
import { ReadonlyDeep } from 'type-fest'
1918
import { getPieceEnableInsidePart, transformPieceGroupAndObjects } from './piece'
2019
import { PlayoutChangedType } from '@sofie-automation/shared-lib/dist/peripheralDevice/peripheralDeviceAPI'
20+
import { SelectedPartInstanceTimelineInfo } from './generate'
21+
import { PartCalculatedTimings } from '@sofie-automation/corelib/dist/playout/timings'
2122

2223
export function transformPartIntoTimeline(
2324
context: JobContext,
2425
playlistId: RundownPlaylistId,
2526
pieceInstances: ReadonlyDeep<Array<PieceInstanceWithTimings>>,
2627
pieceGroupFirstObjClasses: string[],
2728
parentGroup: TimelineObjGroupPart & OnGenerateTimelineObjExt,
28-
nowInParentGroup: number,
29-
partTimings: PartCalculatedTimings,
30-
isInHold: boolean,
31-
outTransition: IBlueprintPartOutTransition | null
29+
partInfo: SelectedPartInstanceTimelineInfo,
30+
isInHold: boolean
3231
): Array<TimelineObjRundown & OnGenerateTimelineObjExt> {
3332
const span = context.startSpan('transformPartIntoTimeline')
33+
34+
const nowInParentGroup = partInfo.nowInPart
35+
const partTimings = partInfo.calculatedTimings
36+
const outTransition = partInfo.partInstance.part.outTransition ?? null
37+
3438
const timelineObjs: Array<TimelineObjRundown & OnGenerateTimelineObjExt> = []
3539

3640
for (const pieceInstance of pieceInstances) {
3741
if (pieceInstance.disabled) continue
3842

39-
let pieceEnable: TSR.Timeline.TimelineEnable | undefined
40-
switch (pieceInstance.piece.pieceType) {
41-
case IBlueprintPieceType.InTransition:
42-
if (typeof partTimings.inTransitionStart === 'number') {
43-
// Respect the start time of the piece, in case there is a reason for it being non-zero
44-
const startOffset =
45-
typeof pieceInstance.piece.enable.start === 'number' ? pieceInstance.piece.enable.start : 0
46-
47-
pieceEnable = {
48-
start: partTimings.inTransitionStart + startOffset,
49-
duration: pieceInstance.piece.enable.duration,
50-
}
51-
}
52-
break
53-
case IBlueprintPieceType.OutTransition:
54-
if (outTransition) {
55-
pieceEnable = {
56-
start: `#${parentGroup.id}.end - ${outTransition.duration}`,
57-
}
58-
if (partTimings.toPartPostroll) {
59-
pieceEnable.start += ' - ' + partTimings.toPartPostroll
60-
}
61-
}
62-
break
63-
case IBlueprintPieceType.Normal:
64-
pieceEnable = getPieceEnableInsidePart(
65-
pieceInstance,
66-
partTimings,
67-
parentGroup.id,
68-
parentGroup.enable.duration !== undefined || parentGroup.enable.end !== undefined
69-
)
70-
break
71-
default:
72-
assertNever(pieceInstance.piece.pieceType)
73-
break
74-
}
43+
const pieceEnable = getPieceEnableForPieceInstance(partTimings, outTransition, parentGroup, pieceInstance)
7544

7645
// Not able to enable this piece
7746
if (!pieceEnable) continue
@@ -94,6 +63,49 @@ export function transformPartIntoTimeline(
9463
return timelineObjs
9564
}
9665

66+
function getPieceEnableForPieceInstance(
67+
partTimings: PartCalculatedTimings,
68+
outTransition: IBlueprintPartOutTransition | null,
69+
parentGroup: TimelineObjGroupPart & OnGenerateTimelineObjExt,
70+
pieceInstance: ReadonlyDeep<PieceInstanceWithTimings>
71+
): TSR.Timeline.TimelineEnable | undefined {
72+
switch (pieceInstance.piece.pieceType) {
73+
case IBlueprintPieceType.InTransition: {
74+
if (typeof partTimings.inTransitionStart !== 'number') return undefined
75+
// Respect the start time of the piece, in case there is a reason for it being non-zero
76+
const startOffset =
77+
typeof pieceInstance.piece.enable.start === 'number' ? pieceInstance.piece.enable.start : 0
78+
79+
return {
80+
start: partTimings.inTransitionStart + startOffset,
81+
duration: pieceInstance.piece.enable.duration,
82+
}
83+
}
84+
case IBlueprintPieceType.OutTransition: {
85+
if (!outTransition) return undefined
86+
87+
const pieceEnable: TSR.Timeline.TimelineEnable = {
88+
start: `#${parentGroup.id}.end - ${outTransition.duration}`,
89+
}
90+
if (partTimings.toPartPostroll) {
91+
pieceEnable.start += ' - ' + partTimings.toPartPostroll
92+
}
93+
94+
return pieceEnable
95+
}
96+
case IBlueprintPieceType.Normal:
97+
return getPieceEnableInsidePart(
98+
pieceInstance,
99+
partTimings,
100+
parentGroup.id,
101+
parentGroup.enable.duration !== undefined || parentGroup.enable.end !== undefined
102+
)
103+
default:
104+
assertNever(pieceInstance.piece.pieceType)
105+
return undefined
106+
}
107+
}
108+
97109
export interface PartEnable {
98110
start: number | 'now' | string
99111
duration?: number

packages/job-worker/src/playout/timeline/pieceGroup.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,11 @@ export function createPieceGroupAndCap(
4242
partGroup?: TimelineObjRundown,
4343
pieceStartOffset?: number
4444
): {
45+
/** The 'control' object which defines the bounds of the group. This triggers the timing, and does not include and pre/postroll */
4546
controlObj: TimelineObjPieceAbstract & OnGenerateTimelineObjExt<PieceTimelineMetadata>
47+
/** The 'group' object that should contain all the content. This uses the control object for its timing, and adds the pre/postroll. */
4648
childGroup: TimelineObjGroupRundown & OnGenerateTimelineObjExt<PieceTimelineMetadata>
49+
/** Any additional objects which are used to determine points in time that the piece should start/end relative to. */
4750
capObjs: Array<TimelineObjRundown & OnGenerateTimelineObjExt<PieceTimelineMetadata>>
4851
} {
4952
const controlObj = literal<TimelineObjPieceAbstract & OnGenerateTimelineObjExt<PieceTimelineMetadata>>({

0 commit comments

Comments
 (0)