Skip to content

Commit a3df58a

Browse files
committed
wip
1 parent 336d5dd commit a3df58a

File tree

9 files changed

+388
-65
lines changed

9 files changed

+388
-65
lines changed

meteor/server/migration/1_50_0.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,11 @@ import { JSONBlobStringify, JSONSchema, TSR } from '@sofie-automation/blueprints
3333
import { DEFAULT_MINIMUM_TAKE_SPAN } from '@sofie-automation/shared-lib/dist/core/constants'
3434
import { PartId } from '@sofie-automation/shared-lib/dist/core/model/Ids'
3535
import { protectString } from '@sofie-automation/shared-lib/dist/lib/protectedString'
36-
import { ExpectedPackageDBType } from '@sofie-automation/corelib/dist/dataModel/ExpectedPackages'
3736
import { AdLibActionId, PieceId, RundownBaselineAdLibActionId } from '@sofie-automation/corelib/dist/dataModel/Ids'
3837
import { Piece } from '@sofie-automation/corelib/dist/dataModel/Piece'
3938
import { AdLibPiece } from '@sofie-automation/corelib/dist/dataModel/AdLibPiece'
4039
import { AdLibAction } from '@sofie-automation/corelib/dist/dataModel/AdlibAction'
40+
import * as PackagesPreR53 from '@sofie-automation/corelib/dist/dataModel/Old/ExpectedPackagesR52'
4141

4242
// Release 50
4343

@@ -155,9 +155,9 @@ const oldDeviceTypeToNewMapping = {
155155
}
156156

157157
const EXPECTED_PACKAGE_TYPES_ADDED_PART_ID = [
158-
ExpectedPackageDBType.PIECE,
159-
ExpectedPackageDBType.ADLIB_PIECE,
160-
ExpectedPackageDBType.ADLIB_ACTION,
158+
PackagesPreR53.ExpectedPackageDBType.PIECE,
159+
PackagesPreR53.ExpectedPackageDBType.ADLIB_PIECE,
160+
PackagesPreR53.ExpectedPackageDBType.ADLIB_ACTION,
161161
]
162162

