Skip to content

Commit e57fccb

Browse files
committed
wip
1 parent f2a1f2a commit e57fccb

File tree

12 files changed

+148
-179
lines changed

12 files changed

+148
-179
lines changed

meteor/server/publications/pieceContentStatusUI/checkPieceContentStatus.ts

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,8 @@ import {
1111
VTContent,
1212
} from '@sofie-automation/blueprints-integration'
1313
import {
14-
ExpectedPackageDBType,
1514
getExpectedPackageIdForPieceInstance,
16-
getExpectedPackageIdFromIngestSource,
15+
getExpectedPackageIdNew,
1716
} from '@sofie-automation/corelib/dist/dataModel/ExpectedPackages'
1817
import {
1918
BucketId,
@@ -641,20 +640,7 @@ async function checkPieceContentExpectedPackageStatus(
641640

642641
checkedPackageContainers.add(matchedPackageContainer[0])
643642

644-
const expectedPackageIds = [
645-
// Synthesize the expected packageId from the piece
646-
getExpectedPackageIdFromIngestSource(
647-
packageOwnerId,
648-
{
649-
fromPieceType: ExpectedPackageDBType.PIECE,
650-
pieceId: piece._id,
651-
// HACK: We need a value, but the method doesn't use them..
652-
partId: piece._id as any,
653-
segmentId: piece._id as any,
654-
},
655-
expectedPackage._id
656-
),
657-
]
643+
const expectedPackageIds = [getExpectedPackageIdNew(packageOwnerId, expectedPackage)]
658644
if (piece.pieceInstanceId) {
659645
// If this is a PieceInstance, try looking up the PieceInstance first
660646
expectedPackageIds.unshift(

packages/corelib/src/dataModel/ExpectedPackages.ts

Lines changed: 3 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { ExpectedPackage, Time } from '@sofie-automation/blueprints-integration'
2-
import { protectString, unprotectString } from '../protectedString'
3-
import { assertNever, getHash, hashObj } from '../lib'
2+
import { protectString } from '../protectedString'
3+
import { getHash, hashObj } from '../lib'
44
import {
55
AdLibActionId,
66
BucketAdLibActionId,
@@ -146,47 +146,9 @@ export function getExpectedPackageIdForPieceInstance(
146146
return protectString(`${ownerId}_${getHash(localExpectedPackageId)}`)
147147
}
148148

149-
/**
150-
* Generate the temporary expectedPackageId for the given package.
151-
* Note: This will soon be replaced with a new flow based on the contentVersionHash once shared ownership is implemented.
152-
*/
153-
export function getExpectedPackageIdFromIngestSource(
154-
/** Preferably a RundownId or BucketId, but StudioId is allowed when not owned by a rundown or bucket */
155-
parentId: RundownId | StudioId | BucketId,
156-
source: ExpectedPackageIngestSource,
157-
/** The locally unique id of the expectedPackage */
158-
localExpectedPackageId: ExpectedPackage.Base['_id']
159-
): ExpectedPackageId {
160-
let ownerId: string
161-
const ownerPieceType = source.fromPieceType
162-
switch (source.fromPieceType) {
163-
case ExpectedPackageDBType.PIECE:
164-
case ExpectedPackageDBType.ADLIB_PIECE:
165-
case ExpectedPackageDBType.ADLIB_ACTION:
166-
case ExpectedPackageDBType.BASELINE_ADLIB_PIECE:
167-
case ExpectedPackageDBType.BASELINE_ADLIB_ACTION:
168-
ownerId = unprotectString(source.pieceId)
169-
break
170-
case ExpectedPackageDBType.RUNDOWN_BASELINE_OBJECTS:
171-
ownerId = 'rundownBaselineObjects'
172-
break
173-
case ExpectedPackageDBType.STUDIO_BASELINE_OBJECTS:
174-
ownerId = 'studioBaseline'
175-
break
176-
case ExpectedPackageDBType.BUCKET_ADLIB:
177-
case ExpectedPackageDBType.BUCKET_ADLIB_ACTION:
178-
ownerId = unprotectString(source.pieceId)
179-
break
180-
181-
default:
182-
assertNever(source)
183-
throw new Error(`Unknown fromPieceType "${ownerPieceType}"`)
184-
}
185-
return protectString(`${parentId}_${ownerId}_${getHash(localExpectedPackageId)}`)
186-
}
187-
188149
/**
189150
* Generate the expectedPackageId for the given expectedPackage.
151+
* This is a stable id derived from the package and its parent. This document is expected to be owned by multiple sources.
190152
*/
191153
export function getExpectedPackageIdNew(
192154
/** Preferably a RundownId or BucketId, but StudioId is allowed when not owned by a rundown or bucket */

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ export class WatchedPackagesHelper {
2323
private readonly packageInfos: ReadonlyDeep<PackageInfoDB[]>
2424
) {
2525
for (const pkg of packages) {
26-
this.packages.set(pkg._id, pkg)
26+
this.packages.set(pkg.packageId, pkg)
2727
}
2828
}
2929

@@ -65,7 +65,7 @@ export class WatchedPackagesHelper {
6565
return expectedPackage.ingestSources.map(
6666
(source) =>
6767
({
68-
_id: expectedPackage._id,
68+
packageId: expectedPackage._id,
6969
package: expectedPackage.package,
7070
source: source,
7171
} satisfies IngestExpectedPackage<ExpectedPackageIngestSource>)
@@ -135,7 +135,7 @@ export class WatchedPackagesHelper {
135135
packages.length > 0
136136
? await context.directCollections.PackageInfos.findFetch({
137137
studioId: context.studio._id,
138-
packageId: { $in: packages.map((p) => p._id) },
138+
packageId: { $in: packages.map((p) => p.packageId) },
139139
})
140140
: []
141141

@@ -156,7 +156,7 @@ export class WatchedPackagesHelper {
156156
if (func(pkg)) watchedPackages.push(pkg)
157157
}
158158

159-
const newPackageIds = new Set(watchedPackages.map((p) => p._id))
159+
const newPackageIds = new Set(watchedPackages.map((p) => p.packageId))
160160
const watchedPackageInfos = this.packageInfos.filter((info) => newPackageIds.has(info.packageId))
161161

162162
return new WatchedPackagesHelper(watchedPackages, watchedPackageInfos)
@@ -169,7 +169,7 @@ export class WatchedPackagesHelper {
169169
getPackageInfo(packageId: string): Readonly<Array<PackageInfo.Any>> {
170170
for (const pkg of this.packages.values()) {
171171
if (pkg.package._id === packageId) {
172-
const info = this.packageInfos.filter((p) => p.packageId === pkg._id)
172+
const info = this.packageInfos.filter((p) => p.packageId === pkg.packageId)
173173
return unprotectObjectArray(info)
174174
}
175175
}

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

Lines changed: 33 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import {
22
ExpectedPackageDBType,
33
ExpectedPackageIngestSourceRundownBaseline,
4-
getExpectedPackageIdFromIngestSource,
4+
getExpectedPackageIdNew,
55
} from '@sofie-automation/corelib/dist/dataModel/ExpectedPackages'
6-
import { BlueprintId, RundownId } from '@sofie-automation/corelib/dist/dataModel/Ids'
6+
import { BlueprintId, ExpectedPackageId, RundownId } from '@sofie-automation/corelib/dist/dataModel/Ids'
77
import { RundownNote } from '@sofie-automation/corelib/dist/dataModel/Notes'
88
import { serializePieceTimelineObjectsBlob } from '@sofie-automation/corelib/dist/dataModel/Piece'
99
import { DBRundown, RundownSource } from '@sofie-automation/corelib/dist/dataModel/Rundown'
@@ -346,50 +346,47 @@ function generateExpectedPackagesForBaseline(
346346
): IngestExpectedPackage<ExpectedPackageIngestSourceRundownBaseline>[] {
347347
const packages: IngestExpectedPackage<ExpectedPackageIngestSourceRundownBaseline>[] = []
348348

349-
const wrapPackage = (
350-
expectedPackage: ReadonlyDeep<ExpectedPackage.Any>,
349+
const pushPackagesForSource = (
350+
expectedPackages: ReadonlyDeep<ExpectedPackage.Any>[],
351351
source: ExpectedPackageIngestSourceRundownBaseline
352-
): IngestExpectedPackage<ExpectedPackageIngestSourceRundownBaseline> => {
353-
return {
354-
_id: getExpectedPackageIdFromIngestSource(rundownId, source, expectedPackage._id),
355-
356-
package: expectedPackage,
357-
358-
source: source,
352+
): void => {
353+
const insertedPackagesForSource = new Set<ExpectedPackageId>()
354+
for (const expectedPackage of expectedPackages) {
355+
const id = getExpectedPackageIdNew(rundownId, expectedPackage)
356+
357+
// Ensure only inserted once for this source
358+
if (insertedPackagesForSource.has(id)) continue
359+
insertedPackagesForSource.add(id)
360+
361+
packages.push({
362+
packageId: id,
363+
package: expectedPackage,
364+
source: source,
365+
})
359366
}
360367
}
361368

362-
// Future: this will need to deduplicate packages with the same content
363-
// For now, we just generate a package for each expectedPackage
369+
// This expects to generate multiple documents with the same packageId, these get deduplicated during saving.
370+
// This should only concern itself with avoiding duplicates with the same source
364371

365-
for (const expectedPackage of expectedPackages) {
366-
packages.push(
367-
wrapPackage(expectedPackage, {
368-
fromPieceType: ExpectedPackageDBType.RUNDOWN_BASELINE_OBJECTS,
369-
})
370-
)
371-
}
372+
pushPackagesForSource(expectedPackages, {
373+
fromPieceType: ExpectedPackageDBType.RUNDOWN_BASELINE_OBJECTS,
374+
})
372375

373376
// Populate the ingestSources
374377
for (const piece of adLibPieces) {
375-
for (const expectedPackage of piece.expectedPackages || []) {
376-
packages.push(
377-
wrapPackage(expectedPackage, {
378-
fromPieceType: ExpectedPackageDBType.BASELINE_ADLIB_PIECE,
379-
pieceId: piece._id,
380-
})
381-
)
382-
}
378+
if (piece.expectedPackages)
379+
pushPackagesForSource(piece.expectedPackages, {
380+
fromPieceType: ExpectedPackageDBType.BASELINE_ADLIB_PIECE,
381+
pieceId: piece._id,
382+
})
383383
}
384384
for (const piece of adLibActions) {
385-
for (const expectedPackage of piece.expectedPackages || []) {
386-
packages.push(
387-
wrapPackage(expectedPackage, {
388-
fromPieceType: ExpectedPackageDBType.BASELINE_ADLIB_ACTION,
389-
pieceId: piece._id,
390-
})
391-
)
392-
}
385+
if (piece.expectedPackages)
386+
pushPackagesForSource(piece.expectedPackages, {
387+
fromPieceType: ExpectedPackageDBType.BASELINE_ADLIB_ACTION,
388+
pieceId: piece._id,
389+
})
393390
}
394391

395392
return packages

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -192,9 +192,9 @@ async function checkIfSegmentReferencesUnloadedPackageInfos(
192192
for (const part of segmentModel.parts) {
193193
for (const expectedPackage of part.expectedPackages) {
194194
if (expectedPackage.package.listenToPackageInfoUpdates) {
195-
if (!segmentWatchedPackages.hasPackage(expectedPackage._id)) {
195+
if (!segmentWatchedPackages.hasPackage(expectedPackage.packageId)) {
196196
// The package didn't exist prior to the blueprint running
197-
expectedPackageIdsToCheck.add(expectedPackage._id)
197+
expectedPackageIdsToCheck.add(expectedPackage.packageId)
198198
}
199199
}
200200
}

packages/job-worker/src/ingest/model/IngestExpectedPackage.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export interface IngestExpectedPackage<
1616
| ExpectedPackageIngestSourcePart
1717
| ExpectedPackageIngestSourceRundownBaseline
1818
> {
19-
_id: ExpectedPackageId
19+
packageId: ExpectedPackageId
2020

2121
package: ReadonlyDeep<ExpectedPackage.Any>
2222

packages/job-worker/src/ingest/model/implementation/ExpectedPackagesStore.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ export class ExpectedPackagesStore<TPackageSource extends { fromPieceType: Expec
8989
this.#expectedMediaItemsWithChanges.add(expectedMediaItem._id)
9090
}
9191
for (const expectedPackage of this.#expectedPackages) {
92-
this.#expectedPackagesWithChanges.add(expectedPackage._id)
92+
this.#expectedPackagesWithChanges.add(expectedPackage.packageId)
9393
}
9494
}
9595
}
@@ -161,6 +161,7 @@ export class ExpectedPackagesStore<TPackageSource extends { fromPieceType: Expec
161161
)
162162
}
163163
setExpectedPackages(expectedPackages: IngestExpectedPackage<TPackageSource>[]): void {
164+
// nocommit - this wont work because of the clashing ids...
164165
this.#expectedPackages = diffAndReturnLatestObjects(
165166
this.#expectedPackagesWithChanges,
166167
this.#expectedPackages,

packages/job-worker/src/ingest/model/implementation/IngestModelImpl.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -342,12 +342,12 @@ export class IngestModelImpl implements IngestModel, IngestDatabasePersistedMode
342342
const sources: ReadonlyDeep<ExpectedPackageIngestSource>[] = []
343343

344344
for (const baselinePackage of this.#rundownBaselineExpectedPackagesStore.expectedPackages) {
345-
if (baselinePackage._id === packageId) sources.push(baselinePackage.source)
345+
if (baselinePackage.packageId === packageId) sources.push(baselinePackage.source)
346346
}
347347

348348
for (const part of this.getAllOrderedParts()) {
349349
for (const partPackage of part.expectedPackages) {
350-
if (partPackage._id === packageId) sources.push(partPackage.source)
350+
if (partPackage.packageId === packageId) sources.push(partPackage.source)
351351
}
352352
}
353353

@@ -709,7 +709,7 @@ function groupExpectedPackages(expectedPackages: ExpectedPackageDB[]) {
709709
case ExpectedPackageDBType.BASELINE_ADLIB_PIECE:
710710
case ExpectedPackageDBType.RUNDOWN_BASELINE_OBJECTS:
711711
baselineExpectedPackages.push({
712-
_id: expectedPackage._id,
712+
packageId: expectedPackage._id,
713713
package: expectedPackage.package,
714714
source: src,
715715
})
@@ -719,7 +719,7 @@ function groupExpectedPackages(expectedPackages: ExpectedPackageDB[]) {
719719
case ExpectedPackageDBType.ADLIB_ACTION: {
720720
const partPackages = groupedExpectedPackagesByPart.get(src.partId) ?? []
721721
partPackages.push({
722-
_id: expectedPackage._id,
722+
packageId: expectedPackage._id,
723723
package: expectedPackage.package,
724724
source: src,
725725
})

0 commit comments

Comments
 (0)