Skip to content

Commit 54da786

Browse files
committed
Merge branch 'release50' into release51
2 parents bf48f17 + c48a483 commit 54da786

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+400
-201
lines changed

meteor/CHANGELOG.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,23 @@
22

33
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
44

5+
### [1.50.4](///compare/v1.50.3...v1.50.4) (2024-08-08)
6+
7+
8+
### Bug Fixes
9+
10+
* compensate for piece preroll for adlibbed pieces SOFIE-3369 ([#1236](undefined/undefined/undefined/issues/1236)) c8f7c42
11+
* rundown timing drifting when playing parts with preroll SOFIE-3291 ([#1234](undefined/undefined/undefined/issues/1234)) a444857
12+
* unexpected timeline updates while playing final part in rundown SOFIE-3371 ([#1237](undefined/undefined/undefined/issues/1237)) 393f0c1
13+
14+
### [1.50.3](https://github.com/nrkno/sofie-core/compare/v1.50.2...v1.50.3) (2024-06-24)
15+
16+
17+
### Bug Fixes
18+
19+
* **DashboardPieceButton:** hover previews are not positioned correctly ([89fd219](https://github.com/nrkno/sofie-core/commit/89fd219d57fb775ed140ed2eaf5326a80194661f))
20+
* input gateway devices lose rundown actions on reset SOFIE-3134 ([#1190](https://github.com/nrkno/sofie-core/issues/1190)) ([aa69e5d](https://github.com/nrkno/sofie-core/commit/aa69e5d2df512f0e79bb1ada51ed61560258c0cd))
21+
522
### [1.50.2](///compare/v1.49.6...v1.50.2) (2024-05-15)
623

724

meteor/__mocks__/defaultCollectionObjects.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ export function defaultPart(_id: PartId, rundownId: RundownId, segmentId: Segmen
142142
_rank: 0,
143143
externalId: unprotectString(_id),
144144
title: 'Default Part',
145-
expectedDurationWithPreroll: undefined,
145+
expectedDurationWithTransition: undefined,
146146
}
147147
}
148148
export function defaultPiece(_id: PieceId, rundownId: RundownId, segmentId: SegmentId, partId: PartId): Piece {

meteor/__mocks__/helpers/database.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -666,7 +666,7 @@ export async function setupDefaultRundown(
666666
_rank: 0,
667667
externalId: 'MOCK_PART_0_0',
668668
title: 'Part 0 0',
669-
expectedDurationWithPreroll: undefined,
669+
expectedDurationWithTransition: undefined,
670670
}
671671
await Parts.mutableCollection.insertAsync(part00)
672672

@@ -734,7 +734,7 @@ export async function setupDefaultRundown(
734734
_rank: 1,
735735
externalId: 'MOCK_PART_0_1',
736736
title: 'Part 0 1',
737-
expectedDurationWithPreroll: undefined,
737+
expectedDurationWithTransition: undefined,
738738
}
739739
await Parts.mutableCollection.insertAsync(part01)
740740

@@ -775,7 +775,7 @@ export async function setupDefaultRundown(
775775
_rank: 0,
776776
externalId: 'MOCK_PART_1_0',
777777
title: 'Part 1 0',
778-
expectedDurationWithPreroll: undefined,
778+
expectedDurationWithTransition: undefined,
779779
}
780780
await Parts.mutableCollection.insertAsync(part10)
781781

@@ -786,7 +786,7 @@ export async function setupDefaultRundown(
786786
_rank: 1,
787787
externalId: 'MOCK_PART_1_1',
788788
title: 'Part 1 1',
789-
expectedDurationWithPreroll: undefined,
789+
expectedDurationWithTransition: undefined,
790790
}
791791
await Parts.mutableCollection.insertAsync(part11)
792792

@@ -797,7 +797,7 @@ export async function setupDefaultRundown(
797797
_rank: 2,
798798
externalId: 'MOCK_PART_1_2',
799799
title: 'Part 1 2',
800-
expectedDurationWithPreroll: undefined,
800+
expectedDurationWithTransition: undefined,
801801
}
802802
await Parts.mutableCollection.insertAsync(part12)
803803

meteor/client/lib/__tests__/rundownTiming.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ function makeMockPart(
5050
_rank: rank,
5151
rundownId: protectString(rundownId),
5252
...durations,
53-
expectedDurationWithPreroll: durations.expectedDuration,
53+
expectedDurationWithTransition: durations.expectedDuration,
5454
})
5555
}
5656

meteor/client/lib/rundown.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ import { FindOptions } from '../../lib/collections/lib'
3535
import { getShowHiddenSourceLayers } from './localStorage'
3636
import { Rundown } from '@sofie-automation/corelib/dist/dataModel/Rundown'
3737
import { IStudioSettings } from '@sofie-automation/corelib/dist/dataModel/Studio'
38-
import { calculatePartInstanceExpectedDurationWithPreroll } from '@sofie-automation/corelib/dist/playout/timings'
38+
import { calculatePartInstanceExpectedDurationWithTransition } from '@sofie-automation/corelib/dist/playout/timings'
3939
import { AdLibPieceUi } from './shelf'
4040
import { UIShowStyleBase } from '../../lib/api/showStyles'
4141
import { PartId, PieceId, RundownId, SegmentId, ShowStyleBaseId } from '@sofie-automation/corelib/dist/dataModel/Ids'
@@ -58,7 +58,7 @@ export namespace RundownUtils {
5858
return (
5959
memo +
6060
(part.instance.timings?.duration ||
61-
calculatePartInstanceExpectedDurationWithPreroll(part.instance) ||
61+
calculatePartInstanceExpectedDurationWithTransition(part.instance) ||
6262
part.renderedDuration ||
6363
(display ? Settings.defaultDisplayDuration : 0))
6464
)
@@ -213,7 +213,7 @@ export namespace RundownUtils {
213213
? part.instance.timings.duration + (part.instance.timings?.playOffset || 0)
214214
: (partDuration ||
215215
part.renderedDuration ||
216-
calculatePartInstanceExpectedDurationWithPreroll(part.instance) ||
216+
calculatePartInstanceExpectedDurationWithTransition(part.instance) ||
217217
0) - (piece.renderedInPoint || 0)))
218218
: part.instance.timings?.duration !== undefined
219219
? part.instance.timings.duration + (part.instance.timings?.playOffset || 0)
@@ -414,7 +414,7 @@ export namespace RundownUtils {
414414
const showHiddenSourceLayers = getShowHiddenSourceLayers()
415415

416416
partsE = segmentInfo.partInstances.map((partInstance, itIndex) => {
417-
const partExpectedDuration = calculatePartInstanceExpectedDurationWithPreroll(partInstance)
417+
const partExpectedDuration = calculatePartInstanceExpectedDurationWithTransition(partInstance)
418418

419419
// extend objects to match the Extended interface
420420
const partE = literal<PartExtended>({

meteor/client/lib/rundownTiming.ts

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
import { PartId, PartInstanceId, SegmentId } from '@sofie-automation/corelib/dist/dataModel/Ids'
1515
import { literal } from '@sofie-automation/corelib/dist/lib'
1616
import { PlaylistTiming } from '@sofie-automation/corelib/dist/playout/rundownTiming'
17-
import { calculatePartInstanceExpectedDurationWithPreroll } from '@sofie-automation/corelib/dist/playout/timings'
17+
import { calculatePartInstanceExpectedDurationWithTransition } from '@sofie-automation/corelib/dist/playout/timings'
1818
import { unprotectString } from '@sofie-automation/corelib/dist/protectedString'
1919
import { PartInstance } from '../../lib/collections/PartInstances'
2020
import { DBPart } from '@sofie-automation/corelib/dist/dataModel/Part'
@@ -216,7 +216,7 @@ export class RundownTimingCalculator {
216216
// if the Part is using budgetDuration, this budget is calculated when going through all the segments
217217
// in the Rundown (see further down)
218218
if (!segmentUsesBudget && !partIsUntimed) {
219-
totalRundownDuration += calculatePartInstanceExpectedDurationWithPreroll(partInstance) || 0
219+
totalRundownDuration += calculatePartInstanceExpectedDurationWithTransition(partInstance) || 0
220220
}
221221

222222
const lastStartedPlayback = partInstance.timings?.plannedStartedPlayback
@@ -230,7 +230,7 @@ export class RundownTimingCalculator {
230230
let displayDurationFromGroup = 0
231231

232232
partExpectedDuration =
233-
calculatePartInstanceExpectedDurationWithPreroll(partInstance) ||
233+
calculatePartInstanceExpectedDurationWithTransition(partInstance) ||
234234
partInstance.timings?.duration ||
235235
0
236236

@@ -254,7 +254,7 @@ export class RundownTimingCalculator {
254254
) {
255255
this.displayDurationGroups[partInstance.part.displayDurationGroup] =
256256
(this.displayDurationGroups[partInstance.part.displayDurationGroup] || 0) +
257-
(calculatePartInstanceExpectedDurationWithPreroll(partInstance) || 0)
257+
(calculatePartInstanceExpectedDurationWithTransition(partInstance) || 0)
258258
displayDurationFromGroup =
259259
partInstance.part.displayDuration ||
260260
Math.max(
@@ -278,7 +278,7 @@ export class RundownTimingCalculator {
278278
: undefined)
279279
partDuration =
280280
Math.max(
281-
duration || calculatePartInstanceExpectedDurationWithPreroll(partInstance) || 0,
281+
duration || calculatePartInstanceExpectedDurationWithTransition(partInstance) || 0,
282282
now - lastStartedPlayback
283283
) - playOffset
284284
// because displayDurationGroups have no actual timing on them, we need to have a copy of the
@@ -288,7 +288,7 @@ export class RundownTimingCalculator {
288288
duration ||
289289
(memberOfDisplayDurationGroup
290290
? displayDurationFromGroup
291-
: calculatePartInstanceExpectedDurationWithPreroll(partInstance)) ||
291+
: calculatePartInstanceExpectedDurationWithTransition(partInstance)) ||
292292
defaultDuration
293293
partDisplayDuration = Math.max(partDisplayDurationNoPlayback, now - lastStartedPlayback)
294294
this.partPlayed[partInstanceOrPartId] = now - lastStartedPlayback
@@ -310,23 +310,23 @@ export class RundownTimingCalculator {
310310
(duration ||
311311
(memberOfDisplayDurationGroup
312312
? displayDurationFromGroup
313-
: calculatePartInstanceExpectedDurationWithPreroll(partInstance)) ||
313+
: calculatePartInstanceExpectedDurationWithTransition(partInstance)) ||
314314
0) -
315315
(now - lastStartedPlayback)
316316
)
317317
}
318318
} else {
319319
partDuration =
320320
(partInstance.timings?.duration ||
321-
calculatePartInstanceExpectedDurationWithPreroll(partInstance) ||
321+
calculatePartInstanceExpectedDurationWithTransition(partInstance) ||
322322
0) - playOffset
323323
partDisplayDurationNoPlayback = Math.max(
324324
0,
325325
(partInstance.timings?.duration && partInstance.timings?.duration + playOffset) ||
326326
displayDurationFromGroup ||
327327
ensureMinimumDefaultDurationIfNotAuto(
328328
partInstance,
329-
calculatePartInstanceExpectedDurationWithPreroll(partInstance),
329+
calculatePartInstanceExpectedDurationWithTransition(partInstance),
330330
defaultDuration
331331
)
332332
)
@@ -349,7 +349,7 @@ export class RundownTimingCalculator {
349349
valToAddToAsPlayedDuration = partInstance.timings.duration
350350
} else if (partCounts) {
351351
valToAddToAsPlayedDuration =
352-
calculatePartInstanceExpectedDurationWithPreroll(partInstance) || 0
352+
calculatePartInstanceExpectedDurationWithTransition(partInstance) || 0
353353
}
354354

355355
asPlayedRundownDuration += valToAddToAsPlayedDuration
@@ -386,15 +386,15 @@ export class RundownTimingCalculator {
386386
memberOfDisplayDurationGroup
387387
? Math.max(
388388
partExpectedDuration,
389-
calculatePartInstanceExpectedDurationWithPreroll(partInstance) || 0
389+
calculatePartInstanceExpectedDurationWithTransition(partInstance) || 0
390390
)
391-
: calculatePartInstanceExpectedDurationWithPreroll(partInstance) || 0,
391+
: calculatePartInstanceExpectedDurationWithTransition(partInstance) || 0,
392392
now - lastStartedPlayback
393393
)
394394
} else {
395395
asDisplayedRundownDuration +=
396396
partInstance.timings?.duration ||
397-
calculatePartInstanceExpectedDurationWithPreroll(partInstance) ||
397+
calculatePartInstanceExpectedDurationWithTransition(partInstance) ||
398398
0
399399
}
400400

@@ -437,12 +437,12 @@ export class RundownTimingCalculator {
437437
waitDuration =
438438
partInstance.timings?.duration ||
439439
partDisplayDuration ||
440-
calculatePartInstanceExpectedDurationWithPreroll(partInstance) ||
440+
calculatePartInstanceExpectedDurationWithTransition(partInstance) ||
441441
0
442442
} else {
443443
waitDuration =
444444
partInstance.timings?.duration ||
445-
calculatePartInstanceExpectedDurationWithPreroll(partInstance) ||
445+
calculatePartInstanceExpectedDurationWithTransition(partInstance) ||
446446
0
447447
}
448448
if (segmentUsesBudget) {
@@ -466,7 +466,8 @@ export class RundownTimingCalculator {
466466
// this needs to use partInstance.part.expectedDuration as opposed to partExpectedDuration, because
467467
// partExpectedDuration is affected by displayGroups, and if it hasn't played yet then it shouldn't
468468
// add any duration to the "remaining" time pool
469-
remainingRundownDuration += calculatePartInstanceExpectedDurationWithPreroll(partInstance) || 0
469+
remainingRundownDuration +=
470+
calculatePartInstanceExpectedDurationWithTransition(partInstance) || 0
470471
// item is onAir right now, and it's is currently shorter than expectedDuration
471472
} else if (
472473
lastStartedPlayback &&
@@ -605,7 +606,7 @@ export class RundownTimingCalculator {
605606

606607
let onAirPartDuration =
607608
currentLivePartInstance.timings?.duration ||
608-
calculatePartInstanceExpectedDurationWithPreroll(currentLivePartInstance) ||
609+
calculatePartInstanceExpectedDurationWithTransition(currentLivePartInstance) ||
609610
0
610611
if (
611612
currentLivePart.displayDurationGroup &&

meteor/client/ui/ClockView/PresenterScreen.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import { DBShowStyleVariant } from '@sofie-automation/corelib/dist/dataModel/Sho
3030
import { RundownLayoutsAPI } from '../../../lib/api/rundownLayouts'
3131
import { ShelfDashboardLayout } from '../Shelf/ShelfDashboardLayout'
3232
import { parse as queryStringParse } from 'query-string'
33-
import { calculatePartInstanceExpectedDurationWithPreroll } from '@sofie-automation/corelib/dist/playout/timings'
33+
import { calculatePartInstanceExpectedDurationWithTransition } from '@sofie-automation/corelib/dist/playout/timings'
3434
import { getPlaylistTimingDiff } from '../../lib/rundownTiming'
3535
import { UIShowStyleBase } from '../../../lib/api/showStyles'
3636
import { UIShowStyleBases, UIStudios } from '../Collections'
@@ -465,7 +465,9 @@ function PresenterScreenContentDefaultLayout({
465465
showStyleBaseId={currentShowStyleBaseId}
466466
rundownIds={rundownIds}
467467
partAutoNext={currentPartInstance.instance.part.autoNext || false}
468-
partExpectedDuration={calculatePartInstanceExpectedDurationWithPreroll(currentPartInstance.instance)}
468+
partExpectedDuration={calculatePartInstanceExpectedDurationWithTransition(
469+
currentPartInstance.instance
470+
)}
469471
partStartedPlayback={currentPartInstance.instance.timings?.plannedStartedPlayback}
470472
playlistActivationId={playlist?.activationId}
471473
/>

meteor/client/ui/RundownView/RundownTiming/SegmentDuration.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { withTiming, WithTiming } from './withTiming'
44
import { unprotectString } from '../../../../lib/lib'
55
import { RundownUtils } from '../../../lib/rundown'
66
import { PartUi } from '../../SegmentTimeline/SegmentTimelineContainer'
7-
import { calculatePartInstanceExpectedDurationWithPreroll } from '@sofie-automation/corelib/dist/playout/timings'
7+
import { calculatePartInstanceExpectedDurationWithTransition } from '@sofie-automation/corelib/dist/playout/timings'
88
import { SegmentId } from '@sofie-automation/corelib/dist/dataModel/Ids'
99
import { getPartInstanceTimingId } from '../../../lib/rundownTiming'
1010

@@ -46,7 +46,7 @@ export const SegmentDuration = withTiming<ISegmentDurationProps, {}>()(function
4646
budget +=
4747
part.instance.orphaned || part.instance.part.untimed
4848
? 0
49-
: calculatePartInstanceExpectedDurationWithPreroll(part.instance) || 0
49+
: calculatePartInstanceExpectedDurationWithTransition(part.instance) || 0
5050
})
5151
}
5252
props.parts.forEach((part) => {

meteor/client/ui/SegmentTimeline/Renderers/MicSourceRenderer.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import * as _ from 'underscore'
88

99
import { getElementWidth } from '../../../utils/dimensions'
1010
import { MicFloatingInspector } from '../../FloatingInspectors/MicFloatingInspector'
11-
import { calculatePartInstanceExpectedDurationWithPreroll } from '@sofie-automation/corelib/dist/playout/timings'
11+
import { calculatePartInstanceExpectedDurationWithTransition } from '@sofie-automation/corelib/dist/playout/timings'
1212
import { unprotectString } from '../../../../lib/lib'
1313
import { IFloatingInspectorPosition } from '../../FloatingInspectors/IFloatingInspectorPosition'
1414
import { logger } from '../../../../lib/logging'
@@ -137,8 +137,8 @@ export const MicSourceRenderer = withTranslation()(
137137
_forceSizingRecheck = true
138138
}
139139

140-
const expectedDuration = calculatePartInstanceExpectedDurationWithPreroll(this.props.part.instance)
141-
const prevExpectedDuration = calculatePartInstanceExpectedDurationWithPreroll(prevProps.part.instance)
140+
const expectedDuration = calculatePartInstanceExpectedDurationWithTransition(this.props.part.instance)
141+
const prevExpectedDuration = calculatePartInstanceExpectedDurationWithTransition(prevProps.part.instance)
142142

143143
if (
144144
!_forceSizingRecheck &&

meteor/client/ui/SegmentTimeline/SegmentTimeline.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ export const BUDGET_GAP_PART = {
229229
gap: true,
230230
title: 'gap',
231231
invalid: true,
232-
expectedDurationWithPreroll: undefined,
232+
expectedDurationWithTransition: undefined,
233233
}),
234234
pieces: [],
235235
renderedDuration: 0,

0 commit comments

Comments
 (0)