@@ -2,21 +2,12 @@ import { BucketAdLibAction } from '@sofie-automation/corelib/dist/dataModel/Buck
22import { BucketAdLib } from '@sofie-automation/corelib/dist/dataModel/BucketAdLibPiece'
33import {
44 ExpectedPackageDBType ,
5- ExpectedPackageDBFromBucketAdLib ,
6- ExpectedPackageDBFromBucketAdLibAction ,
7- ExpectedPackageDBBase ,
85 getContentVersionHash ,
9- getExpectedPackageId ,
6+ ExpectedPackageDBNew ,
7+ getExpectedPackageIdFromIngestSource ,
8+ ExpectedPackageIngestSource ,
109} from '@sofie-automation/corelib/dist/dataModel/ExpectedPackages'
11- import {
12- RundownId ,
13- AdLibActionId ,
14- PieceId ,
15- RundownBaselineAdLibActionId ,
16- BucketAdLibActionId ,
17- BucketAdLibId ,
18- StudioId ,
19- } from '@sofie-automation/corelib/dist/dataModel/Ids'
10+ import { AdLibActionId , PieceId , BucketId } from '@sofie-automation/corelib/dist/dataModel/Ids'
2011import { saveIntoDb } from '../db/changes'
2112import { PlayoutModel } from '../playout/model/PlayoutModel'
2213import { StudioPlayoutModel } from '../studio/model/StudioPlayoutModel'
@@ -47,97 +38,152 @@ export async function updateExpectedMediaAndPlayoutItemsForRundownBaseline(
4738 await updateExpectedPlayoutItemsForRundownBaseline ( context , ingestModel , baseline )
4839}
4940
50- function generateExpectedPackagesForBucketAdlib ( studio : ReadonlyDeep < JobStudio > , adlibs : BucketAdLib [ ] ) {
51- const packages : ExpectedPackageDBFromBucketAdLib [ ] = [ ]
52- for ( const adlib of adlibs ) {
53- if ( adlib . expectedPackages ) {
54- const bases = generateExpectedPackageBases ( studio , adlib . _id , adlib . expectedPackages )
55- for ( const base of bases ) {
56- packages . push ( {
57- ...base ,
58- bucketId : adlib . bucketId ,
41+ function generateExpectedPackagesForBucketAdlib ( studio : ReadonlyDeep < JobStudio > , adlib : BucketAdLib ) {
42+ const packages : ExpectedPackageDBNew [ ] = [ ]
43+
44+ if ( adlib . expectedPackages ) {
45+ packages . push (
46+ ...generateBucketExpectedPackages (
47+ studio ,
48+ adlib . bucketId ,
49+ {
50+ fromPieceType : ExpectedPackageDBType . BUCKET_ADLIB ,
5951 pieceId : adlib . _id ,
6052 pieceExternalId : adlib . externalId ,
61- fromPieceType : ExpectedPackageDBType . BUCKET_ADLIB ,
62- } )
63- }
64- }
53+ } ,
54+ adlib . expectedPackages
55+ )
56+ )
6557 }
58+
6659 return packages
6760}
68- function generateExpectedPackagesForBucketAdlibAction (
69- studio : ReadonlyDeep < JobStudio > ,
70- adlibActions : BucketAdLibAction [ ]
71- ) {
72- const packages : ExpectedPackageDBFromBucketAdLibAction [ ] = [ ]
73- for ( const action of adlibActions ) {
74- if ( action . expectedPackages ) {
75- const bases = generateExpectedPackageBases ( studio , action . _id , action . expectedPackages )
76- for ( const base of bases ) {
77- packages . push ( {
78- ...base ,
79- bucketId : action . bucketId ,
61+ function generateExpectedPackagesForBucketAdlibAction ( studio : ReadonlyDeep < JobStudio > , action : BucketAdLibAction ) {
62+ const packages : ExpectedPackageDBNew [ ] = [ ]
63+
64+ if ( action . expectedPackages ) {
65+ packages . push (
66+ ...generateBucketExpectedPackages (
67+ studio ,
68+ action . bucketId ,
69+ {
70+ fromPieceType : ExpectedPackageDBType . BUCKET_ADLIB_ACTION ,
8071 pieceId : action . _id ,
8172 pieceExternalId : action . externalId ,
82- fromPieceType : ExpectedPackageDBType . BUCKET_ADLIB_ACTION ,
83- } )
84- }
85- }
73+ } ,
74+ action . expectedPackages
75+ )
76+ )
8677 }
78+
8779 return packages
8880}
89- function generateExpectedPackageBases (
81+ function generateBucketExpectedPackages (
9082 studio : ReadonlyDeep < JobStudio > ,
91- ownerId :
92- | PieceId
93- | AdLibActionId
94- | RundownBaselineAdLibActionId
95- | BucketAdLibId
96- | BucketAdLibActionId
97- | RundownId
98- | StudioId ,
83+ bucketId : BucketId ,
84+ source : ExpectedPackageIngestSource ,
9985 expectedPackages : ReadonlyDeep < ExpectedPackage . Any [ ] >
100- ) {
101- const bases : Omit < ExpectedPackageDBBase , 'pieceId' | 'fromPieceType' > [ ] = [ ]
86+ ) : ExpectedPackageDBNew [ ] {
87+ const bases : ExpectedPackageDBNew [ ] = [ ]
10288
10389 for ( let i = 0 ; i < expectedPackages . length ; i ++ ) {
10490 const expectedPackage = expectedPackages [ i ]
10591 const id = expectedPackage . _id || '__unnamed' + i
10692
10793 bases . push ( {
108- ...clone < ExpectedPackage . Any > ( expectedPackage ) ,
109- _id : getExpectedPackageId ( ownerId , id ) ,
110- blueprintPackageId : id ,
94+ _id : getExpectedPackageIdFromIngestSource ( bucketId , source , id ) ,
95+ package : {
96+ ...clone < ExpectedPackage . Any > ( expectedPackage ) ,
97+ _id : id ,
98+ } ,
11199 contentVersionHash : getContentVersionHash ( expectedPackage ) ,
112100 studioId : studio . _id ,
113- created : Date . now ( ) ,
101+ rundownId : null ,
102+ bucketId : bucketId ,
103+ created : Date . now ( ) , // This will be preserved during the `saveIntoDb`
104+ ingestSources : [ source ] ,
114105 } )
115106 }
107+
116108 return bases
117109}
118110
119111export async function updateExpectedPackagesForBucketAdLibPiece (
120112 context : JobContext ,
121113 adlib : BucketAdLib
122114) : Promise < void > {
123- const packages = generateExpectedPackagesForBucketAdlib ( context . studio , [ adlib ] )
115+ const packages = generateExpectedPackagesForBucketAdlib ( context . studio , adlib )
124116
125- await saveIntoDb ( context , context . directCollections . ExpectedPackages , { pieceId : adlib . _id } , packages )
117+ await saveIntoDb (
118+ context ,
119+ context . directCollections . ExpectedPackages ,
120+ {
121+ studioId : context . studioId ,
122+ bucketId : adlib . bucketId ,
123+ // Note: This assumes that there is only one ingest source for each piece
124+ ingestSources : {
125+ $elemMatch : {
126+ fromPieceType : ExpectedPackageDBType . BUCKET_ADLIB ,
127+ pieceId : adlib . _id ,
128+ } ,
129+ } ,
130+ } ,
131+ packages ,
132+ {
133+ beforeDiff : ( obj , oldObj ) => {
134+ return {
135+ ...obj ,
136+ // Preserve old created timestamp
137+ created : oldObj . created ,
138+ }
139+ } ,
140+ }
141+ )
126142}
127143
128144export async function updateExpectedPackagesForBucketAdLibAction (
129145 context : JobContext ,
130146 action : BucketAdLibAction
131147) : Promise < void > {
132- const packages = generateExpectedPackagesForBucketAdlibAction ( context . studio , [ action ] )
148+ const packages = generateExpectedPackagesForBucketAdlibAction ( context . studio , action )
133149
134- await saveIntoDb ( context , context . directCollections . ExpectedPackages , { pieceId : action . _id } , packages )
150+ await saveIntoDb (
151+ context ,
152+ context . directCollections . ExpectedPackages ,
153+ {
154+ studioId : context . studioId ,
155+ bucketId : action . bucketId ,
156+ // Note: This assumes that there is only one ingest source for each piece
157+ ingestSources : {
158+ $elemMatch : {
159+ fromPieceType : ExpectedPackageDBType . BUCKET_ADLIB_ACTION ,
160+ pieceId : action . _id ,
161+ } ,
162+ } ,
163+ } ,
164+ packages ,
165+ {
166+ beforeDiff : ( obj , oldObj ) => {
167+ return {
168+ ...obj ,
169+ // Preserve old created timestamp
170+ created : oldObj . created ,
171+ }
172+ } ,
173+ }
174+ )
135175}
176+
136177export async function cleanUpExpectedPackagesForBucketAdLibs ( context : JobContext , adLibIds : PieceId [ ] ) : Promise < void > {
137178 if ( adLibIds . length > 0 ) {
138179 await context . directCollections . ExpectedPackages . remove ( {
139- pieceId : {
140- $in : adLibIds ,
180+ studioId : context . studioId ,
181+ // Note: This assumes that there is only one ingest source for each piece
182+ ingestSources : {
183+ $elemMatch : {
184+ fromPieceType : ExpectedPackageDBType . BUCKET_ADLIB ,
185+ pieceId : { $in : adLibIds } ,
186+ } ,
141187 } ,
142188 } )
143189 }
@@ -148,8 +194,13 @@ export async function cleanUpExpectedPackagesForBucketAdLibsActions(
148194) : Promise < void > {
149195 if ( adLibIds . length > 0 ) {
150196 await context . directCollections . ExpectedPackages . remove ( {
151- pieceId : {
152- $in : adLibIds ,
197+ studioId : context . studioId ,
198+ // Note: This assumes that there is only one ingest source for each piece
199+ ingestSources : {
200+ $elemMatch : {
201+ fromPieceType : ExpectedPackageDBType . BUCKET_ADLIB ,
202+ pieceId : { $in : adLibIds } ,
203+ } ,
153204 } ,
154205 } )
155206 }
0 commit comments