@@ -2,7 +2,7 @@ import { PartInstanceId, RundownId, ShowStyleBaseId } from '@sofie-automation/co
22import { DBPart } from '@sofie-automation/corelib/dist/dataModel/Part'
33import { DBPartInstance } from '@sofie-automation/corelib/dist/dataModel/PartInstance'
44import { 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'
66import {
77 getPieceInstancesForPart as libgetPieceInstancesForPart ,
88 getPlayheadTrackingInfinitesForPart as libgetPlayheadTrackingInfinitesForPart ,
@@ -16,7 +16,7 @@ import { PlayoutModel } from './model/PlayoutModel'
1616import { PlayoutPartInstanceModel } from './model/PlayoutPartInstanceModel'
1717import { PlayoutSegmentModel } from './model/PlayoutSegmentModel'
1818import { getCurrentTime } from '../lib'
19- import { flatten } from '@sofie-automation/corelib/dist/lib'
19+ import { clone , flatten , getRandomId } from '@sofie-automation/corelib/dist/lib'
2020import _ = require( 'underscore' )
2121import { IngestModelReadonly } from '../ingest/model/IngestModel'
2222import { 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+ }
0 commit comments