Skip to content

Commit 79e16e4

Browse files
committed
wip
1 parent 78b49c9 commit 79e16e4

File tree

15 files changed

+114
-84
lines changed

15 files changed

+114
-84
lines changed
Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { ExpectedPackageStatusAPI, Time } from '@sofie-automation/blueprints-integration'
2-
import { ExpectedPackageDBBase } from './ExpectedPackages'
3-
import { ExpectedPackageWorkStatusId, PeripheralDeviceId } from './Ids'
2+
import { ExpectedPackageId, ExpectedPackageWorkStatusId, PeripheralDeviceId, StudioId } from './Ids'
43

54
/**
65
* ExpectedPackageWorkStatus contains statuses about Work that is being performed on expected packages
@@ -10,7 +9,7 @@ import { ExpectedPackageWorkStatusId, PeripheralDeviceId } from './Ids'
109
export interface ExpectedPackageWorkStatus extends Omit<ExpectedPackageStatusAPI.WorkStatus, 'fromPackages'> {
1110
_id: ExpectedPackageWorkStatusId
1211

13-
studioId: ExpectedPackageDBBase['studioId']
12+
studioId: StudioId
1413
fromPackages: ExpectedPackageWorkStatusFromPackage[]
1514

1615
/** Which PeripheralDevice this update came from */
@@ -20,5 +19,5 @@ export interface ExpectedPackageWorkStatus extends Omit<ExpectedPackageStatusAPI
2019
}
2120
export interface ExpectedPackageWorkStatusFromPackage
2221
extends Omit<ExpectedPackageStatusAPI.WorkBaseInfoFromPackage, 'id'> {
23-
id: ExpectedPackageDBBase['_id']
22+
id: ExpectedPackageId
2423
}

