Skip to content

Commit 4e91099

Browse files
committed
fix(LSG): expose package status as custom enum
1 parent 6cb24a9 commit 4e91099

File tree

3 files changed

+65
-11
lines changed

3 files changed

+65
-11
lines changed

packages/live-status-gateway/api/schemas/packages.yaml

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,27 @@ $defs:
3030
packageName:
3131
description: Name of the package
3232
type: string
33-
statusCode:
34-
description: Status code
35-
type: number
33+
status:
34+
type: string
35+
enum:
36+
- unknown
37+
- ok
38+
- source_broken
39+
- source_has_issues
40+
- source_missing
41+
- source_not_ready
42+
- source_not_set
43+
- source_unknown_state
44+
description: |
45+
Status:
46+
* `unknown` - status not determined (yet)
47+
* `ok` - no faults, can be played
48+
* `source_broken` - the source is present, but should not be played due to a technical malfunction (file is broken, camera robotics failed, REMOTE input is just bars, etc.)
49+
* `source_has_issues` - technically it can be played, but some issues with it were detected
50+
* `source_missing` - the source (file, live input) is missing and cannot be played
51+
* `source_not_ready` - can't be played for a non-technical reason (e.g. a placeholder clip with no content)
52+
* `source_not_set` - missing a file path
53+
* `source_unknown_state` - reported, but unrecognized state
3654
rundownId:
3755
description: Id of the Rundown that a Piece (or AdLib) expecting this package belongs to
3856
type: string
@@ -51,11 +69,11 @@ $defs:
5169
previewUrl:
5270
description: URL where the preview can be accessed
5371
type: string
54-
required: [statusCode, rundownId, pieceOrAdLibId]
72+
required: [status, rundownId, pieceOrAdLibId]
5573
additionalProperties: false
5674
examples:
5775
- packageName: 'MV000123.mxf'
58-
statusCode: 0
76+
status: ok
5977
rundownId: 'y9HauyWkcxQS3XaAOsW40BRLLsI_'
6078
pieceOrAdLibId: 'C6K_yIMuGFUk8X_L9A9_jRT6aq4_'
6179
thumbnailUrl: 'https://package-manager.local/package/MV000123.mov_thumbnail.jpg'

packages/live-status-gateway/src/topics/__tests__/packagesTopic.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { protectString, unprotectString } from '@sofie-automation/server-core-integration'
22
import { makeMockHandlers, makeMockLogger, makeMockSubscriber } from './utils'
3-
import { PackagesTopic } from '../packagesTopic'
3+
import { PackageStatus, PackagesTopic } from '../packagesTopic'
44
import { UIPieceContentStatus } from '@sofie-automation/corelib/dist/dataModel/PieceContentStatus'
55
import { PieceStatusCode } from '@sofie-automation/corelib/dist/dataModel/Piece'
66
import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist'
@@ -61,7 +61,7 @@ describe('PackagesTopic', () => {
6161
packages: [
6262
{
6363
packageName: 'Test Package',
64-
statusCode: PieceStatusCode.OK,
64+
status: PackageStatus.OK,
6565
pieceId: 'PIECE_0',
6666
rundownId: 'RUNDOWN_0',
6767
partId: 'PART_0',

packages/live-status-gateway/src/topics/packagesTopic.ts

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,13 @@ import { unprotectString } from '@sofie-automation/shared-lib/dist/lib/protected
66
import { UIPieceContentStatus } from '@sofie-automation/corelib/dist/dataModel/PieceContentStatus'
77
import { PieceStatusCode } from '@sofie-automation/corelib/dist/dataModel/Piece'
88
import { CollectionHandlers } from '../liveStatusServer'
9+
import { assertNever } from '@sofie-automation/server-core-integration'
910

1011
const THROTTLE_PERIOD_MS = 200
1112

12-
interface PackageStatus {
13+
interface Package {
1314
packageName?: string
14-
statusCode: PieceStatusCode
15+
status: PackageStatus
1516

1617
rundownId: string
1718
partId?: string
@@ -23,10 +24,21 @@ interface PackageStatus {
2324
previewUrl?: string
2425
}
2526

27+
export enum PackageStatus {
28+
UNKNOWN = 'unknown',
29+
OK = 'ok',
30+
SOURCE_BROKEN = 'source_broken',
31+
SOURCE_HAS_ISSUES = 'source_has_issues',
32+
SOURCE_MISSING = 'source_missing',
33+
SOURCE_NOT_READY = 'source_not_ready',
34+
SOURCE_NOT_SET = 'source_not_set',
35+
SOURCE_UNKNOWN_STATE = 'source_unknown_state',
36+
}
37+
2638
export interface PackagesStatus {
2739
event: 'packages'
2840
rundownPlaylistId: string | null
29-
packages: PackageStatus[]
41+
packages: Package[]
3042
}
3143

3244
const PLAYLIST_KEYS = ['_id', 'activationId'] as const
@@ -50,7 +62,7 @@ export class PackagesTopic extends WebSocketTopicBase implements WebSocketTopic
5062
rundownPlaylistId: this._activePlaylist ? unprotectString(this._activePlaylist._id) : null,
5163
packages: this._pieceContentStatuses.map((contentStatus) => ({
5264
packageName: contentStatus.status.packageName ?? undefined,
53-
statusCode: contentStatus.status.status,
65+
status: this.toStatusString(contentStatus.status.status),
5466
pieceId: unprotectString(contentStatus.pieceId),
5567
rundownId: unprotectString(contentStatus.rundownId),
5668
partId: unprotectString(contentStatus.partId),
@@ -65,6 +77,30 @@ export class PackagesTopic extends WebSocketTopicBase implements WebSocketTopic
6577
}
6678
}
6779

80+
private toStatusString(status: PieceStatusCode): PackageStatus {
81+
switch (status) {
82+
case PieceStatusCode.UNKNOWN:
83+
return PackageStatus.UNKNOWN
84+
case PieceStatusCode.OK:
85+
return PackageStatus.OK
86+
case PieceStatusCode.SOURCE_BROKEN:
87+
return PackageStatus.SOURCE_BROKEN
88+
case PieceStatusCode.SOURCE_HAS_ISSUES:
89+
return PackageStatus.SOURCE_HAS_ISSUES
90+
case PieceStatusCode.SOURCE_MISSING:
91+
return PackageStatus.SOURCE_MISSING
92+
case PieceStatusCode.SOURCE_NOT_READY:
93+
return PackageStatus.SOURCE_NOT_READY
94+
case PieceStatusCode.SOURCE_NOT_SET:
95+
return PackageStatus.SOURCE_NOT_SET
96+
case PieceStatusCode.SOURCE_UNKNOWN_STATE:
97+
return PackageStatus.SOURCE_UNKNOWN_STATE
98+
default:
99+
assertNever(status)
100+
return PackageStatus.UNKNOWN
101+
}
102+
}
103+
68104
private onPlaylistUpdate = (rundownPlaylist: Playlist | undefined): void => {
69105
this.logUpdateReceived(
70106
'playlist',

0 commit comments

Comments
 (0)