Skip to content

Commit 6cbf04c

Browse files
committed
wip: move some properties into the source
1 parent 120ea21 commit 6cbf04c

File tree

16 files changed

+204
-198
lines changed

16 files changed

+204
-198
lines changed

meteor/server/api/ingest/packageInfo.ts

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -25,28 +25,28 @@ export async function onUpdatedPackageInfo(packageId: ExpectedPackageId, _doc: P
2525
return
2626
}
2727

28-
if (pkg.package.listenToPackageInfoUpdates) {
29-
for (const source of pkg.ingestSources) {
30-
switch (source.fromPieceType) {
31-
case ExpectedPackageDBType.PIECE:
32-
case ExpectedPackageDBType.ADLIB_PIECE:
33-
case ExpectedPackageDBType.ADLIB_ACTION:
34-
case ExpectedPackageDBType.BASELINE_ADLIB_PIECE:
35-
case ExpectedPackageDBType.BASELINE_ADLIB_ACTION:
36-
case ExpectedPackageDBType.RUNDOWN_BASELINE_OBJECTS:
37-
onUpdatedPackageInfoForRundownDebounce(pkg)
38-
break
39-
case ExpectedPackageDBType.BUCKET_ADLIB:
40-
case ExpectedPackageDBType.BUCKET_ADLIB_ACTION:
41-
onUpdatedPackageInfoForBucketItemDebounce(pkg, source)
42-
break
43-
case ExpectedPackageDBType.STUDIO_BASELINE_OBJECTS:
44-
onUpdatedPackageInfoForStudioBaselineDebounce(pkg)
45-
break
46-
default:
47-
assertNever(source)
48-
break
49-
}
28+
for (const source of pkg.ingestSources) {
29+
if (!source.listenToPackageInfoUpdates) continue
30+
31+
switch (source.fromPieceType) {
32+
case ExpectedPackageDBType.PIECE:
33+
case ExpectedPackageDBType.ADLIB_PIECE:
34+
case ExpectedPackageDBType.ADLIB_ACTION:
35+
case ExpectedPackageDBType.BASELINE_ADLIB_PIECE:
36+
case ExpectedPackageDBType.BASELINE_ADLIB_ACTION:
37+
case ExpectedPackageDBType.RUNDOWN_BASELINE_OBJECTS:
38+
onUpdatedPackageInfoForRundownDebounce(pkg)
39+
break
40+
case ExpectedPackageDBType.BUCKET_ADLIB:
41+
case ExpectedPackageDBType.BUCKET_ADLIB_ACTION:
42+
onUpdatedPackageInfoForBucketItemDebounce(pkg, source)
43+
break
44+
case ExpectedPackageDBType.STUDIO_BASELINE_OBJECTS:
45+
onUpdatedPackageInfoForStudioBaselineDebounce(pkg)
46+
break
47+
default:
48+
assertNever(source)
49+
break
5050
}
5151
}
5252
}

meteor/server/migration/X_X_X.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ export const addSteps = addMigrationSteps(CURRENT_SYSTEM_VERSION, [
5555
pieceId: pkg.pieceId,
5656
partId: pkg.partId,
5757
segmentId: pkg.segmentId,
58+
blueprintPackageId: pkg.blueprintPackageId,
59+
listenToPackageInfoUpdates: pkg.listenToPackageInfoUpdates,
5860
}
5961
break
6062
case PackagesPreR53.ExpectedPackageDBType.ADLIB_ACTION:
@@ -64,26 +66,34 @@ export const addSteps = addMigrationSteps(CURRENT_SYSTEM_VERSION, [
6466
pieceId: pkg.pieceId,
6567
partId: pkg.partId,
6668
segmentId: pkg.segmentId,
69+
blueprintPackageId: pkg.blueprintPackageId,
70+
listenToPackageInfoUpdates: pkg.listenToPackageInfoUpdates,
6771
}
6872
break
6973
case PackagesPreR53.ExpectedPackageDBType.BASELINE_ADLIB_PIECE:
7074
rundownId = pkg.rundownId
7175
ingestSource = {
7276
fromPieceType: pkg.fromPieceType,
7377
pieceId: pkg.pieceId,
78+
blueprintPackageId: pkg.blueprintPackageId,
79+
listenToPackageInfoUpdates: pkg.listenToPackageInfoUpdates,
7480
}
7581
break
7682
case PackagesPreR53.ExpectedPackageDBType.BASELINE_ADLIB_ACTION:
7783
rundownId = pkg.rundownId
7884
ingestSource = {
7985
fromPieceType: pkg.fromPieceType,
8086
pieceId: pkg.pieceId,
87+
blueprintPackageId: pkg.blueprintPackageId,
88+
listenToPackageInfoUpdates: pkg.listenToPackageInfoUpdates,
8189
}
8290
break
8391
case PackagesPreR53.ExpectedPackageDBType.RUNDOWN_BASELINE_OBJECTS:
8492
rundownId = pkg.rundownId
8593
ingestSource = {
8694
fromPieceType: pkg.fromPieceType,
95+
blueprintPackageId: pkg.blueprintPackageId,
96+
listenToPackageInfoUpdates: pkg.listenToPackageInfoUpdates,
8797
}
8898
break
8999
case PackagesPreR53.ExpectedPackageDBType.BUCKET_ADLIB:
@@ -92,6 +102,8 @@ export const addSteps = addMigrationSteps(CURRENT_SYSTEM_VERSION, [
92102
fromPieceType: pkg.fromPieceType,
93103
pieceId: pkg.pieceId,
94104
pieceExternalId: pkg.pieceExternalId,
105+
blueprintPackageId: pkg.blueprintPackageId,
106+
listenToPackageInfoUpdates: pkg.listenToPackageInfoUpdates,
95107
}
96108
break
97109
case PackagesPreR53.ExpectedPackageDBType.BUCKET_ADLIB_ACTION:
@@ -100,11 +112,15 @@ export const addSteps = addMigrationSteps(CURRENT_SYSTEM_VERSION, [
100112
fromPieceType: pkg.fromPieceType,
101113
pieceId: pkg.pieceId,
102114
pieceExternalId: pkg.pieceExternalId,
115+
blueprintPackageId: pkg.blueprintPackageId,
116+
listenToPackageInfoUpdates: pkg.listenToPackageInfoUpdates,
103117
}
104118
break
105119
case PackagesPreR53.ExpectedPackageDBType.STUDIO_BASELINE_OBJECTS:
106120
ingestSource = {
107121
fromPieceType: pkg.fromPieceType,
122+
blueprintPackageId: pkg.blueprintPackageId,
123+
listenToPackageInfoUpdates: pkg.listenToPackageInfoUpdates,
108124
}
109125
break
110126
default:

packages/corelib/src/dataModel/ExpectedPackages.ts

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ export interface ExpectedPackageDB {
5151

5252
created: Time
5353

54-
package: ReadonlyDeep<ExpectedPackage.Any>
54+
package: ReadonlyDeep<Omit<ExpectedPackage.Base, 'listenToPackageInfoUpdates'>>
5555

5656
/**
5757
* The ingest sources that generated this package.
@@ -64,22 +64,30 @@ export interface ExpectedPackageDB {
6464
// }
6565
}
6666

67-
export interface ExpectedPackageIngestSourceBucketPiece {
67+
export interface ExpectedPackageIngestSourceBase {
68+
/** The id of the package as known by the blueprints */
69+
blueprintPackageId: string
70+
71+
/** Whether the blueprints are listening for updates to packageInfos for this package */
72+
listenToPackageInfoUpdates: boolean | undefined
73+
}
74+
75+
export interface ExpectedPackageIngestSourceBucketAdlibPiece extends ExpectedPackageIngestSourceBase {
6876
fromPieceType: ExpectedPackageDBType.BUCKET_ADLIB
6977
/** The Bucket adlib this package belongs to */
7078
pieceId: BucketAdLibId
7179
/** The `externalId` of the Bucket adlib this package belongs to */
7280
pieceExternalId: string
7381
}
74-
export interface ExpectedPackageIngestSourceBucketAdlibAction {
82+
export interface ExpectedPackageIngestSourceBucketAdlibAction extends ExpectedPackageIngestSourceBase {
7583
fromPieceType: ExpectedPackageDBType.BUCKET_ADLIB_ACTION
7684
/** The Bucket adlib-action this package belongs to */
7785
pieceId: BucketAdLibActionId
7886
/** The `externalId` of the Bucket adlib-action this package belongs to */
7987
pieceExternalId: string
8088
}
8189

82-
export interface ExpectedPackageIngestSourcePiece {
90+
export interface ExpectedPackageIngestSourcePiece extends ExpectedPackageIngestSourceBase {
8391
fromPieceType: ExpectedPackageDBType.PIECE | ExpectedPackageDBType.ADLIB_PIECE
8492
/** The Piece this package belongs to */
8593
pieceId: PieceId
@@ -88,7 +96,7 @@ export interface ExpectedPackageIngestSourcePiece {
8896
/** The Segment this package belongs to */
8997
segmentId: SegmentId
9098
}
91-
export interface ExpectedPackageIngestSourceAdlibAction {
99+
export interface ExpectedPackageIngestSourceAdlibAction extends ExpectedPackageIngestSourceBase {
92100
fromPieceType: ExpectedPackageDBType.ADLIB_ACTION
93101
/** The Piece this package belongs to */
94102
pieceId: AdLibActionId
@@ -97,29 +105,29 @@ export interface ExpectedPackageIngestSourceAdlibAction {
97105
/** The Segment this package belongs to */
98106
segmentId: SegmentId
99107
}
100-
export interface ExpectedPackageIngestSourceBaselineAdlibPiece {
108+
export interface ExpectedPackageIngestSourceBaselineAdlibPiece extends ExpectedPackageIngestSourceBase {
101109
fromPieceType: ExpectedPackageDBType.BASELINE_ADLIB_PIECE
102110
/** The Piece this package belongs to */
103111
pieceId: PieceId
104112
}
105-
export interface ExpectedPackageIngestSourceBaselineAdlibAction {
113+
export interface ExpectedPackageIngestSourceBaselineAdlibAction extends ExpectedPackageIngestSourceBase {
106114
fromPieceType: ExpectedPackageDBType.BASELINE_ADLIB_ACTION
107115
/** The Piece this package belongs to */
108116
pieceId: RundownBaselineAdLibActionId
109117
}
110-
export interface ExpectedPackageIngestSourceBaselineObjects {
118+
export interface ExpectedPackageIngestSourceBaselineObjects extends ExpectedPackageIngestSourceBase {
111119
fromPieceType: ExpectedPackageDBType.RUNDOWN_BASELINE_OBJECTS
112120
}
113121

114-
export interface ExpectedPackageIngestSourceStudioBaseline {
122+
export interface ExpectedPackageIngestSourceStudioBaseline extends ExpectedPackageIngestSourceBase {
115123
// Future: Technically this is a playout source, but for now it needs to be treated as an ingest source
116124
fromPieceType: ExpectedPackageDBType.STUDIO_BASELINE_OBJECTS
117125
}
118126

119127
export type ExpectedPackageIngestSourcePart = ExpectedPackageIngestSourcePiece | ExpectedPackageIngestSourceAdlibAction
120128

121129
export type ExpectedPackageIngestSourceBucket =
122-
| ExpectedPackageIngestSourceBucketPiece
130+
| ExpectedPackageIngestSourceBucketAdlibPiece
123131
| ExpectedPackageIngestSourceBucketAdlibAction
124132

125133
export type ExpectedPackageIngestSourceRundownBaseline =
@@ -154,13 +162,14 @@ export function getExpectedPackageIdNew(
154162
/** Preferably a RundownId or BucketId, but StudioId is allowed when not owned by a rundown or bucket */
155163
parentId: RundownId | StudioId | BucketId,
156164
/** The locally unique id of the expectedPackage */
157-
expectedPackage: ReadonlyDeep<ExpectedPackage.Any>
165+
expectedPackage: ReadonlyDeep<Omit<ExpectedPackage.Base, 'listenToPackageInfoUpdates'>>
158166
): ExpectedPackageId {
159167
// This may be too agressive, but we don't know how to merge some of the properties
160168
const objHash = hashObj({
161169
...expectedPackage,
170+
_id: '', // Ignore the _id, this is not guaranteed to be stable
162171
listenToPackageInfoUpdates: false, // Not relevant for the hash
163-
} satisfies ReadonlyDeep<ExpectedPackage.Any>)
172+
} satisfies ReadonlyDeep<ExpectedPackage.Base>)
164173

165174
return protectString(`${parentId}_${getHash(objHash)}`)
166175
}

packages/job-worker/src/blueprints/context/watchedPackages.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ export class WatchedPackagesHelper {
9999

100100
return this.#createFromPackages(
101101
context,
102-
packages.filter((pkg) => !!pkg.package.listenToPackageInfoUpdates)
102+
packages.filter((pkg) => !!pkg.source.listenToPackageInfoUpdates)
103103
)
104104
}
105105

@@ -127,7 +127,7 @@ export class WatchedPackagesHelper {
127127

128128
return this.#createFromPackages(
129129
context,
130-
packages.filter((pkg) => !!pkg.package.listenToPackageInfoUpdates)
130+
packages.filter((pkg) => !!pkg.source.listenToPackageInfoUpdates)
131131
)
132132
}
133133

@@ -170,11 +170,11 @@ export class WatchedPackagesHelper {
170170
return this.packages.has(packageId)
171171
}
172172

173-
getPackageInfo(packageId: string): Readonly<Array<PackageInfo.Any>> {
173+
getPackageInfo(blueprintPackageId: string): Readonly<Array<PackageInfo.Any>> {
174174
// nocommit - can this/should this do more scoping by source?
175175
for (const packages of this.packages.values()) {
176176
for (const pkg of packages) {
177-
if (pkg.package._id === packageId) {
177+
if (pkg.source.blueprintPackageId === blueprintPackageId) {
178178
const info = this.packageInfos.filter((p) => p.packageId === pkg.packageId)
179179
return unprotectObjectArray(info)
180180
}

packages/job-worker/src/blueprints/postProcess.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ import {
4040
interpollateTranslation,
4141
wrapTranslatableMessageFromBlueprints,
4242
} from '@sofie-automation/corelib/dist/TranslatableMessage'
43-
import { setDefaultIdOnExpectedPackages } from '../ingest/expectedPackages'
43+
import { sanitiseExpectedPackages } from '../ingest/expectedPackages'
4444
import { logger } from '../logging'
4545
import { validateTimeline } from 'superfly-timeline'
4646
import { ReadonlyDeep } from 'type-fest'
@@ -136,7 +136,7 @@ export function postProcessPieces(
136136
piece.timelineObjectsString = serializePieceTimelineObjectsBlob(timelineObjects)
137137

138138
// Fill in ids of unnamed expectedPackages
139-
setDefaultIdOnExpectedPackages(piece.expectedPackages)
139+
sanitiseExpectedPackages(piece.expectedPackages)
140140

141141
return piece
142142
})
@@ -266,7 +266,7 @@ export function postProcessAdLibPieces(
266266
piece.timelineObjectsString = serializePieceTimelineObjectsBlob(timelineObjects)
267267

268268
// Fill in ids of unnamed expectedPackages
269-
setDefaultIdOnExpectedPackages(piece.expectedPackages)
269+
sanitiseExpectedPackages(piece.expectedPackages)
270270

271271
return piece
272272
})
@@ -303,7 +303,7 @@ export function postProcessGlobalAdLibActions(
303303
)
304304

305305
// Fill in ids of unnamed expectedPackages
306-
setDefaultIdOnExpectedPackages(action.expectedPackages)
306+
sanitiseExpectedPackages(action.expectedPackages)
307307

308308
return literal<RundownBaselineAdLibAction>({
309309
...action,
@@ -344,7 +344,7 @@ export function postProcessAdLibActions(
344344
)
345345

346346
// Fill in ids of unnamed expectedPackages
347-
setDefaultIdOnExpectedPackages(action.expectedPackages)
347+
sanitiseExpectedPackages(action.expectedPackages)
348348

349349
return literal<AdLibAction>({
350350
...action,
@@ -424,7 +424,7 @@ export function postProcessBucketAdLib(
424424
timelineObjectsString: EmptyPieceTimelineObjectsBlob,
425425
}
426426
// Fill in ids of unnamed expectedPackages
427-
setDefaultIdOnExpectedPackages(piece.expectedPackages)
427+
sanitiseExpectedPackages(piece.expectedPackages)
428428

429429
const timelineObjects = postProcessTimelineObjects(piece._id, blueprintId, itemOrig.content.timelineObjects)
430430
piece.timelineObjectsString = serializePieceTimelineObjectsBlob(timelineObjects)
@@ -473,7 +473,7 @@ export function postProcessBucketAction(
473473
}
474474

475475
// Fill in ids of unnamed expectedPackages
476-
setDefaultIdOnExpectedPackages(action.expectedPackages)
476+
sanitiseExpectedPackages(action.expectedPackages)
477477

478478
return action
479479
}

packages/job-worker/src/ingest/expectedPackages.ts

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import {
55
ExpectedPackageDB,
66
ExpectedPackageIngestSource,
77
getExpectedPackageIdNew,
8+
ExpectedPackageIngestSourceBucketAdlibAction,
9+
ExpectedPackageIngestSourceBucketAdlibPiece,
810
} from '@sofie-automation/corelib/dist/dataModel/ExpectedPackages'
911
import { AdLibActionId, PieceId, BucketId } from '@sofie-automation/corelib/dist/dataModel/Ids'
1012
import { PlayoutModel } from '../playout/model/PlayoutModel'
@@ -42,7 +44,7 @@ function generateExpectedPackagesForBucketAdlib(studio: ReadonlyDeep<JobStudio>,
4244

4345
if (adlib.expectedPackages) {
4446
packages.push(
45-
...generateBucketExpectedPackages(
47+
...generateBucketExpectedPackages<ExpectedPackageIngestSourceBucketAdlibPiece>(
4648
studio,
4749
adlib.bucketId,
4850
{
@@ -62,7 +64,7 @@ function generateExpectedPackagesForBucketAdlibAction(studio: ReadonlyDeep<JobSt
6264

6365
if (action.expectedPackages) {
6466
packages.push(
65-
...generateBucketExpectedPackages(
67+
...generateBucketExpectedPackages<ExpectedPackageIngestSourceBucketAdlibAction>(
6668
studio,
6769
action.bucketId,
6870
{
@@ -77,10 +79,10 @@ function generateExpectedPackagesForBucketAdlibAction(studio: ReadonlyDeep<JobSt
7779

7880
return packages
7981
}
80-
function generateBucketExpectedPackages(
82+
function generateBucketExpectedPackages<TSource = never>(
8183
studio: ReadonlyDeep<JobStudio>,
8284
bucketId: BucketId,
83-
source: ExpectedPackageIngestSource,
85+
source: Omit<TSource, 'blueprintPackageId' | 'listenToPackageInfoUpdates'>,
8486
expectedPackages: ReadonlyDeep<ExpectedPackage.Any[]>
8587
): ExpectedPackageDB[] {
8688
const bases: ExpectedPackageDB[] = []
@@ -100,7 +102,13 @@ function generateBucketExpectedPackages(
100102
rundownId: null,
101103
bucketId: bucketId,
102104
created: Date.now(), // This will be preserved during the save if needed
103-
ingestSources: [source],
105+
ingestSources: [
106+
{
107+
...(source as any), // Because this is a generic, this spread doesnt work
108+
blueprintPackageId: expectedPackage._id,
109+
listenToPackageInfoUpdates: expectedPackage.listenToPackageInfoUpdates,
110+
},
111+
],
104112
})
105113
}
106114

@@ -273,15 +281,10 @@ export function updateBaselineExpectedPackagesOnStudio(
273281
playoutModel.setExpectedPackagesForStudioBaseline(baseline.expectedPackages ?? [])
274282
}
275283

276-
export function setDefaultIdOnExpectedPackages(expectedPackages: ExpectedPackage.Any[] | undefined): void {
284+
export function sanitiseExpectedPackages(expectedPackages: ExpectedPackage.Any[] | undefined): void {
277285
// Fill in ids of unnamed expectedPackage
278286
if (expectedPackages) {
279-
for (let i = 0; i < expectedPackages.length; i++) {
280-
const expectedPackage = expectedPackages[i]
281-
if (!expectedPackage._id) {
282-
expectedPackage._id = `__index${i}`
283-
}
284-
287+
for (const expectedPackage of expectedPackages) {
285288
expectedPackage.contentVersionHash = getContentVersionHash(expectedPackage)
286289
}
287290
}

0 commit comments

Comments
 (0)