packages/corelib/src/dataModel/ExpectedPackages.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,6 @@ export enum ExpectedPackageDBType {
6868
export interface ExpectedPackageDBNew {
6969
_id: ExpectedPackageId // derived from rundownId and hash of `package`
7070

71-
// /** The local package id - as given by the blueprints */
72-
// blueprintPackageId: string // TODO - remove this?
73-
7471
/** The studio of the Rundown of the Piece this package belongs to */
7572
studioId: StudioId
7673

packages/corelib/src/dataModel/PackageInfos.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { PackageInfo, Time } from '@sofie-automation/blueprints-integration'
22
import { protectString } from '../protectedString'
3-
import { ExpectedPackageDB } from './ExpectedPackages'
3+
import type { ExpectedPackageDBNew } from './ExpectedPackages'
44
import { ExpectedPackageId, PackageInfoId, PeripheralDeviceId, StudioId } from './Ids'
55

66
/**
@@ -14,7 +14,7 @@ export interface PackageInfoDB extends PackageInfo.Base {
1414
/** Reference to the Package this document has info about */
1515
packageId: ExpectedPackageId
1616
/** Reference to the contentVersionHash of the ExpectedPackage, used to reference the expected content+version of the Package */
17-
expectedContentVersionHash: ExpectedPackageDB['contentVersionHash']
17+
expectedContentVersionHash: ExpectedPackageDBNew['contentVersionHash']
1818
/** Referring to the actual contentVersionHash of the Package, used to reference the exact content+version of the Package */
1919
actualContentVersionHash: string
2020

packages/corelib/src/pubsub.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import { BucketAdLibAction } from './dataModel/BucketAdLibAction'
1919
import { BucketAdLib } from './dataModel/BucketAdLibPiece'
2020
import { ExpectedMediaItem } from './dataModel/ExpectedMediaItem'
2121
import { ExpectedPackageWorkStatus } from './dataModel/ExpectedPackageWorkStatuses'
22-
import { ExpectedPackageDBBase } from './dataModel/ExpectedPackages'
22+
import { ExpectedPackageDBNew } from './dataModel/ExpectedPackages'
2323
import { ExternalMessageQueueObj } from './dataModel/ExternalMessageQueue'
2424
import { PackageContainerStatusDB } from './dataModel/PackageContainerStatus'
2525
import { PeripheralDevice } from './dataModel/PeripheralDevice'
@@ -344,7 +344,7 @@ export type CorelibPubSubCollections = {
344344
[CollectionName.BucketAdLibActions]: BucketAdLibAction
345345
[CollectionName.BucketAdLibPieces]: BucketAdLib
346346
[CollectionName.ExpectedMediaItems]: ExpectedMediaItem
347-
[CollectionName.ExpectedPackages]: ExpectedPackageDBBase
347+
[CollectionName.ExpectedPackages]: ExpectedPackageDBNew
348348
[CollectionName.ExpectedPackageWorkStatuses]: ExpectedPackageWorkStatus
349349
[CollectionName.ExternalMessageQueue]: ExternalMessageQueueObj
350350
[CollectionName.NrcsIngestDataCache]: NrcsIngestDataCacheObj

packages/job-worker/src/__mocks__/collection.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { Blueprint } from '@sofie-automation/corelib/dist/dataModel/Blueprint'
44
import { BucketAdLibAction } from '@sofie-automation/corelib/dist/dataModel/BucketAdLibAction'
55
import { BucketAdLib } from '@sofie-automation/corelib/dist/dataModel/BucketAdLibPiece'
66
import { CollectionName } from '@sofie-automation/corelib/dist/dataModel/Collections'
7-
import { ExpectedPackageDB } from '@sofie-automation/corelib/dist/dataModel/ExpectedPackages'
7+
import { ExpectedPackageDBNew } from '@sofie-automation/corelib/dist/dataModel/ExpectedPackages'
88
import { ExpectedPlayoutItem } from '@sofie-automation/corelib/dist/dataModel/ExpectedPlayoutItem'
99
import { NrcsIngestDataCacheObj } from '@sofie-automation/corelib/dist/dataModel/NrcsIngestDataCache'
1010
import { SofieIngestDataCacheObj } from '@sofie-automation/corelib/dist/dataModel/SofieIngestDataCache'
@@ -310,7 +310,7 @@ export function getMockCollections(): {
310310
Timelines: new MockMongoCollection<TimelineComplete>(CollectionName.Timelines),
311311
TimelineDatastores: new MockMongoCollection<DBTimelineDatastoreEntry>(CollectionName.TimelineDatastore),
312312

313-
ExpectedPackages: new MockMongoCollection<ExpectedPackageDB>(CollectionName.ExpectedPackages),
313+
ExpectedPackages: new MockMongoCollection<ExpectedPackageDBNew>(CollectionName.ExpectedPackages),
314314
PackageInfos: new MockMongoCollection(CollectionName.PackageInfos),
315315

316316
ExternalMessageQueue: new MockMongoCollection(CollectionName.ExternalMessageQueue),
@@ -364,7 +364,7 @@ export interface IMockCollections {
364364
Timelines: MockMongoCollection<TimelineComplete>
365365
TimelineDatastores: MockMongoCollection<DBTimelineDatastoreEntry>
366366

367-
ExpectedPackages: MockMongoCollection<ExpectedPackageDB>
367+
ExpectedPackages: MockMongoCollection<ExpectedPackageDBNew>
368368
PackageInfos: MockMongoCollection<PackageInfoDB>
369369

370370
ExternalMessageQueue: MockMongoCollection<ExternalMessageQueueObj>

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ export class WatchedPackagesHelper {
149149

150150
getPackageInfo(packageId: string): Readonly<Array<PackageInfo.Any>> {
151151
for (const pkg of this.packages.values()) {
152-
if (pkg.blueprintPackageId === packageId) {
152+
if (pkg.package._id === packageId) {
153153
const info = this.packageInfos.filter((p) => p.packageId === pkg._id)
154154
return unprotectObjectArray(info)
155155
}

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

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -216,11 +216,12 @@ export async function regenerateRundownAndBaselineFromIngestData(
216216
allRundownWatchedPackages: WatchedPackagesHelper,
217217
extraRundownNotes: RundownNote[]
218218
): Promise<ReadonlyDeep<DBRundown> | null> {
219-
const rundownBaselinePackages = allRundownWatchedPackages.filter(
220-
context,
221-
(pkg) =>
222-
pkg.fromPieceType === ExpectedPackageDBType.BASELINE_ADLIB_ACTION ||
223-
pkg.fromPieceType === ExpectedPackageDBType.RUNDOWN_BASELINE_OBJECTS
219+
const rundownBaselinePackages = allRundownWatchedPackages.filter(context, (pkg) =>
220+
pkg.ingestSources.some(
221+
(source) =>
222+
source.fromPieceType === ExpectedPackageDBType.BASELINE_ADLIB_ACTION ||
223+
source.fromPieceType === ExpectedPackageDBType.RUNDOWN_BASELINE_OBJECTS
224+
)
224225
)
225226

226227
const blueprintContext = new GetRundownContext(
@@ -345,19 +346,19 @@ function generateExpectedPackagesForBaseline(
345346
adLibPieces: AdLibPiece[],
346347
adLibActions: RundownBaselineAdLibAction[],
347348
expectedPackages: ExpectedPackage.Any[]
348-
): IngestExpectedPackage[] {
349-
const packages: IngestExpectedPackage[] = []
349+
): IngestExpectedPackage<ExpectedPackageIngestSourceRundownBaseline>[] {
350+
const packages: IngestExpectedPackage<ExpectedPackageIngestSourceRundownBaseline>[] = []
350351

351352
const wrapPackage = (
352353
expectedPackage: ReadonlyDeep<ExpectedPackage.Any>,
353-
source: ExpectedPackageIngestSourcePart | ExpectedPackageIngestSourceRundownBaseline
354-
): IngestExpectedPackage => {
354+
source: ExpectedPackageIngestSourceRundownBaseline
355+
): IngestExpectedPackage<ExpectedPackageIngestSourceRundownBaseline> => {
355356
return {
356357
_id: getExpectedPackageIdTmp(rundownId, source, expectedPackage._id),
357358

358359
contentVersionHash: getContentVersionHash(expectedPackage),
359360

360-
created: Date.now(), // nocommit - avoid churn on this?
361+
created: null,
361362

362363
package: expectedPackage,
363364

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

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,30 @@
11
import type { ExpectedPackage, Time } from '@sofie-automation/blueprints-integration'
22
import type {
33
ExpectedPackageDBNew,
4+
ExpectedPackageDBType,
45
ExpectedPackageIngestSourcePart,
56
ExpectedPackageIngestSourceRundownBaseline,
67
} from '@sofie-automation/corelib/dist/dataModel/ExpectedPackages'
78
import type { ExpectedPackageId } from '@sofie-automation/corelib/dist/dataModel/Ids'
89
import type { ReadonlyDeep } from 'type-fest'
910

10-
export interface IngestExpectedPackage {
11+
export interface IngestExpectedPackage<
12+
TPackageSource extends { fromPieceType: ExpectedPackageDBType } =
13+
| ExpectedPackageIngestSourcePart
14+
| ExpectedPackageIngestSourceRundownBaseline
15+
> {
1116
_id: ExpectedPackageId
1217

1318
/** Hash that changes whenever the content or version changes. See getContentVersionHash() */
1419
contentVersionHash: string
1520

16-
created: Time
21+
/** The time this expectedPackage was created. This can be null when it has not yet been written to mongodb */
22+
created: Time | null
1723

1824
package: ReadonlyDeep<ExpectedPackage.Any>
1925

2026
// HACK: Temporary single item
21-
ingestSources: [ExpectedPackageIngestSourcePart | ExpectedPackageIngestSourceRundownBaseline]
27+
ingestSources: [TPackageSource]
2228
}
2329

2430
export function stripExpectedPackageDBToIngestExpectedPackage(

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

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,4 @@ export interface IngestPartModel extends IngestPartModelReadonly {
6060
* @param expectedMediaItems The new ExpectedMediaItems
6161
*/
6262
setExpectedMediaItems(expectedMediaItems: ExpectedMediaItemRundown[]): void
63-
64-
// /**
65-
// * Set the ExpectedPackages for the contents of this Part
66-
// * @param expectedPackages The new ExpectedPackages
67-
// */
68-
// setExpectedPackages(expectedPackages: ReadonlyDeep<ExpectedPackage.Any>[]): void
6963
}

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

Lines changed: 43 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,31 @@ import {
99
SegmentId,
1010
} from '@sofie-automation/corelib/dist/dataModel/Ids'
1111
import { ReadonlyDeep } from 'type-fest'
12-
import { diffAndReturnLatestObjects, DocumentChanges, getDocumentChanges, setValuesAndTrackChanges } from './utils'
12+
import {
13+
diffAndReturnLatestObjects,
14+
DocumentChanges,
15+
getDocumentChanges,
16+
setValuesAndTrackChanges,
17+
setValuesAndTrackChangesFunc,
18+
} from './utils'
1319
import type { IngestExpectedPackage } from '../IngestExpectedPackage'
20+
import { ExpectedPackageDBType } from '@sofie-automation/corelib/dist/dataModel/ExpectedPackages'
1421

15-
function mutateExpectedPackage(oldObj: IngestExpectedPackage, newObj: IngestExpectedPackage): IngestExpectedPackage {
22+
function mutateExpectedPackage<TPackageSource extends { fromPieceType: ExpectedPackageDBType }>(
23+
oldObj: IngestExpectedPackage<TPackageSource>,
24+
newObj: IngestExpectedPackage<TPackageSource>
25+
): IngestExpectedPackage<TPackageSource> {
1626
return {
1727
...newObj,
1828
// Retain the created property
1929
created: oldObj.created,
2030
}
2131
}
2232

23-
export class ExpectedPackagesStore {
33+
export class ExpectedPackagesStore<TPackageSource extends { fromPieceType: ExpectedPackageDBType }> {
2434
#expectedMediaItems: ExpectedMediaItemRundown[]
2535
#expectedPlayoutItems: ExpectedPlayoutItemRundown[]
26-
#expectedPackages: IngestExpectedPackage[]
36+
#expectedPackages: IngestExpectedPackage<TPackageSource>[]
2737

2838
#expectedMediaItemsWithChanges = new Set<ExpectedMediaItemId>()
2939
#expectedPlayoutItemsWithChanges = new Set<ExpectedPlayoutItemId>()
@@ -35,8 +45,9 @@ export class ExpectedPackagesStore {
3545
get expectedPlayoutItems(): ReadonlyDeep<ExpectedPlayoutItemRundown[]> {
3646
return this.#expectedPlayoutItems
3747
}
38-
get expectedPackages(): ReadonlyDeep<IngestExpectedPackage[]> {
39-
return this.#expectedPackages
48+
get expectedPackages(): ReadonlyDeep<IngestExpectedPackage<TPackageSource>[]> {
49+
// Typescript is not happy because of the generic
50+
return this.#expectedPackages as any
4051
}
4152

4253
get hasChanges(): boolean {
@@ -53,7 +64,7 @@ export class ExpectedPackagesStore {
5364
get expectedPlayoutItemsChanges(): DocumentChanges<ExpectedPlayoutItemRundown> {
5465
return getDocumentChanges(this.#expectedPlayoutItemsWithChanges, this.#expectedPlayoutItems)
5566
}
56-
get expectedPackagesChanges(): DocumentChanges<IngestExpectedPackage> {
67+
get expectedPackagesChanges(): DocumentChanges<IngestExpectedPackage<TPackageSource>> {
5768
return getDocumentChanges(this.#expectedPackagesWithChanges, this.#expectedPackages)
5869
}
5970

@@ -74,7 +85,7 @@ export class ExpectedPackagesStore {
7485
partId: PartId | undefined,
7586
expectedMediaItems: ExpectedMediaItemRundown[],
7687
expectedPlayoutItems: ExpectedPlayoutItemRundown[],
77-
expectedPackages: IngestExpectedPackage[]
88+
expectedPackages: IngestExpectedPackage<TPackageSource>[]
7889
) {
7990
this.#rundownId = rundownId
8091
this.#segmentId = segmentId
@@ -98,7 +109,12 @@ export class ExpectedPackagesStore {
98109
}
99110
}
100111

101-
setOwnerIds(rundownId: RundownId, segmentId: SegmentId | undefined, partId: PartId | undefined): void {
112+
setOwnerIds(
113+
rundownId: RundownId,
114+
segmentId: SegmentId | undefined,
115+
partId: PartId | undefined,
116+
updatePackageSource: (source: TPackageSource) => boolean
117+
): void {
102118
this.#rundownId = rundownId
103119
this.#segmentId = segmentId
104120
this.#partId = partId
@@ -111,16 +127,19 @@ export class ExpectedPackagesStore {
111127
rundownId,
112128
partId,
113129
})
114-
// nocommit - reimplement
115-
// setValuesAndTrackChanges(this.#expectedPackagesWithChanges, this.#expectedPackages, {
116-
// rundownId,
117-
// // @ts-expect-error Not all ExpectedPackage types have this property
118-
// segmentId,
119-
// partId,
120-
// })
130+
setValuesAndTrackChangesFunc(this.#expectedPackagesWithChanges, this.#expectedPackages, (pkg) => {
131+
let changed = false
132+
133+
for (const source of pkg.ingestSources) {
134+
const sourceChanged = updatePackageSource(source)
135+
changed = changed || sourceChanged
136+
}
137+
138+
return changed
139+
})
121140
}
122141

123-
compareToPreviousData(oldStore: ExpectedPackagesStore): void {
142+
compareToPreviousData(oldStore: ExpectedPackagesStore<TPackageSource>): void {
124143
// Diff the objects, but don't update the stored copies
125144
diffAndReturnLatestObjects(
126145
this.#expectedPlayoutItemsWithChanges,
@@ -166,19 +185,12 @@ export class ExpectedPackagesStore {
166185
newExpectedMediaItems
167186
)
168187
}
169-
setExpectedPackages(expectedPackages: IngestExpectedPackage[]): void {
170-
// nocommit - the whole packages flow needs reimplementing
171-
// const newExpectedPackages: IngestExpectedPackage[] = expectedPackages.map((pkg) => ({
172-
// ...pkg,
173-
// partId: this.#partId,
174-
// segmentId: this.#segmentId,
175-
// rundownId: this.#rundownId,
176-
// }))
177-
// this.#expectedPackages = diffAndReturnLatestObjects(
178-
// this.#expectedPackagesWithChanges,
179-
// this.#expectedPackages,
180-
// newExpectedPackages,
181-
// mutateExpectedPackage
182-
// )
188+
setExpectedPackages(expectedPackages: IngestExpectedPackage<TPackageSource>[]): void {
189+
this.#expectedPackages = diffAndReturnLatestObjects(
190+
this.#expectedPackagesWithChanges,
191+
this.#expectedPackages,
192+
expectedPackages,
193+
mutateExpectedPackage
194+
)
183195
}
184196
}

0 commit comments

Comments
 (0)