Skip to content

Commit 50ee2cd

Browse files
committed
Merge branch 'release50'
2 parents b700f56 + c48a483 commit 50ee2cd

Some content is hidden

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

61 files changed

+467
-280
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
@@ -138,7 +138,7 @@ export function defaultPart(_id: PartId, rundownId: RundownId, segmentId: Segmen
138138
_rank: 0,
139139
externalId: unprotectString(_id),
140140
title: 'Default Part',
141-
expectedDurationWithPreroll: undefined,
141+
expectedDurationWithTransition: undefined,
142142
}
143143
}
144144
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
@@ -662,7 +662,7 @@ export async function setupDefaultRundown(
662662
_rank: 0,
663663
externalId: 'MOCK_PART_0_0',
664664
title: 'Part 0 0',
665-
expectedDurationWithPreroll: undefined,
665+
expectedDurationWithTransition: undefined,
666666
}
667667
await Parts.mutableCollection.insertAsync(part00)
668668

@@ -730,7 +730,7 @@ export async function setupDefaultRundown(
730730
_rank: 1,
731731
externalId: 'MOCK_PART_0_1',
732732
title: 'Part 0 1',
733-
expectedDurationWithPreroll: undefined,
733+
expectedDurationWithTransition: undefined,
734734
}
735735
await Parts.mutableCollection.insertAsync(part01)
736736

@@ -771,7 +771,7 @@ export async function setupDefaultRundown(
771771
_rank: 0,
772772
externalId: 'MOCK_PART_1_0',
773773
title: 'Part 1 0',
774-
expectedDurationWithPreroll: undefined,
774+
expectedDurationWithTransition: undefined,
775775
}
776776
await Parts.mutableCollection.insertAsync(part10)
777777

@@ -782,7 +782,7 @@ export async function setupDefaultRundown(
782782
_rank: 1,
783783
externalId: 'MOCK_PART_1_1',
784784
title: 'Part 1 1',
785-
expectedDurationWithPreroll: undefined,
785+
expectedDurationWithTransition: undefined,
786786
}
787787
await Parts.mutableCollection.insertAsync(part11)
788788

