Skip to content

Commit 336d5dd

Browse files
committed
wip
1 parent 8d84eef commit 336d5dd

File tree

5 files changed

+78
-59
lines changed

5 files changed

+78
-59
lines changed

meteor/server/api/__tests__/cleanup.test.ts

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ async function setDefaultDatatoDB(env: DefaultEnvironment, now: number) {
193193
startSegmentId: segmentId,
194194
timelineObjectsString: '' as any,
195195
}
196-
const pieceId = await Pieces.mutableCollection.insertAsync(piece)
196+
await Pieces.mutableCollection.insertAsync(piece)
197197

198198
await AdLibActions.mutableCollection.insertAsync({
199199
_id: getRandomId(),
@@ -256,21 +256,13 @@ async function setDefaultDatatoDB(env: DefaultEnvironment, now: number) {
256256
})
257257
const packageId = await ExpectedPackages.mutableCollection.insertAsync({
258258
_id: getRandomId(),
259-
blueprintPackageId: '',
260-
bucketId,
261-
content: {} as any,
259+
studioId,
260+
rundownId,
261+
bucketId: null,
262262
contentVersionHash: '',
263263
created: 0,
264-
fromPieceType: '' as any,
265-
layers: [],
266-
pieceId,
267-
rundownId,
268-
segmentId,
269-
sideEffect: {} as any,
270-
studioId,
271-
sources: {} as any,
272-
type: '' as any,
273-
version: {} as any,
264+
package: {} as any,
265+
ingestSources: [] as any,
274266
})
275267
await ExpectedPackageWorkStatuses.insertAsync({
276268
_id: getRandomId(),

meteor/server/api/ingest/packageInfo.ts

Lines changed: 59 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
import { ExpectedPackageDBType, ExpectedPackageDBNew } from '@sofie-automation/corelib/dist/dataModel/ExpectedPackages'
1+
import {
2+
ExpectedPackageDBType,
3+
ExpectedPackageDBNew,
4+
ExpectedPackageIngestSourceBucket,
5+
} from '@sofie-automation/corelib/dist/dataModel/ExpectedPackages'
26
import { PackageInfoDB } from '@sofie-automation/corelib/dist/dataModel/PackageInfos'
37
import { ExpectedPackages, Rundowns } from '../../collections'
48
import { assertNever } from '../../lib/tempLib'
@@ -21,51 +25,58 @@ export async function onUpdatedPackageInfo(packageId: ExpectedPackageId, _doc: P
2125
return
2226
}
2327

24-
if (pkg.listenToPackageInfoUpdates) {
25-
switch (pkg.fromPieceType) {
26-
case ExpectedPackageDBType.PIECE:
27-
case ExpectedPackageDBType.ADLIB_PIECE:
28-
case ExpectedPackageDBType.ADLIB_ACTION:
29-
case ExpectedPackageDBType.BASELINE_ADLIB_PIECE:
30-
case ExpectedPackageDBType.BASELINE_ADLIB_ACTION:
31-
case ExpectedPackageDBType.RUNDOWN_BASELINE_OBJECTS:
32-
onUpdatedPackageInfoForRundownDebounce(pkg)
33-
break
34-
case ExpectedPackageDBType.BUCKET_ADLIB:
35-
case ExpectedPackageDBType.BUCKET_ADLIB_ACTION:
36-
onUpdatedPackageInfoForBucketItemDebounce(pkg)
37-
break
38-
case ExpectedPackageDBType.STUDIO_BASELINE_OBJECTS:
39-
onUpdatedPackageInfoForStudioBaselineDebounce(pkg)
40-
break
41-
default:
42-
assertNever(pkg)
43-
break
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+
}
4450
}
4551
}
4652
}
4753

4854
const pendingRundownPackageUpdates = new Map<RundownId, Array<ExpectedPackageId>>()
49-
function onUpdatedPackageInfoForRundownDebounce(pkg: ExpectedPackageFromRundown | ExpectedPackageFromRundownBaseline) {
50-
const existingEntry = pendingRundownPackageUpdates.get(pkg.rundownId)
55+
function onUpdatedPackageInfoForRundownDebounce(pkg: ExpectedPackageDBNew) {
56+
if (!pkg.rundownId) {
57+
logger.error(`Updating ExpectedPackage "${pkg._id}" for Rundown "${pkg.rundownId}" not possible`)
58+
return
59+
}
60+
61+
const rundownId = pkg.rundownId
62+
63+
const existingEntry = pendingRundownPackageUpdates.get(rundownId)
5164
if (existingEntry) {
5265
// already queued, add to the batch
5366
existingEntry.push(pkg._id)
5467
} else {
55-
pendingRundownPackageUpdates.set(pkg.rundownId, [pkg._id])
68+
pendingRundownPackageUpdates.set(rundownId, [pkg._id])
5669
}
5770

5871
// TODO: Scaling - this won't batch correctly if package manager directs calls to multiple instances
5972
lazyIgnore(
60-
`onUpdatedPackageInfoForRundown_${pkg.rundownId}`,
73+
`onUpdatedPackageInfoForRundown_${rundownId}`,
6174
() => {
62-
const packageIds = pendingRundownPackageUpdates.get(pkg.rundownId)
75+
const packageIds = pendingRundownPackageUpdates.get(rundownId)
6376
if (packageIds) {
64-
pendingRundownPackageUpdates.delete(pkg.rundownId)
65-
onUpdatedPackageInfoForRundown(pkg.rundownId, packageIds).catch((e) => {
66-
logger.error(
67-
`Updating ExpectedPackages for Rundown "${pkg.rundownId}" failed: ${stringifyError(e)}`
68-
)
77+
pendingRundownPackageUpdates.delete(rundownId)
78+
onUpdatedPackageInfoForRundown(rundownId, packageIds).catch((e) => {
79+
logger.error(`Updating ExpectedPackages for Rundown "${rundownId}" failed: ${stringifyError(e)}`)
6980
})
7081
}
7182
},
@@ -100,17 +111,27 @@ async function onUpdatedPackageInfoForRundown(
100111
})
101112
}
102113

103-
function onUpdatedPackageInfoForBucketItemDebounce(pkg: ExpectedPackageDBNew) {
114+
function onUpdatedPackageInfoForBucketItemDebounce(
115+
pkg: ExpectedPackageDBNew,
116+
source: ExpectedPackageIngestSourceBucket
117+
) {
118+
if (!pkg.bucketId) {
119+
logger.error(`Updating ExpectedPackage "${pkg._id}" for Bucket "${pkg.bucketId}" not possible`)
120+
return
121+
}
122+
123+
const bucketId = pkg.bucketId
124+
104125
lazyIgnore(
105-
`onUpdatedPackageInfoForBucket_${pkg.studioId}_${pkg.bucketId}_${pkg.pieceExternalId}`,
126+
`onUpdatedPackageInfoForBucket_${pkg.studioId}_${bucketId}_${source.pieceExternalId}`,
106127
() => {
107128
runIngestOperation(pkg.studioId, IngestJobs.BucketItemRegenerate, {
108-
bucketId: pkg.bucketId,
109-
externalId: pkg.pieceExternalId,
129+
bucketId: bucketId,
130+
externalId: source.pieceExternalId,
110131
}).catch((err) => {
111132
logger.error(
112-
`Updating ExpectedPackages for Bucket "${pkg.bucketId}" Item "${
113-
pkg.pieceExternalId
133+
`Updating ExpectedPackages for Bucket "${bucketId}" Item "${
134+
source.pieceExternalId
114135
}" failed: ${stringifyError(err)}`
115136
)
116137
})
@@ -119,7 +140,7 @@ function onUpdatedPackageInfoForBucketItemDebounce(pkg: ExpectedPackageDBNew) {
119140
)
120141
}
121142

122-
function onUpdatedPackageInfoForStudioBaselineDebounce(pkg: ExpectedPackageDBFromStudioBaselineObjects) {
143+
function onUpdatedPackageInfoForStudioBaselineDebounce(pkg: ExpectedPackageDBNew) {
123144
lazyIgnore(
124145
`onUpdatedPackageInfoForStudioBaseline_${pkg.studioId}`,
125146
() => {

meteor/server/publications/packageManager/expectedPackages/generate.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ export async function updateCollectionForExpectedPackageIds(
4848

4949
// Map the expectedPackages onto their specified layer:
5050
const allDeviceIds = new Set<PeripheralDeviceId>()
51-
for (const layerName of packageDoc.layers) {
51+
for (const layerName of packageDoc.package.layers) {
5252
const layerDeviceIds = layerNameToDeviceIds.get(layerName)
5353
for (const deviceId of layerDeviceIds || []) {
5454
allDeviceIds.add(deviceId)
@@ -62,7 +62,8 @@ export async function updateCollectionForExpectedPackageIds(
6262
const routedPackage = generateExpectedPackageForDevice(
6363
studio,
6464
{
65-
...packageDoc,
65+
...packageDoc.package,
66+
rundownId: packageDoc.rundownId,
6667
_id: unprotectString(packageDoc._id),
6768
},
6869
deviceId,
@@ -215,11 +216,14 @@ function generateExpectedPackageForDevice(
215216
if (!combinedTargets.length) {
216217
logger.warn(`Pub.expectedPackagesForDevice: No targets found for "${expectedPackage._id}"`)
217218
}
218-
expectedPackage.sideEffect = getSideEffect(expectedPackage, studio)
219+
const packageSideEffect = getSideEffect(expectedPackage, studio)
219220

220221
return {
221222
_id: protectString(`${expectedPackage._id}_${deviceId}_${pieceInstanceId}`),
222-
expectedPackage: expectedPackage,
223+
expectedPackage: {
224+
...expectedPackage,
225+
sideEffect: packageSideEffect,
226+
},
223227
sources: combinedSources,
224228
targets: combinedTargets,
225229
priority: priority,
@@ -247,7 +251,7 @@ function calculateCombinedSource(
247251
for (const accessorId of accessorIds) {
248252
const sourceAccessor: Accessor.Any | undefined = lookedUpSource.container.accessors[accessorId]
249253

250-
const packageAccessor: AccessorOnPackage.Any | undefined = packageSource.accessors?.[accessorId]
254+
const packageAccessor: ReadonlyDeep<AccessorOnPackage.Any> | undefined = packageSource.accessors?.[accessorId]
251255

252256
if (packageAccessor && sourceAccessor && packageAccessor.type === sourceAccessor.type) {
253257
combinedSource.accessors[accessorId] = deepExtend({}, sourceAccessor, packageAccessor)

packages/meteor-lib/src/collections/ExpectedPackages.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
htmlTemplateGetSteps,
77
htmlTemplateGetFileNamesFromSteps,
88
} from '@sofie-automation/shared-lib/dist/package-manager/helpers'
9+
import { ReadonlyDeep } from 'type-fest'
910

1011
export function getPreviewPackageSettings(
1112
expectedPackage: ExpectedPackage.Any
@@ -55,7 +56,7 @@ export function getThumbnailPackageSettings(
5556
}
5657
}
5758
export function getSideEffect(
58-
expectedPackage: ExpectedPackage.Base,
59+
expectedPackage: ReadonlyDeep<ExpectedPackage.Base>,
5960
studio: Pick<StudioLight, 'previewContainerIds' | 'thumbnailContainerIds'>
6061
): ExpectedPackage.Base['sideEffect'] {
6162
return deepExtend(

packages/shared-lib/src/package-manager/publications.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { ExpectedPackage, PackageContainer, PackageContainerOnPackage } from './package'
22
import { PeripheralDeviceId, PieceInstanceId, RundownId, RundownPlaylistId } from '../core/model/Ids'
33
import { ProtectedString } from '../lib/protectedString'
4+
import { ReadonlyDeep } from 'type-fest'
45

56
export interface PackageManagerPlayoutContext {
67
_id: PeripheralDeviceId
@@ -27,7 +28,7 @@ export interface PackageManagerPackageContainers {
2728

2829
export type PackageManagerExpectedPackageId = ProtectedString<'PackageManagerExpectedPackage'>
2930

30-
export type PackageManagerExpectedPackageBase = ExpectedPackage.Base & { rundownId?: RundownId }
31+
export type PackageManagerExpectedPackageBase = ReadonlyDeep<ExpectedPackage.Base & { rundownId: RundownId | null }>
3132

3233
export interface PackageManagerExpectedPackage {
3334
/** Unique id of the expectedPackage */

0 commit comments

Comments
 (0)