Skip to content

Commit 2fe892b

Browse files
committed
wip: change structure to be one source
1 parent b66bcb7 commit 2fe892b

File tree

10 files changed

+52
-59
lines changed

10 files changed

+52
-59
lines changed

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

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,20 @@ import { PackageInfo } from '@sofie-automation/blueprints-integration'
66
import { unprotectObjectArray } from '@sofie-automation/corelib/dist/protectedString'
77
import { IngestModelReadonly } from '../../ingest/model/IngestModel'
88
import { ReadonlyDeep } from 'type-fest'
9-
import {
10-
stripExpectedPackageDBToIngestExpectedPackage,
11-
type IngestExpectedPackage,
12-
} from '../../ingest/model/IngestExpectedPackage'
9+
import type { IngestExpectedPackage } from '../../ingest/model/IngestExpectedPackage'
1310
import type { ExpectedPackageIngestSource } from '@sofie-automation/corelib/dist/dataModel/ExpectedPackages'
1411

1512
/**
1613
* This is a helper class to simplify exposing packageInfo to various places in the blueprints
1714
*/
1815
export class WatchedPackagesHelper {
19-
private readonly packages = new Map<ExpectedPackageId, ReadonlyDeep<IngestExpectedPackage>>()
16+
private readonly packages = new Map<
17+
ExpectedPackageId,
18+
ReadonlyDeep<IngestExpectedPackage<ExpectedPackageIngestSource>>
19+
>()
2020

2121
private constructor(
22-
packages: ReadonlyDeep<IngestExpectedPackage[]>,
22+
packages: ReadonlyDeep<IngestExpectedPackage<ExpectedPackageIngestSource>[]>,
2323
private readonly packageInfos: ReadonlyDeep<PackageInfoDB[]>
2424
) {
2525
for (const pkg of packages) {
@@ -59,8 +59,18 @@ export class WatchedPackagesHelper {
5959
packageId: { $in: watchedPackages.map((p) => p._id) },
6060
})
6161

62-
const watchedIngestPackages: IngestExpectedPackage[] = watchedPackages.map(
63-
stripExpectedPackageDBToIngestExpectedPackage
62+
const watchedIngestPackages: IngestExpectedPackage<ExpectedPackageIngestSource>[] = watchedPackages.flatMap(
63+
(expectedPackage) => {
64+
// Split into a package per source
65+
return expectedPackage.ingestSources.map(
66+
(source) =>
67+
({
68+
_id: expectedPackage._id,
69+
package: expectedPackage.package,
70+
source: source,
71+
} satisfies IngestExpectedPackage<ExpectedPackageIngestSource>)
72+
)
73+
}
6474
)
6575

6676
return new WatchedPackagesHelper(watchedIngestPackages, watchedPackageInfos)
@@ -137,8 +147,11 @@ export class WatchedPackagesHelper {
137147
* This is useful so that all the data for a rundown can be loaded at the start of an ingest operation, and then subsets can be taken for particular blueprint methods without needing to do more db operations.
138148
* @param func A filter to check if each package should be included
139149
*/
140-
filter(_context: JobContext, func: (pkg: ReadonlyDeep<IngestExpectedPackage>) => boolean): WatchedPackagesHelper {
141-
const watchedPackages: ReadonlyDeep<IngestExpectedPackage>[] = []
150+
filter(
151+
_context: JobContext,
152+
func: (pkg: ReadonlyDeep<IngestExpectedPackage<ExpectedPackageIngestSource>>) => boolean
153+
): WatchedPackagesHelper {
154+
const watchedPackages: ReadonlyDeep<IngestExpectedPackage<ExpectedPackageIngestSource>>[] = []
142155
for (const pkg of this.packages.values()) {
143156
if (func(pkg)) watchedPackages.push(pkg)
144157
}
@@ -149,8 +162,8 @@ export class WatchedPackagesHelper {
149162
return new WatchedPackagesHelper(watchedPackages, watchedPackageInfos)
150163
}
151164

152-
getPackage(packageId: ExpectedPackageId): ReadonlyDeep<IngestExpectedPackage> | undefined {
153-
return this.packages.get(packageId)
165+
hasPackage(packageId: ExpectedPackageId): boolean {
166+
return this.packages.has(packageId)
154167
}
155168

156169
getPackageInfo(packageId: string): Readonly<Array<PackageInfo.Any>> {

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -218,9 +218,6 @@ export function updateBaselineExpectedPackagesOnStudio(
218218
): void {
219219
updateBaselineExpectedPlayoutItemsOnStudio(context, playoutModel, baseline.expectedPlayoutItems ?? [])
220220

221-
// Fill in ids of unnamed expectedPackages
222-
setDefaultIdOnExpectedPackages(baseline.expectedPackages)
223-
224221
playoutModel.setExpectedPackagesForStudioBaseline(baseline.expectedPackages ?? [])
225222
}
226223

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

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -214,12 +214,11 @@ export async function regenerateRundownAndBaselineFromIngestData(
214214
allRundownWatchedPackages: WatchedPackagesHelper,
215215
extraRundownNotes: RundownNote[]
216216
): Promise<ReadonlyDeep<DBRundown> | null> {
217-
const rundownBaselinePackages = allRundownWatchedPackages.filter(context, (pkg) =>
218-
pkg.ingestSources.some(
219-
(source) =>
220-
source.fromPieceType === ExpectedPackageDBType.BASELINE_ADLIB_ACTION ||
221-
source.fromPieceType === ExpectedPackageDBType.RUNDOWN_BASELINE_OBJECTS
222-
)
217+
const rundownBaselinePackages = allRundownWatchedPackages.filter(
218+
context,
219+
(pkg) =>
220+
pkg.source.fromPieceType === ExpectedPackageDBType.BASELINE_ADLIB_ACTION ||
221+
pkg.source.fromPieceType === ExpectedPackageDBType.RUNDOWN_BASELINE_OBJECTS
223222
)
224223

225224
const blueprintContext = new GetRundownContext(
@@ -356,7 +355,7 @@ function generateExpectedPackagesForBaseline(
356355

357356
package: expectedPackage,
358357

359-
ingestSources: [source],
358+
source: source,
360359
}
361360
}
362361

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,9 @@ async function regenerateSegmentAndUpdateModelFull(
105105

106106
// Filter down to the packages for this segment
107107
const segmentId = ingestModel.getSegmentIdFromExternalId(ingestSegment.externalId)
108-
const segmentWatchedPackages = allRundownWatchedPackages.filter(context, (p) =>
109-
p.ingestSources.some((src) => 'segmentId' in src && src.segmentId === segmentId)
108+
const segmentWatchedPackages = allRundownWatchedPackages.filter(
109+
context,
110+
(p) => 'segmentId' in p.source && p.source.segmentId === segmentId
110111
)
111112

112113
let updatedSegmentModel = await regenerateSegmentAndUpdateModel(
@@ -191,8 +192,7 @@ async function checkIfSegmentReferencesUnloadedPackageInfos(
191192
for (const part of segmentModel.parts) {
192193
for (const expectedPackage of part.expectedPackages) {
193194
if (expectedPackage.package.listenToPackageInfoUpdates) {
194-
const loadedPackage = segmentWatchedPackages.getPackage(expectedPackage._id)
195-
if (!loadedPackage) {
195+
if (!segmentWatchedPackages.hasPackage(expectedPackage._id)) {
196196
// The package didn't exist prior to the blueprint running
197197
expectedPackageIdsToCheck.add(expectedPackage._id)
198198
}
Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import type { ExpectedPackage } from '@sofie-automation/blueprints-integration'
22
import type {
3-
ExpectedPackageDB,
43
ExpectedPackageDBType,
54
ExpectedPackageIngestSourcePart,
65
ExpectedPackageIngestSourceRundownBaseline,
@@ -10,6 +9,7 @@ import type { ReadonlyDeep } from 'type-fest'
109

1110
/**
1211
* A simpler form of ExpectedPackageDB that is scoped to the properties relevant to ingest.
12+
* This is limited to be owned by one source, during the save process the documents will be merged
1313
*/
1414
export interface IngestExpectedPackage<
1515
TPackageSource extends { fromPieceType: ExpectedPackageDBType } =
@@ -20,16 +20,5 @@ export interface IngestExpectedPackage<
2020

2121
package: ReadonlyDeep<ExpectedPackage.Any>
2222

23-
// HACK: Temporary single item
24-
ingestSources: [TPackageSource]
25-
}
26-
27-
export function stripExpectedPackageDBToIngestExpectedPackage(
28-
expectedPackage: ExpectedPackageDB
29-
): IngestExpectedPackage {
30-
return {
31-
_id: expectedPackage._id,
32-
package: expectedPackage.package,
33-
ingestSources: expectedPackage.ingestSources as any, // Future: can this be omitted
34-
}
23+
source: TPackageSource
3524
}

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

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -110,16 +110,9 @@ export class ExpectedPackagesStore<TPackageSource extends { fromPieceType: Expec
110110
rundownId,
111111
partId,
112112
})
113-
setValuesAndTrackChangesFunc(this.#expectedPackagesWithChanges, this.#expectedPackages, (pkg) => {
114-
let changed = false
115-
116-
for (const source of pkg.ingestSources) {
117-
const sourceChanged = updatePackageSource(source)
118-
changed = changed || sourceChanged
119-
}
120-
121-
return changed
122-
})
113+
setValuesAndTrackChangesFunc(this.#expectedPackagesWithChanges, this.#expectedPackages, (pkg) =>
114+
updatePackageSource(pkg.source)
115+
)
123116
}
124117

125118
compareToPreviousData(oldStore: ExpectedPackagesStore<TPackageSource>): void {

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

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ import { generateWriteOpsForLazyDocuments } from './DocumentChangeTracker'
5959
import { IS_PRODUCTION } from '../../../environment'
6060
import { logger } from '../../../logging'
6161
import { NotificationsModelHelper } from '../../../notifications/NotificationsModelHelper'
62-
import { IngestExpectedPackage, stripExpectedPackageDBToIngestExpectedPackage } from '../IngestExpectedPackage'
62+
import { IngestExpectedPackage } from '../IngestExpectedPackage'
6363

6464
export interface IngestModelImplExistingData {
6565
rundown: DBRundown
@@ -344,11 +344,11 @@ export class IngestModelImpl implements IngestModel, IngestDatabasePersistedMode
344344
const baselinePackage = this.#rundownBaselineExpectedPackagesStore.expectedPackages.find(
345345
(pkg) => pkg._id === packageId
346346
)
347-
if (baselinePackage) sources.push(...baselinePackage.ingestSources)
347+
if (baselinePackage) sources.push(baselinePackage.source)
348348

349349
for (const part of this.getAllOrderedParts()) {
350350
const partPackage = part.expectedPackages.find((pkg) => pkg._id === packageId)
351-
if (partPackage) sources.push(...partPackage.ingestSources)
351+
if (partPackage) sources.push(partPackage.source)
352352
}
353353

354354
return sources
@@ -709,17 +709,19 @@ function groupExpectedPackages(expectedPackages: ExpectedPackageDB[]) {
709709
case ExpectedPackageDBType.BASELINE_ADLIB_PIECE:
710710
case ExpectedPackageDBType.RUNDOWN_BASELINE_OBJECTS:
711711
baselineExpectedPackages.push({
712-
...stripExpectedPackageDBToIngestExpectedPackage(expectedPackage),
713-
ingestSources: [src],
712+
_id: expectedPackage._id,
713+
package: expectedPackage.package,
714+
source: src,
714715
})
715716
break
716717
case ExpectedPackageDBType.PIECE:
717718
case ExpectedPackageDBType.ADLIB_PIECE:
718719
case ExpectedPackageDBType.ADLIB_ACTION: {
719720
const partPackages = groupedExpectedPackagesByPart.get(src.partId) ?? []
720721
partPackages.push({
721-
...stripExpectedPackageDBToIngestExpectedPackage(expectedPackage),
722-
ingestSources: [src],
722+
_id: expectedPackage._id,
723+
package: expectedPackage.package,
724+
source: src,
723725
})
724726
groupedExpectedPackagesByPart.set(src.partId, partPackages)
725727
break

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@ function generateExpectedPackagesForPart(
279279

280280
package: expectedPackage,
281281

282-
ingestSources: [source],
282+
source: source,
283283
}
284284
}
285285

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ export async function writeExpectedPackagesChangesForRundown(
131131
bucketId: null,
132132
created: Date.now(),
133133
package: doc.package,
134-
ingestSources: doc.ingestSources,
134+
ingestSources: [doc.source],
135135
}
136136

137137
const existingDoc = existingDocsMap.get(doc._id)

packages/job-worker/src/studio/model/StudioBaselineHelper.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export class StudioBaselineHelper {
3838

3939
package: expectedPackage,
4040

41-
ingestSources: [source],
41+
source: source,
4242
} satisfies IngestExpectedPackage<ExpectedPackageIngestSourceStudioBaseline>)
4343
)
4444
}

0 commit comments

Comments
 (0)