@@ -793,7 +793,7 @@ export async function setupDefaultRundown(
793793
_rank: 2,
794794
externalId: 'MOCK_PART_1_2',
795795
title: 'Part 1 2',
796-
expectedDurationWithPreroll: undefined,
796+
expectedDurationWithTransition: undefined,
797797
}
798798
await Parts.mutableCollection.insertAsync(part12)
799799

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
@@ -36,7 +36,7 @@ import { FindOptions } from '../../lib/collections/lib'
3636
import { getShowHiddenSourceLayers } from './localStorage'
3737
import { Rundown } from '../../lib/collections/Rundowns'
3838
import { IStudioSettings } from '@sofie-automation/corelib/dist/dataModel/Studio'
39-
import { calculatePartInstanceExpectedDurationWithPreroll } from '@sofie-automation/corelib/dist/playout/timings'
39+
import { calculatePartInstanceExpectedDurationWithTransition } from '@sofie-automation/corelib/dist/playout/timings'
4040
import { AdLibPieceUi } from './shelf'
4141
import { UIShowStyleBase } from '../../lib/api/showStyles'
4242
import { PartId, PieceId, RundownId, SegmentId, ShowStyleBaseId } from '@sofie-automation/corelib/dist/dataModel/Ids'
@@ -63,7 +63,7 @@ export namespace RundownUtils {
6363
return (
6464
memo +
6565
(part.instance.timings?.duration ||
66-
calculatePartInstanceExpectedDurationWithPreroll(part.instance) ||
66+
calculatePartInstanceExpectedDurationWithTransition(part.instance) ||
6767
part.renderedDuration ||
6868
(display ? Settings.defaultDisplayDuration : 0))
6969
)
@@ -218,7 +218,7 @@ export namespace RundownUtils {
218218
? part.instance.timings.duration + (part.instance.timings?.playOffset || 0)
219219
: (partDuration ||
220220
part.renderedDuration ||
221-
calculatePartInstanceExpectedDurationWithPreroll(part.instance) ||
221+
calculatePartInstanceExpectedDurationWithTransition(part.instance) ||
222222
0) - (piece.renderedInPoint || 0)))
223223
: part.instance.timings?.duration !== undefined
224224
? part.instance.timings.duration + (part.instance.timings?.playOffset || 0)
@@ -422,7 +422,7 @@ export namespace RundownUtils {
422422
partsE = segmentInfo.partInstances.map((partInstance, itIndex) => {
423423
const partTimeline: SuperTimeline.TimelineObject[] = []
424424

425-
const partExpectedDuration = calculatePartInstanceExpectedDurationWithPreroll(partInstance)
425+
const partExpectedDuration = calculatePartInstanceExpectedDurationWithTransition(partInstance)
426426

427427
// extend objects to match the Extended interface
428428
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 { protectString, unprotectString } from '@sofie-automation/corelib/dist/protectedString'
1919
import {
2020
findPartInstanceInMapOrWrapToTemporary,
@@ -211,7 +211,7 @@ export class RundownTimingCalculator {
211211
// if the Part is using budgetDuration, this budget is calculated when going through all the segments
212212
// in the Rundown (see further down)
213213
if (!segmentUsesBudget && !partIsUntimed) {
214-
totalRundownDuration += calculatePartInstanceExpectedDurationWithPreroll(partInstance) || 0
214+
totalRundownDuration += calculatePartInstanceExpectedDurationWithTransition(partInstance) || 0
215215
}
216216

217217
const lastStartedPlayback = partInstance.timings?.plannedStartedPlayback
@@ -225,7 +225,7 @@ export class RundownTimingCalculator {
225225
let displayDurationFromGroup = 0
226226

227227
partExpectedDuration =
228-
calculatePartInstanceExpectedDurationWithPreroll(partInstance) ||
228+
calculatePartInstanceExpectedDurationWithTransition(partInstance) ||
229229
partInstance.timings?.duration ||
230230
0
231231

@@ -248,7 +248,7 @@ export class RundownTimingCalculator {
248248
) {
249249
this.displayDurationGroups[partInstance.part.displayDurationGroup] =
250250
(this.displayDurationGroups[partInstance.part.displayDurationGroup] || 0) +
251-
(calculatePartInstanceExpectedDurationWithPreroll(partInstance) || 0)
251+
(calculatePartInstanceExpectedDurationWithTransition(partInstance) || 0)
252252
displayDurationFromGroup =
253253
partInstance.part.displayDuration ||
254254
Math.max(
@@ -272,7 +272,7 @@ export class RundownTimingCalculator {
272272
: undefined)
273273
partDuration =
274274
Math.max(
275-
duration || calculatePartInstanceExpectedDurationWithPreroll(partInstance) || 0,
275+
duration || calculatePartInstanceExpectedDurationWithTransition(partInstance) || 0,
276276
now - lastStartedPlayback
277277
) - playOffset
278278
// because displayDurationGroups have no actual timing on them, we need to have a copy of the
@@ -282,7 +282,7 @@ export class RundownTimingCalculator {
282282
duration ||
283283
(memberOfDisplayDurationGroup
284284
? displayDurationFromGroup
285-
: calculatePartInstanceExpectedDurationWithPreroll(partInstance)) ||
285+
: calculatePartInstanceExpectedDurationWithTransition(partInstance)) ||
286286
defaultDuration
287287
partDisplayDuration = Math.max(partDisplayDurationNoPlayback, now - lastStartedPlayback)
288288
this.partPlayed[unprotectString(partInstance.part._id)] = now - lastStartedPlayback
@@ -304,23 +304,23 @@ export class RundownTimingCalculator {
304304
(duration ||
305305
(memberOfDisplayDurationGroup
306306
? displayDurationFromGroup
307-
: calculatePartInstanceExpectedDurationWithPreroll(partInstance)) ||
307+
: calculatePartInstanceExpectedDurationWithTransition(partInstance)) ||
308308
0) -
309309
(now - lastStartedPlayback)
310310
)
311311
}
312312
} else {
313313
partDuration =
314314
(partInstance.timings?.duration ||
315-
calculatePartInstanceExpectedDurationWithPreroll(partInstance) ||
315+
calculatePartInstanceExpectedDurationWithTransition(partInstance) ||
316316
0) - playOffset
317317
partDisplayDurationNoPlayback = Math.max(
318318
0,
319319
(partInstance.timings?.duration && partInstance.timings?.duration + playOffset) ||
320320
displayDurationFromGroup ||
321321
ensureMinimumDefaultDurationIfNotAuto(
322322
partInstance,
323-
calculatePartInstanceExpectedDurationWithPreroll(partInstance),
323+
calculatePartInstanceExpectedDurationWithTransition(partInstance),
324324
defaultDuration
325325
)
326326
)
@@ -344,7 +344,7 @@ export class RundownTimingCalculator {
344344
valToAddToAsPlayedDuration = partInstance.timings.duration
345345
} else if (partCounts) {
346346
valToAddToAsPlayedDuration =
347-
calculatePartInstanceExpectedDurationWithPreroll(partInstance) || 0
347+
calculatePartInstanceExpectedDurationWithTransition(partInstance) || 0
348348
}
349349

350350
asPlayedRundownDuration += valToAddToAsPlayedDuration
@@ -381,15 +381,15 @@ export class RundownTimingCalculator {
381381
memberOfDisplayDurationGroup
382382
? Math.max(
383383
partExpectedDuration,
384-
calculatePartInstanceExpectedDurationWithPreroll(partInstance) || 0
384+
calculatePartInstanceExpectedDurationWithTransition(partInstance) || 0
385385
)
386-
: calculatePartInstanceExpectedDurationWithPreroll(partInstance) || 0,
386+
: calculatePartInstanceExpectedDurationWithTransition(partInstance) || 0,
387387
now - lastStartedPlayback
388388
)
389389
} else {
390390
asDisplayedRundownDuration +=
391391
partInstance.timings?.duration ||
392-
calculatePartInstanceExpectedDurationWithPreroll(partInstance) ||
392+
calculatePartInstanceExpectedDurationWithTransition(partInstance) ||
393393
0
394394
}
395395

@@ -433,12 +433,12 @@ export class RundownTimingCalculator {
433433
waitDuration =
434434
partInstance.timings?.duration ||
435435
partDisplayDuration ||
436-
calculatePartInstanceExpectedDurationWithPreroll(partInstance) ||
436+
calculatePartInstanceExpectedDurationWithTransition(partInstance) ||
437437
0
438438
} else {
439439
waitDuration =
440440
partInstance.timings?.duration ||
441-
calculatePartInstanceExpectedDurationWithPreroll(partInstance) ||
441+
calculatePartInstanceExpectedDurationWithTransition(partInstance) ||
442442
0
443443
}
444444
if (segmentUsesBudget) {
@@ -462,7 +462,8 @@ export class RundownTimingCalculator {
462462
// this needs to use partInstance.part.expectedDuration as opposed to partExpectedDuration, because
463463
// partExpectedDuration is affected by displayGroups, and if it hasn't played yet then it shouldn't
464464
// add any duration to the "remaining" time pool
465-
remainingRundownDuration += calculatePartInstanceExpectedDurationWithPreroll(partInstance) || 0
465+
remainingRundownDuration +=
466+
calculatePartInstanceExpectedDurationWithTransition(partInstance) || 0
466467
// item is onAir right now, and it's is currently shorter than expectedDuration
467468
} else if (
468469
lastStartedPlayback &&
@@ -599,7 +600,7 @@ export class RundownTimingCalculator {
599600

600601
let onAirPartDuration =
601602
currentLivePartInstance.timings?.duration ||
602-
calculatePartInstanceExpectedDurationWithPreroll(currentLivePartInstance) ||
603+
calculatePartInstanceExpectedDurationWithTransition(currentLivePartInstance) ||
603604
0
604605
if (
605606
currentLivePart.displayDurationGroup &&

meteor/client/ui/ClockView/PresenterScreen.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ import { DBShowStyleVariant } from '@sofie-automation/corelib/dist/dataModel/Sho
3232
import { RundownLayoutsAPI } from '../../../lib/api/rundownLayouts'
3333
import { ShelfDashboardLayout } from '../Shelf/ShelfDashboardLayout'
3434
import { parse as queryStringParse } from 'query-string'
35-
import { calculatePartInstanceExpectedDurationWithPreroll } from '@sofie-automation/corelib/dist/playout/timings'
35+
import { calculatePartInstanceExpectedDurationWithTransition } from '@sofie-automation/corelib/dist/playout/timings'
3636
import { getPlaylistTimingDiff } from '../../lib/rundownTiming'
3737
import { UIShowStyleBase } from '../../../lib/api/showStyles'
3838
import { UIShowStyleBases, UIStudios } from '../Collections'
@@ -467,7 +467,7 @@ export class PresenterScreenBase extends MeteorReactComponent<
467467
showStyleBaseId={currentShowStyleBaseId}
468468
rundownIds={this.props.rundownIds}
469469
partAutoNext={currentPart.instance.part.autoNext || false}
470-
partExpectedDuration={calculatePartInstanceExpectedDurationWithPreroll(currentPart.instance)}
470+
partExpectedDuration={calculatePartInstanceExpectedDurationWithTransition(currentPart.instance)}
471471
partStartedPlayback={currentPart.instance.timings?.plannedStartedPlayback}
472472
playlistActivationId={this.props.playlist?.activationId}
473473
/>

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

1010
interface ISegmentDurationProps {
@@ -45,7 +45,7 @@ export const SegmentDuration = withTiming<ISegmentDurationProps, {}>()(function
4545
budget +=
4646
part.instance.orphaned || part.instance.part.untimed
4747
? 0
48-
: calculatePartInstanceExpectedDurationWithPreroll(part.instance) || 0
48+
: calculatePartInstanceExpectedDurationWithTransition(part.instance) || 0
4949
})
5050
}
5151
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'
@@ -135,8 +135,8 @@ export const MicSourceRenderer = withTranslation()(
135135
_forceSizingRecheck = true
136136
}
137137

138-
const expectedDuration = calculatePartInstanceExpectedDurationWithPreroll(this.props.part.instance)
139-
const prevExpectedDuration = calculatePartInstanceExpectedDurationWithPreroll(prevProps.part.instance)
138+
const expectedDuration = calculatePartInstanceExpectedDurationWithTransition(this.props.part.instance)
139+
const prevExpectedDuration = calculatePartInstanceExpectedDurationWithTransition(prevProps.part.instance)
140140

141141
if (
142142
!_forceSizingRecheck &&

meteor/client/ui/SegmentTimeline/SegmentTimeline.tsx

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

0 commit comments

Comments
 (0)