Skip to content

Commit b2b7330

Browse files
committed
wip: create and propogate pieceinstances
1 parent e8d6902 commit b2b7330

File tree

2 files changed

+54
-3
lines changed

2 files changed

+54
-3
lines changed

packages/job-worker/src/playout/infinites.ts

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { PartInstanceId, RundownId, ShowStyleBaseId } from '@sofie-automation/co
22
import { DBPart } from '@sofie-automation/corelib/dist/dataModel/Part'
33
import { DBPartInstance } from '@sofie-automation/corelib/dist/dataModel/PartInstance'
44
import { Piece } from '@sofie-automation/corelib/dist/dataModel/Piece'
5-
import { PieceInstance } from '@sofie-automation/corelib/dist/dataModel/PieceInstance'
5+
import { PieceInstance, wrapPieceToInstance } from '@sofie-automation/corelib/dist/dataModel/PieceInstance'
66
import {
77
getPieceInstancesForPart as libgetPieceInstancesForPart,
88
getPlayheadTrackingInfinitesForPart as libgetPlayheadTrackingInfinitesForPart,
@@ -16,7 +16,7 @@ import { PlayoutModel } from './model/PlayoutModel'
1616
import { PlayoutPartInstanceModel } from './model/PlayoutPartInstanceModel'
1717
import { PlayoutSegmentModel } from './model/PlayoutSegmentModel'
1818
import { getCurrentTime } from '../lib'
19-
import { flatten } from '@sofie-automation/corelib/dist/lib'
19+
import { clone, flatten, getRandomId } from '@sofie-automation/corelib/dist/lib'
2020
import _ = require('underscore')
2121
import { IngestModelReadonly } from '../ingest/model/IngestModel'
2222
import { SegmentOrphanedReason } from '@sofie-automation/corelib/dist/dataModel/Segment'
@@ -282,6 +282,16 @@ export async function syncPlayheadInfinitesForNextPartInstance(
282282
)
283283

284284
toPartInstance.replaceInfinitesFromPreviousPlayhead(infinites)
285+
} else if (toPartInstance && !fromPartInstance) {
286+
// This is the first take of the rundown, ensure the baseline infinites are loaded
287+
const baselineInfinites = await getBaselineInfinitesForPart(
288+
context,
289+
playoutModel,
290+
toPartInstance.partInstance.part,
291+
toPartInstance.partInstance._id
292+
)
293+
294+
toPartInstance.replaceInfinitesFromPreviousPlayhead(baselineInfinites)
285295
}
286296
if (span) span.end()
287297
}
@@ -377,3 +387,35 @@ export function getPieceInstancesForPart(
377387
if (span) span.end()
378388
return res
379389
}
390+
391+
export async function getBaselineInfinitesForPart(
392+
context: JobContext,
393+
playoutModel: PlayoutModel,
394+
// unsavedIngestModel: Pick<IngestModelReadonly, 'rundownId' | 'getAllPieces'> | undefined,
395+
part: ReadonlyDeep<DBPart>,
396+
partInstanceId: PartInstanceId
397+
): Promise<PieceInstance[]> {
398+
// nocommit - will this ever need to consider an unsaved ingest model?
399+
400+
// Find the pieces
401+
const pieces = await context.directCollections.Pieces.findFetch({
402+
startRundownId: part.rundownId,
403+
startPartId: null,
404+
})
405+
406+
const playlistActivationId = playoutModel.playlist.activationId
407+
if (!playlistActivationId) throw new Error(`RundownPlaylist "${playoutModel.playlistId}" is not active`)
408+
409+
return pieces.map((piece) => {
410+
const instance = wrapPieceToInstance(clone<Piece>(piece), playlistActivationId, partInstanceId, false)
411+
412+
instance.infinite = {
413+
infiniteInstanceId: getRandomId(),
414+
infiniteInstanceIndex: 0,
415+
infinitePieceId: instance.piece._id,
416+
fromPreviousPart: true,
417+
}
418+
419+
return instance
420+
})
421+
}

packages/job-worker/src/playout/setNext.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { PlayoutPartInstanceModel } from './model/PlayoutPartInstanceModel'
88
import { PlayoutSegmentModel } from './model/PlayoutSegmentModel'
99
import {
1010
fetchPiecesThatMayBeActiveForPart,
11+
getBaselineInfinitesForPart,
1112
getPieceInstancesForPart,
1213
syncPlayheadInfinitesForNextPartInstance,
1314
} from './infinites'
@@ -288,6 +289,8 @@ async function preparePartInstanceForPartBeingNexted(
288289
const rundown = playoutModel.getRundown(nextPart.rundownId)
289290
if (!rundown) throw new Error(`Could not find rundown ${nextPart.rundownId}`)
290291

292+
const partInstanceId = protectString('') // Replaced inside playoutModel.createInstanceForPart
293+
291294
const possiblePieces = await fetchPiecesThatMayBeActiveForPart(context, playoutModel, undefined, nextPart)
292295
const newPieceInstances = getPieceInstancesForPart(
293296
context,
@@ -296,9 +299,15 @@ async function preparePartInstanceForPartBeingNexted(
296299
rundown,
297300
nextPart,
298301
possiblePieces,
299-
protectString('') // Replaced inside playoutModel.createInstanceForPart
302+
partInstanceId
300303
)
301304

305+
if (currentPartInstance === null) {
306+
// This is the first take of the rundown, ensure the baseline infinites are loaded
307+
const baselineInfinites = await getBaselineInfinitesForPart(context, playoutModel, nextPart, partInstanceId)
308+
newPieceInstances.push(...baselineInfinites)
309+
}
310+
302311
return playoutModel.createInstanceForPart(nextPart, newPieceInstances)
303312
}
304313

0 commit comments

Comments
 (0)