/
ExpectedPackages.ts
147 lines (133 loc) · 5.01 KB
/
ExpectedPackages.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
import { ExpectedPackage, Time } from '@sofie-automation/blueprints-integration'
import { protectString } from '../protectedString'
import { getHash, hashObj } from '../lib'
import {
AdLibActionId,
BucketAdLibActionId,
BucketAdLibId,
BucketId,
ExpectedPackageId,
PieceId,
RundownBaselineAdLibActionId,
RundownId,
SegmentId,
StudioId,
} from './Ids'
/*
Expected Packages are created from Pieces in the rundown.
A "Package" is a generic term for a "thing that can be played", such as media files, audio, graphics etc..
The blueprints generate Pieces with expectedPackages on them.
These are then picked up by a Package Manager who then tries to fullfill the expectations.
Example: An ExpectedPackage could be a "Media file to be present on the location used by a playout device".
The Package Manager will then copy the file to the right place.
*/
export type ExpectedPackageFromRundown =
| ExpectedPackageDBFromPiece
| ExpectedPackageDBFromAdLibAction
| ExpectedPackageDBFromBaselineAdLibAction
| ExpectedPackageDBFromBaselineAdLibPiece
export type ExpectedPackageDB =
| ExpectedPackageFromRundown
| ExpectedPackageDBFromBucketAdLib
| ExpectedPackageDBFromBucketAdLibAction
| ExpectedPackageDBFromRundownBaselineObjects
| ExpectedPackageDBFromStudioBaselineObjects
export enum ExpectedPackageDBType {
PIECE = 'piece',
ADLIB_PIECE = 'adlib_piece',
ADLIB_ACTION = 'adlib_action',
BASELINE_ADLIB_PIECE = 'baseline_adlib_piece',
BASELINE_ADLIB_ACTION = 'baseline_adlib_action',
BUCKET_ADLIB = 'bucket_adlib',
BUCKET_ADLIB_ACTION = 'bucket_adlib_action',
RUNDOWN_BASELINE_OBJECTS = 'rundown_baseline_objects',
STUDIO_BASELINE_OBJECTS = 'studio_baseline_objects',
}
export interface ExpectedPackageDBBase extends Omit<ExpectedPackage.Base, '_id'> {
_id: ExpectedPackageId
/** The local package id - as given by the blueprints */
blueprintPackageId: string
/** The studio of the Rundown of the Piece this package belongs to */
studioId: StudioId
/** Hash that changes whenever the content or version changes. See getContentVersionHash() */
contentVersionHash: string
// pieceId: ProtectedString<any> | null
fromPieceType: ExpectedPackageDBType
created: Time
}
export interface ExpectedPackageDBFromPiece extends ExpectedPackageDBBase {
fromPieceType: ExpectedPackageDBType.PIECE | ExpectedPackageDBType.ADLIB_PIECE
/** The Piece this package belongs to */
pieceId: PieceId
/** The Segment this package belongs to */
segmentId: SegmentId
/** The rundown of the Piece this package belongs to */
rundownId: RundownId
}
export interface ExpectedPackageDBFromBaselineAdLibPiece extends ExpectedPackageDBBase {
fromPieceType: ExpectedPackageDBType.BASELINE_ADLIB_PIECE
/** The Piece this package belongs to */
pieceId: PieceId
/** The rundown of the Piece this package belongs to */
rundownId: RundownId
}
export interface ExpectedPackageDBFromAdLibAction extends ExpectedPackageDBBase {
fromPieceType: ExpectedPackageDBType.ADLIB_ACTION
/** The Adlib Action this package belongs to */
pieceId: AdLibActionId
/** The Segment this package belongs to */
segmentId: SegmentId
/** The rundown of the Piece this package belongs to */
rundownId: RundownId
}
export interface ExpectedPackageDBFromBaselineAdLibAction extends ExpectedPackageDBBase {
fromPieceType: ExpectedPackageDBType.BASELINE_ADLIB_ACTION
/** The Piece this package belongs to */
pieceId: RundownBaselineAdLibActionId
/** The rundown of the Piece this package belongs to */
rundownId: RundownId
}
export interface ExpectedPackageDBFromRundownBaselineObjects extends ExpectedPackageDBBase {
fromPieceType: ExpectedPackageDBType.RUNDOWN_BASELINE_OBJECTS
/** The rundown of the Piece this package belongs to */
rundownId: RundownId
pieceId: null
}
export interface ExpectedPackageDBFromStudioBaselineObjects extends ExpectedPackageDBBase {
fromPieceType: ExpectedPackageDBType.STUDIO_BASELINE_OBJECTS
pieceId: null
}
export interface ExpectedPackageDBFromBucketAdLib extends ExpectedPackageDBBase {
fromPieceType: ExpectedPackageDBType.BUCKET_ADLIB
bucketId: BucketId
/** The Bucket adlib this package belongs to */
pieceId: BucketAdLibId
}
export interface ExpectedPackageDBFromBucketAdLibAction extends ExpectedPackageDBBase {
fromPieceType: ExpectedPackageDBType.BUCKET_ADLIB_ACTION
bucketId: BucketId
/** The Bucket adlib-action this package belongs to */
pieceId: BucketAdLibActionId
}
export function getContentVersionHash(expectedPackage: Omit<ExpectedPackage.Any, '_id'>): string {
return hashObj({
content: expectedPackage.content,
version: expectedPackage.version,
// todo: should expectedPackage.sources.containerId be here as well?
})
}
export function getExpectedPackageId(
/** _id of the owner (the piece, adlib etc..) */
ownerId:
| PieceId
| AdLibActionId
| RundownBaselineAdLibActionId
| BucketAdLibId
| BucketAdLibActionId
| RundownId
| StudioId,
/** The locally unique id of the expectedPackage */
localExpectedPackageId: ExpectedPackage.Base['_id']
): ExpectedPackageId {
return protectString(`${ownerId}_${getHash(localExpectedPackageId)}`)
}