Skip to content

Commit

Permalink
Caspar fixes
Browse files Browse the repository at this point in the history
- Add type bridge.caspar.template.update
- Move all caspar data to item.data.caspar
- Fix serialization of template data

Signed-off-by: Axel Boberg <[email protected]>
  • Loading branch information
axelboberg committed Jan 6, 2024
1 parent 7eb0de9 commit df6d48f
Show file tree
Hide file tree
Showing 7 changed files with 38 additions and 12 deletions.
2 changes: 1 addition & 1 deletion api/items.js
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ function populateVariablesMutable (item, type) {
const currentValue = objectPath.get(item.data, key)

if (currentValue != null) {
objectPath.set(item.data, key, variables.substituteInString(`${currentValue}`))
objectPath.set(item.data, key, JSON.parse(variables.substituteInString(JSON.stringify(currentValue))))
}
}

Expand Down
2 changes: 1 addition & 1 deletion docs/api/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -290,7 +290,7 @@ Types are blueprints for items, they can be created and extended using the `cont
}
]
}
``
```

### `bridge.types.getType(id): Promise<TypeSpec>`
Render a full type specification from its id
Expand Down
6 changes: 4 additions & 2 deletions plugins/caspar/app/views/InspectorServer.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,10 @@ export const InspectorServer = () => {
function handleChange (newServer) {
for (const id of selection) {
bridge.items.applyItem(id, {
caspar: {
server: newServer
data: {
caspar: {
server: newServer
}
}
})
}
Expand Down
4 changes: 2 additions & 2 deletions plugins/caspar/app/views/InspectorTemplate.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ export const InspectorTemplate = () => {
handleNewValue({
data: {
caspar: {
templateData: newValue
templateData: JSON.parse(newValue)
}
}
})
Expand All @@ -48,7 +48,7 @@ export const InspectorTemplate = () => {
return (
<div className='View--spread'>
<Monaco
value={value || ['{', '\t"f0": "my value"', '}'].join('\n')}
value={value ? JSON.stringify(value, null, 2) : ['{', '\t"f0": "my value"', '}'].join('\n')}
onChange={newValue => handleChange(newValue)}
/>
</div>
Expand Down
11 changes: 11 additions & 0 deletions plugins/caspar/lib/AMCP.js
Original file line number Diff line number Diff line change
Expand Up @@ -119,3 +119,14 @@ exports.cgAdd = (template, data, playOnLoad = true, opts) => `CG ${layerString(o
* @returns { String }
*/
exports.cgStop = opts => `CG ${layerString(opts)} STOP ${opts.cgLayer ?? 1}`

/**
* Update a template
* @see https://github.com/CasparCG/help/wiki/AMCP-Protocol#cg-update
* @param { AMCPOptions } opts
* @returns { String }
*/
exports.cgUpdate = (data, opts) => {
console.log('Sending data', data)
return `CG ${layerString(opts)} UPDATE ${opts.cgLayer ?? 1} ${JSON.stringify(JSON.stringify(data))}`
}
18 changes: 12 additions & 6 deletions plugins/caspar/lib/handlers.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,25 +14,31 @@ const logger = new Logger({ name: 'CasparPlugin' })

const PLAY_HANDLERS = {
'bridge.caspar.clear': item => {
return commands.sendCommand(item?.caspar?.server, 'clear', item?.data?.caspar)
return commands.sendCommand(item?.data?.caspar?.server, 'clear', item?.data?.caspar)
},
'bridge.caspar.amcp': item => {
return commands.sendString(item?.caspar?.server, item?.data?.caspar?.amcp)
return commands.sendString(item?.data?.caspar?.server, item?.data?.caspar?.amcp)
},
'bridge.caspar.media': item => {
return commands.sendCommand(item?.caspar?.server, 'play', item?.data?.caspar?.target, item?.data?.caspar)
return commands.sendCommand(item?.data?.caspar?.server, 'play', item?.data?.caspar?.target, item?.data?.caspar)
},
'bridge.caspar.template': item => {
return commands.sendCommand(item?.caspar?.server, 'cgAdd', item?.data?.caspar?.target, item?.data?.caspar?.templateData, true, item?.data?.caspar)
return commands.sendCommand(item?.data?.caspar?.server, 'cgAdd', item?.data?.caspar?.target, item?.data?.caspar?.templateData, true, item?.data?.caspar)
},
'bridge.caspar.template.update': item => {
return commands.sendCommand(item?.data?.caspar?.server, 'cgUpdate', item?.data?.caspar?.templateData, item?.data?.caspar)
}
}

const STOP_HANDLERS = {
'bridge.caspar.media': item => {
return commands.sendCommand(item?.caspar?.server, 'stop', item?.data?.caspar)
return commands.sendCommand(item?.data?.caspar?.server, 'stop', item?.data?.caspar)
},
'bridge.caspar.template': item => {
return commands.sendCommand(item?.caspar?.server, 'cgStop', item?.data?.caspar)
return commands.sendCommand(item?.data?.caspar?.server, 'cgStop', item?.data?.caspar)
},
'bridge.caspar.template.update': item => {
return commands.sendCommand(item?.data?.caspar?.server, 'cgStop', item?.data?.caspar)
}
}

Expand Down
7 changes: 7 additions & 0 deletions plugins/caspar/lib/types.js
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,13 @@ function init (htmlPath) {
}
})

bridge.types.registerType({
id: 'bridge.caspar.template.update',
name: 'Template update',
category: 'Caspar',
inherits: 'bridge.caspar.template'
})

bridge.types.registerType({
id: 'bridge.caspar.clear',
name: 'Clear',
Expand Down

0 comments on commit df6d48f

Please sign in to comment.