Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: NORA Core Device (SOFIE-1377) #239

Draft
wants to merge 11 commits into
base: release48
Choose a base branch
from
Draft
23 changes: 23 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,29 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.

# [7.5.0-release47.5](https://github.com/nrkno/sofie-timeline-state-resolver/compare/7.5.0-release47.4...7.5.0-release47.5) (2023-01-16)

**Note:** Version bump only for package timeline-state-resolver-packages





# [7.5.0-release47.4](https://github.com/nrkno/sofie-timeline-state-resolver/compare/7.5.0-release47.3...7.5.0-release47.4) (2023-01-13)


### Bug Fixes

* add optional parameter to HTTPSend timelineObj: paramsType ([979dc61](https://github.com/nrkno/sofie-timeline-state-resolver/commit/979dc61748c4c371a8b17c7fd8c5929c69f747d9))
* add support for Node 18 ([6242dd6](https://github.com/nrkno/sofie-timeline-state-resolver/commit/6242dd68f54a491aa71bdfd30b066550d6f7e90e))
* bug fix: HTTPSend device didn't send GET requests ([8315531](https://github.com/nrkno/sofie-timeline-state-resolver/commit/83155314706497a9c630dbde14d5c5d7e57103cf))
* prevent in place reverse in setDatastore ([473ab71](https://github.com/nrkno/sofie-timeline-state-resolver/commit/473ab713785325c2062db983c8ece80ea5dede4d))
* track ccg state internally ([fd5596f](https://github.com/nrkno/sofie-timeline-state-resolver/commit/fd5596fcf975a7a122c6fb21946f13c2e97a4233))





# [7.5.0-release47.3](https://github.com/nrkno/sofie-timeline-state-resolver/compare/7.5.0-release47.2...7.5.0-release47.3) (2022-11-07)

**Note:** Version bump only for package timeline-state-resolver-packages
Expand Down
2 changes: 1 addition & 1 deletion lerna.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"version": "7.5.0-release47.3",
"version": "7.5.0-release47.5",
"npmClient": "yarn",
"useWorkspaces": true
}
11 changes: 11 additions & 0 deletions packages/timeline-state-resolver-types/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,17 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.

# [7.5.0-release47.5](https://github.com/nrkno/sofie-timeline-state-resolver/compare/7.5.0-release47.4...7.5.0-release47.5) (2023-01-16)

**Note:** Version bump only for package timeline-state-resolver-types

# [7.5.0-release47.4](https://github.com/nrkno/sofie-timeline-state-resolver/compare/7.5.0-release47.3...7.5.0-release47.4) (2023-01-13)

### Bug Fixes

- add optional parameter to HTTPSend timelineObj: paramsType ([979dc61](https://github.com/nrkno/sofie-timeline-state-resolver/commit/979dc61748c4c371a8b17c7fd8c5929c69f747d9))
- add support for Node 18 ([6242dd6](https://github.com/nrkno/sofie-timeline-state-resolver/commit/6242dd68f54a491aa71bdfd30b066550d6f7e90e))

# [7.5.0-release47.3](https://github.com/nrkno/sofie-timeline-state-resolver/compare/7.5.0-release47.2...7.5.0-release47.3) (2022-11-07)

**Note:** Version bump only for package timeline-state-resolver-types
Expand Down
2 changes: 1 addition & 1 deletion packages/timeline-state-resolver-types/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "timeline-state-resolver-types",
"version": "7.5.0-release47.3",
"version": "7.5.0-release47.5",
"description": "Have timeline, control stuff",
"main": "dist/index.js",
"typings": "dist/index.d.ts",
Expand Down
6 changes: 6 additions & 0 deletions packages/timeline-state-resolver-types/src/device.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import {
HTTPWatcherOptions,
VizMSEOptions,
VMixOptions,
NoraNRKOptions,
} from '.'
import { ShotokuOptions } from './shotoku'
import { TelemetricsOptions } from './telemetrics'
Expand Down Expand Up @@ -74,6 +75,7 @@ export type DeviceOptionsAny =
| DeviceOptionsVizMSE
| DeviceOptionsShotoku
| DeviceOptionsTelemetrics
| DeviceOptionsNoraNRK

export interface DeviceOptionsAbstract extends DeviceOptionsBase<AbstractOptions> {
type: DeviceType.ABSTRACT
Expand Down Expand Up @@ -137,3 +139,7 @@ export interface DeviceOptionsVMix extends DeviceOptionsBase<VMixOptions> {
export interface DeviceOptionsTelemetrics extends DeviceOptionsBase<TelemetricsOptions> {
type: DeviceType.TELEMETRICS
}

export interface DeviceOptionsNoraNRK extends DeviceOptionsBase<NoraNRKOptions> {
type: DeviceType.NORA_NRK
}
4 changes: 4 additions & 0 deletions packages/timeline-state-resolver-types/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import { TimelineObjVIZMSEAny } from './vizMSE'
import { TimelineObjSingularLiveAny } from './singularLive'
import { TimelineObjVMixAny } from './vmix'
import { TimelineObjOBSAny } from './obs'
import { TimelineObjNoraNRKAny } from './noraNRK'

export * from './abstract'
export * from './atem'
Expand All @@ -40,6 +41,7 @@ export * from './singularLive'
export * from './vmix'
export * from './obs'
export * from './telemetrics'
export * from './noraNRK'

export * from './device'
export * from './mapping'
Expand Down Expand Up @@ -72,6 +74,7 @@ export enum DeviceType {
OBS = 21,
SOFIE_CHEF = 22,
TELEMETRICS = 23,
NORA_NRK = 24,
}

export interface TSRTimelineKeyframe<T> extends Timeline.TimelineKeyframe {
Expand Down Expand Up @@ -144,6 +147,7 @@ export type TSRTimelineObj =
| TimelineObjVMixAny
| TimelineObjVIZMSEAny
| TimelineObjTelemetricsAny
| TimelineObjNoraNRKAny

export type TSRTimeline = Array<TSRTimelineObj>

Expand Down
62 changes: 62 additions & 0 deletions packages/timeline-state-resolver-types/src/noraNRK.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
import { Mapping } from './mapping'
import { TSRTimelineObjBase, DeviceType, TimelineDatastoreReferencesContent } from '.'

export interface MappingNoraNRK extends Mapping {
device: DeviceType.NORA_NRK
}

export interface NoraNRKCommandContent {
group: string
groupSuffix?: string
channel: string
jstarpl marked this conversation as resolved.
Show resolved Hide resolved

payload:
| {
manifest?: string
template: {
name: string
event: 'take' | 'takeout' | 'preview'
layer: string
[key: string]: string | number | any
}
[key: string]: string | number | any
}
| {
template: {
event: 'takeout'
layer: string
}
}

temporalPriority?: number // default: 0
/** Commands in the same queue will be sent in order (will wait for the previous to finish before sending next */
queueId?: string
}
export interface NoraNRKOptions {
// Base URL for relative urls
coreUrl?: string

// API Key to be added as a query argument ?apiKey=
apiKey?: string

makeReadyCommands?: NoraNRKCommandContent[]
/** Whether a makeReady should be treated as a reset of the device. It should be assumed clean, with the queue discarded, and state reapplied from empty */
makeReadyDoesReset?: boolean

/** Minimum time in ms before a command is resent, set to <= 0 or undefined to disable */
resendTime?: number
}

export type TimelineObjNoraNRKAny = TimelineObjNoraNRKRequest
export interface TimelineObjNoraNRKBase extends TSRTimelineObjBase {
content: {
deviceType: DeviceType.NORA_NRK
// type: TimelineContentTypeCasparCg
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be good to have a type field here. This is something that becomes required with the json schemas in r49

}
}
export interface TimelineObjNoraNRKRequest extends TimelineObjNoraNRKBase {
content: {
deviceType: DeviceType.NORA_NRK
} & NoraNRKCommandContent &
TimelineDatastoreReferencesContent
}
23 changes: 23 additions & 0 deletions packages/timeline-state-resolver/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,29 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.

# [7.5.0-release47.5](https://github.com/nrkno/tv-automation-state-timeline-resolver/compare/7.5.0-release47.4...7.5.0-release47.5) (2023-01-16)

**Note:** Version bump only for package timeline-state-resolver





# [7.5.0-release47.4](https://github.com/nrkno/tv-automation-state-timeline-resolver/compare/7.5.0-release47.3...7.5.0-release47.4) (2023-01-13)


### Bug Fixes

* add optional parameter to HTTPSend timelineObj: paramsType ([979dc61](https://github.com/nrkno/tv-automation-state-timeline-resolver/commit/979dc61748c4c371a8b17c7fd8c5929c69f747d9))
* add support for Node 18 ([6242dd6](https://github.com/nrkno/tv-automation-state-timeline-resolver/commit/6242dd68f54a491aa71bdfd30b066550d6f7e90e))
* bug fix: HTTPSend device didn't send GET requests ([8315531](https://github.com/nrkno/tv-automation-state-timeline-resolver/commit/83155314706497a9c630dbde14d5c5d7e57103cf))
* prevent in place reverse in setDatastore ([473ab71](https://github.com/nrkno/tv-automation-state-timeline-resolver/commit/473ab713785325c2062db983c8ece80ea5dede4d))
* track ccg state internally ([fd5596f](https://github.com/nrkno/tv-automation-state-timeline-resolver/commit/fd5596fcf975a7a122c6fb21946f13c2e97a4233))





# [7.5.0-release47.3](https://github.com/nrkno/tv-automation-state-timeline-resolver/compare/7.5.0-release47.2...7.5.0-release47.3) (2022-11-07)

**Note:** Version bump only for package timeline-state-resolver
Expand Down
6 changes: 3 additions & 3 deletions packages/timeline-state-resolver/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "timeline-state-resolver",
"version": "7.5.0-release47.3",
"version": "7.5.0-release47.5",
"description": "Have timeline, control stuff",
"main": "dist/index.js",
"typings": "dist/index.d.ts",
Expand Down Expand Up @@ -90,7 +90,7 @@
"atem-connection": "2.4.0",
"atem-state": "^0.12.2",
"casparcg-connection": "^5.1.0",
"casparcg-state": "2.1.2",
"casparcg-state": "2.1.3",
"debug": "^4.3.1",
"deepmerge": "^4.2.2",
"emberplus-connection": "^0.1.2",
Expand All @@ -106,7 +106,7 @@
"sprintf-js": "^1.1.2",
"superfly-timeline": "^8.3.1",
"threadedclass": "^1.1.1",
"timeline-state-resolver-types": "7.5.0-release47.3",
"timeline-state-resolver-types": "7.5.0-release47.5",
"tslib": "^2.3.1",
"tv-automation-quantel-gateway-client": "^2.0.5",
"underscore": "^1.13.4",
Expand Down
11 changes: 11 additions & 0 deletions packages/timeline-state-resolver/src/conductor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ import { VizMSEDevice, DeviceOptionsVizMSEInternal } from './integrations/vizMSE
import { ShotokuDevice, DeviceOptionsShotokuInternal } from './integrations/shotoku'
import { DeviceOptionsSofieChefInternal, SofieChefDevice } from './integrations/sofieChef'
import { TelemetricsDevice } from './integrations/telemetrics'
import { NoraNRKDevice, DeviceOptionsNoraNRKInternal } from './integrations/noraNRK'

export { DeviceContainer }
export { CommandWithContext }
Expand Down Expand Up @@ -611,6 +612,15 @@ export class Conductor extends EventEmitter<ConductorEvents> {
getCurrentTime,
threadedClassOptions
)
} else if (deviceOptions.type === DeviceType.NORA_NRK) {
newDevice = await DeviceContainer.create<DeviceOptionsNoraNRKInternal, typeof NoraNRKDevice>(
'../../dist/integrations/noraNRK/index.js',
'NoraNRKDevice',
deviceId,
deviceOptions,
getCurrentTime,
threadedClassOptions
)
} else {
// @ts-ignore deviceOptions.type is of type "never"
const type: any = deviceOptions.type
Expand Down Expand Up @@ -1493,6 +1503,7 @@ export type DeviceOptionsAnyInternal =
| DeviceOptionsShotokuInternal
| DeviceOptionsVizMSEInternal
| DeviceOptionsTelemetrics
| DeviceOptionsNoraNRKInternal

function removeParentFromState(o: TimelineState): TimelineState {
for (const key in o) {
Expand Down
Loading