163163
export const addSteps = addMigrationSteps('1.50.0', [
@@ -871,10 +871,10 @@ export const addSteps = addMigrationSteps('1.50.0', [
871871
return false
872872
},
873873
migrate: async () => {
874-
const objects = await ExpectedPackages.findFetchAsync({
874+
const objects = (await ExpectedPackages.findFetchAsync({
875875
fromPieceType: { $in: EXPECTED_PACKAGE_TYPES_ADDED_PART_ID as any }, // Force the types, as the query does not match due to the interfaces
876876
partId: { $exists: false },
877-
})
877+
})) as unknown as Array<PackagesPreR53.ExpectedPackageDB>
878878

879879
const neededPieceIds: Array<PieceId | AdLibActionId | RundownBaselineAdLibActionId> = _.compact(
880880
objects.map((obj) => obj.pieceId)

meteor/server/publications/pieceContentStatusUI/__tests__/checkPieceContentStatus.test.ts

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import { MediaObjects } from '../../../collections'
3737
import { PieceDependencies } from '../common'
3838
import { DEFAULT_MINIMUM_TAKE_SPAN } from '@sofie-automation/shared-lib/dist/core/constants'
3939
import { PieceContentStatusMessageFactory } from '../messageFactory'
40+
import { RundownId } from '@sofie-automation/corelib/dist/dataModel/Ids'
4041

4142
const mockMediaObjectsCollection = MongoMock.getInnerMockCollection<MediaObject>(MediaObjects)
4243

@@ -450,9 +451,17 @@ describe('lib/mediaObjects', () => {
450451
timelineObjectsString: EmptyPieceTimelineObjectsBlob,
451452
})
452453

454+
const mockOwnerId = protectString<RundownId>('rundown0')
455+
453456
const messageFactory = new PieceContentStatusMessageFactory(undefined)
454457

455-
const status1 = await checkPieceContentStatusAndDependencies(mockStudio, messageFactory, piece1, sourcelayer1)
458+
const status1 = await checkPieceContentStatusAndDependencies(
459+
mockStudio,
460+
mockOwnerId,
461+
messageFactory,
462+
piece1,
463+
sourcelayer1
464+
)
456465
expect(status1[0].status).toEqual(PieceStatusCode.OK)
457466
expect(status1[0].messages).toHaveLength(0)
458467
expect(status1[1]).toMatchObject(
@@ -463,7 +472,13 @@ describe('lib/mediaObjects', () => {
463472
})
464473
)
465474

466-
const status2 = await checkPieceContentStatusAndDependencies(mockStudio, messageFactory, piece2, sourcelayer1)
475+
const status2 = await checkPieceContentStatusAndDependencies(
476+
mockStudio,
477+
mockOwnerId,
478+
messageFactory,
479+
piece2,
480+
sourcelayer1
481+
)
467482
expect(status2[0].status).toEqual(PieceStatusCode.SOURCE_BROKEN)
468483
expect(status2[0].messages).toHaveLength(1)
469484
expect(status2[0].messages[0]).toMatchObject({
@@ -477,7 +492,13 @@ describe('lib/mediaObjects', () => {
477492
})
478493
)
479494

480-
const status3 = await checkPieceContentStatusAndDependencies(mockStudio, messageFactory, piece3, sourcelayer1)
495+
const status3 = await checkPieceContentStatusAndDependencies(
496+
mockStudio,
497+
mockOwnerId,
498+
messageFactory,
499+
piece3,
500+
sourcelayer1
501+
)
481502
expect(status3[0].status).toEqual(PieceStatusCode.SOURCE_MISSING)
482503
expect(status3[0].messages).toHaveLength(1)
483504
expect(status3[0].messages[0]).toMatchObject({

meteor/server/publications/pieceContentStatusUI/bucket/regenerateForItem.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ export async function regenerateForBucketAdLibIds(
4747
if (sourceLayer) {
4848
const [status, itemDependencies] = await checkPieceContentStatusAndDependencies(
4949
uiStudio,
50+
actionDoc.bucketId,
5051
messageFactories.get(actionDoc.showStyleBaseId),
5152
actionDoc,
5253
sourceLayer
@@ -119,6 +120,7 @@ export async function regenerateForBucketActionIds(
119120

120121
const [status, itemDependencies] = await checkPieceContentStatusAndDependencies(
121122
uiStudio,
123+
actionDoc.bucketId,
122124
messageFactories.get(actionDoc.showStyleBaseId),
123125
fakedPiece,
124126
sourceLayer

meteor/server/publications/pieceContentStatusUI/checkPieceContentStatus.ts

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,19 @@ import {
1010
SourceLayerType,
1111
VTContent,
1212
} from '@sofie-automation/blueprints-integration'
13-
import { getExpectedPackageId } from '@sofie-automation/corelib/dist/dataModel/ExpectedPackages'
14-
import { ExpectedPackageId, PeripheralDeviceId, PieceInstanceId } from '@sofie-automation/corelib/dist/dataModel/Ids'
13+
import {
14+
ExpectedPackageDBType,
15+
getExpectedPackageId,
16+
getExpectedPackageIdFromIngestSource,
17+
} from '@sofie-automation/corelib/dist/dataModel/ExpectedPackages'
18+
import {
19+
BucketId,
20+
ExpectedPackageId,
21+
PeripheralDeviceId,
22+
PieceInstanceId,
23+
RundownId,
24+
StudioId,
25+
} from '@sofie-automation/corelib/dist/dataModel/Ids'
1526
import {
1627
getPackageContainerPackageId,
1728
PackageContainerPackageStatusDB,
@@ -211,6 +222,7 @@ export interface PieceContentStatusStudio
211222

212223
export async function checkPieceContentStatusAndDependencies(
213224
studio: PieceContentStatusStudio,
225+
packageOwnerId: RundownId | BucketId | StudioId,
214226
messageFactory: PieceContentStatusMessageFactory | undefined,
215227
piece: PieceContentStatusPiece,
216228
sourceLayer: ISourceLayer
@@ -260,6 +272,7 @@ export async function checkPieceContentStatusAndDependencies(
260272
piece,
261273
sourceLayer,
262274
studio,
275+
packageOwnerId,
263276
getPackageInfos,
264277
getPackageContainerPackageStatus,
265278
messageFactory || DEFAULT_MESSAGE_FACTORY
@@ -559,6 +572,7 @@ async function checkPieceContentExpectedPackageStatus(
559572
piece: PieceContentStatusPiece,
560573
sourceLayer: ISourceLayer,
561574
studio: PieceContentStatusStudio,
575+
packageOwnerId: RundownId | BucketId | StudioId,
562576
getPackageInfos: (packageId: ExpectedPackageId) => Promise<PackageInfoLight[]>,
563577
getPackageContainerPackageStatus: (
564578
packageContainerId: string,
@@ -627,7 +641,20 @@ async function checkPieceContentExpectedPackageStatus(
627641

628642
checkedPackageContainers.add(matchedPackageContainer[0])
629643

630-
const expectedPackageIds = [getExpectedPackageId(piece._id, expectedPackage._id)]
644+
const expectedPackageIds = [
645+
// Syntehise 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+
]
631658
if (piece.pieceInstanceId) {
632659
// If this is a PieceInstance, try looking up the PieceInstance first
633660
expectedPackageIds.unshift(getExpectedPackageId(piece.pieceInstanceId, expectedPackage._id))

meteor/server/publications/pieceContentStatusUI/rundown/regenerateItems.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ async function regenerateGenericPiece(
4545
if (part && segment && sourceLayer) {
4646
const [status, dependencies] = await checkPieceContentStatusAndDependencies(
4747
uiStudio,
48+
part.rundownId,
4849
messageFactory,
4950
pieceDoc,
5051
sourceLayer
@@ -169,6 +170,7 @@ export async function regenerateForPieceInstanceIds(
169170
if (partInstance && segment && sourceLayer) {
170171
const [status, dependencies] = await checkPieceContentStatusAndDependencies(
171172
uiStudio,
173+
pieceDoc.rundownId,
172174
messageFactories.get(pieceDoc.rundownId),
173175
{
174176
...pieceDoc.piece,
@@ -367,6 +369,7 @@ export async function regenerateForBaselineAdLibPieceIds(
367369
if (sourceLayer) {
368370
const [status, dependencies] = await checkPieceContentStatusAndDependencies(
369371
uiStudio,
372+
pieceDoc.rundownId,
370373
messageFactories.get(pieceDoc.rundownId),
371374
pieceDoc,
372375
sourceLayer
@@ -447,6 +450,7 @@ export async function regenerateForBaselineAdLibActionIds(
447450
if (sourceLayer) {
448451
const [status, dependencies] = await checkPieceContentStatusAndDependencies(
449452
uiStudio,
453+
actionDoc.rundownId,
450454
messageFactories.get(actionDoc.rundownId),
451455
fakedPiece,
452456
sourceLayer

packages/corelib/src/dataModel/ExpectedPackages.ts

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -172,21 +172,23 @@ export function getContentVersionHash(expectedPackage: ReadonlyDeep<Omit<Expecte
172172

173173
export function getExpectedPackageId(
174174
/** _id of the owner (the piece, adlib etc..) */
175-
ownerId:
176-
| PieceId
177-
| PieceInstanceId
178-
| AdLibActionId
179-
| RundownBaselineAdLibActionId
180-
| BucketAdLibId
181-
| BucketAdLibActionId
182-
| RundownId
183-
| StudioId,
175+
ownerId: PieceInstanceId,
176+
// | AdLibActionId
177+
// | RundownBaselineAdLibActionId
178+
// | BucketAdLibId
179+
// | BucketAdLibActionId
180+
// | RundownId
181+
// | StudioId,
184182
/** The locally unique id of the expectedPackage */
185183
localExpectedPackageId: ExpectedPackage.Base['_id']
186184
): ExpectedPackageId {
187185
return protectString(`${ownerId}_${getHash(localExpectedPackageId)}`)
188186
}
189187

188+
/**
189+
* Generate the temporary expectedPackageId for the given package.
190+
* Note: This will soon be replaced with a new flow based on the contentVersionHash once shared ownership is implemented.
191+
*/
190192
export function getExpectedPackageIdFromIngestSource(
191193
/** Preferably a RundownId or BucketId, but StudioId is allowed when not owned by a rundown or bucket */
192194
parentId: RundownId | StudioId | BucketId,
@@ -199,14 +201,8 @@ export function getExpectedPackageIdFromIngestSource(
199201
switch (source.fromPieceType) {
200202
case ExpectedPackageDBType.PIECE:
201203
case ExpectedPackageDBType.ADLIB_PIECE:
202-
ownerId = unprotectString(source.pieceId)
203-
break
204204
case ExpectedPackageDBType.ADLIB_ACTION:
205-
ownerId = unprotectString(source.pieceId)
206-
break
207205
case ExpectedPackageDBType.BASELINE_ADLIB_PIECE:
208-
ownerId = unprotectString(source.pieceId)
209-
break
210206
case ExpectedPackageDBType.BASELINE_ADLIB_ACTION:
211207
ownerId = unprotectString(source.pieceId)
212208
break
@@ -216,6 +212,11 @@ export function getExpectedPackageIdFromIngestSource(
216212
case ExpectedPackageDBType.STUDIO_BASELINE_OBJECTS:
217213
ownerId = 'studioBaseline'
218214
break
215+
case ExpectedPackageDBType.BUCKET_ADLIB:
216+
case ExpectedPackageDBType.BUCKET_ADLIB_ACTION:
217+
ownerId = unprotectString(source.pieceId)
218+
break
219+
219220
default:
220221
assertNever(source)
221222
throw new Error(`Unknown fromPieceType "${ownerPieceType}"`)

0 commit comments

Comments
 (0)