Skip to content

Commit

Permalink
Merge branch 'main' into fix/change-canvas-lib
Browse files Browse the repository at this point in the history
# Conflicts:
#	companion/package.json
#	yarn.lock
  • Loading branch information
Julusian committed May 16, 2024
2 parents eeb4b03 + fda75e2 commit 17d5f40
Show file tree
Hide file tree
Showing 46 changed files with 1,631 additions and 984 deletions.
35 changes: 35 additions & 0 deletions .github/workflows/pr-type-check.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name: Check types
on: [pull_request]

jobs:
check-types:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version-file: '.node-version'

- name: Prepare
run: |
corepack enable
# try and avoid timeout errors
yarn config set httpTimeout 100000
yarn --immutable
yarn build:ts
- name: Check types (server)
run: |
cd companion
yarn check-types
- name: Check types (client)
run: |
cd webui
yarn check-types
187 changes: 187 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,192 @@
# Bitfocus Companion

## Companion v3.3.0 - Release Notes

### 📣 CORE FEATURES AND IMPROVEMENTS

- Improvements to code flow and performance of webui
- Add swap button to UI #2740

- Support 'local' variables in all internal actions, feedbacks and button text
- Support 'local' variables from modules (Note: modules need to opt into this)
- Shared udp listener #2399 (#2754)
- Extend expression syntax:
- support for creating and decomposing objects and arrays
- jsonpath function
- split to array expressions function #2559
- array join function (#2782)
- encode and decode functions (#2842)
- add 'startup' page option in surface actions and feedbacks
- replace variable picker dropdown #2344 (#2787)
- Support custom names for Step Tabs (#2783)
- Preset text sub-headings (#2846)
- Support for Streamdeck Neo
- Support for older Loupedeck CT models
- Support for coordinates in Elgato software plugin (requires 3.0.0 of the plugin)

### 🐞 BUG FIXES

- support the new location system in companion cloud
- preset text not allowing expressions
- http api routes precedence #2820
- improve custom variable naming consistency in the ui #2812
- fix importing a config with an unknown module fails
- ensure variables in presets button text get replaced correctly #2837
- typo causing a crash in loupedeck-ct integration #2744
- correct order of presets

### 🧩 NEW & UPDATED MODULES

- adder-infinity100xseries
- adder-xdip
- aimedia-lexilive
- aja-helo
- aja-kipro
- aja-kumo
- allenheath-ahm
- arkaos-mediamaster
- aten-matrix
- audiotechnica-discussionsystem
- aver-ptz
- avstumpfl-pixera
- aws-elementallive
- axeltechnology-cgplus
- axeltechnology-vjpro
- barco-clickshare
- barco-pulse
- behringer-xair
- binwiederhier-ntfy
- birddog-cloud
- birddog-ptz
- bitfocus-cloud
- bmd-atem
- bmd-hyperdeck
- bmd-smartview
- bmd-teranex
- bmd-webpresenter
- broadlink-remote
- bss-soundweb
- canon-ptz
- canon-xf
- chamsys-quickq
- christie-spyder
- churchapps-freeshow
- colorlight-grandshow
- combitech-vidblasterx
- dan-dugan-automixer
- dashare-multiplay3
- dataton-watchout-json
- denon-recorder
- digitalprojection-projectors
- discord-api
- dolby-cinemaprocessor
- elgato-keylight
- emotimo-st4
- etc-eos
- figure53-go-button
- figure53-qlab-advance
- fora-mfr
- generic-blink
- generic-emberplus
- generic-midi
- generic-onvif
- generic-pjlink
- generic-ssh
- generic-stopwatch
- generic-swp02
- generic-tcp-serial
- generic-tcp-udp
- getontime-ontime
- glensound-minferno
- google-sheets
- h2r-graphics
- hdtv-wolfpackgreen
- hologfx-holographics
- homeassistant-server
- imimot-mitti
- interspace-mastercuev7
- justmacros-lua
- jvc-ptz
- lightware-lw3
- limagiran-holyrics
- malighting-grandma2
- malighting-grandma3
- malighting-msc
- microsoft-teams
- microsoft-vscode
- middleman-adit
- middleman-breaktime
- middlethings-middlecontrol
- mrmoco-mhc
- mvr-helios
- nec-display
- netgear-avline
- netio-powerbox
- neumannmueller-stageflow
- newblue-captivate
- notion-timestamp
- novastar-controller
- ntp-technology-dot
- obs-studio
- openweather-rest
- panasonic-avhs
- panasonic-kairos
- peavy-ratc
- pixelhue-switcher
- planningcenter-serviceslive
- polecam-autopod
- presentationtools-aps
- ptzoptics-superjoy
- ptzoptics-visca
- qsys-remote-control
- raspberry-gpio
- resolume-arena
- restream-api
- riedel-mediornet
- rogueamoeba-farrago
- roku-tv
- roland-v160hd
- roland-v60hd
- rundown-studio
- sgl-dct
- showcuesystems-scs
- shure-mxa910
- shure-p300
- shure-wireless
- simedia-yesapi
- singularlive-studio
- slack-webhooks
- smartavi-ipmatrix
- smodetech-smodelive
- softron-ontheairvideo
- sony-serialtally
- soundcraft-ui
- stagetec-xci
- studiocoast-vmix
- tascam-cd
- tascam-cd400u
- tascam-da-6400
- techministry-midirelay
- techministry-spotifycontroller
- telestream-prism
- tellyo-streamstudio
- tow-mixeffect
- tplink-kasasmartbulb
- tplink-kasasmartplug
- tplink-taposmartplug
- tslproducts-usp3
- vdo-ninja
- vicreo-hotkey
- videolan-vlc
- vitec-avediaplayer9300-series
- vivitek-projector
- voicemod-api
- yamaha-rcp
- zenvideo-ndirouter
- zerodensity-realityhub
- zinc-oscpoint
- zoom-osc-iso

## Companion v3.2.2 - Release Notes

### 🐞 BUG FIXES
Expand Down
2 changes: 2 additions & 0 deletions assets/linux/50-companion-desktop.rules
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0084", MODE:="666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0086", MODE:="666", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="008f", MODE:="666", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0090", MODE:="666", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="009a", MODE:="666", TAG+="uaccess"
KERNEL=="hidraw*", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0060", MODE:="666", TAG+="uaccess"
KERNEL=="hidraw*", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0063", MODE:="666", TAG+="uaccess"
KERNEL=="hidraw*", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="006c", MODE:="666", TAG+="uaccess"
Expand All @@ -25,6 +26,7 @@ KERNEL=="hidraw*", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0084", MODE:="666
KERNEL=="hidraw*", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0086", MODE:="666", TAG+="uaccess"
KERNEL=="hidraw*", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="008f", MODE:="666", TAG+="uaccess"
KERNEL=="hidraw*", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0090", MODE:="666", TAG+="uaccess"
KERNEL=="hidraw*", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="009a", MODE:="666", TAG+="uaccess"

# xkeys
SUBSYSTEM=="usb", ATTRS{idVendor}=="05f3", MODE:="666", TAG+="uaccess"
Expand Down
2 changes: 2 additions & 0 deletions assets/linux/50-companion-headless.rules
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0084", MODE:="666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0086", MODE:="666", GROUP="companion"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="008f", MODE:="666", GROUP="companion"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0090", MODE:="666", GROUP="companion"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="009a", MODE:="666", GROUP="companion"
KERNEL=="hidraw*", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0060", MODE:="666", GROUP="companion"
KERNEL=="hidraw*", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0063", MODE:="666", GROUP="companion"
KERNEL=="hidraw*", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="006c", MODE:="666", GROUP="companion"
Expand All @@ -25,6 +26,7 @@ KERNEL=="hidraw*", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0084", MODE:="666
KERNEL=="hidraw*", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0086", MODE:="666", GROUP="companion"
KERNEL=="hidraw*", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="008f", MODE:="666", GROUP="companion"
KERNEL=="hidraw*", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0090", MODE:="666", GROUP="companion"
KERNEL=="hidraw*", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="009a", MODE:="666", GROUP="companion"

# xkeys
SUBSYSTEM=="usb", ATTRS{idVendor}=="05f3", MODE:="666", GROUP="companion"
Expand Down
2 changes: 1 addition & 1 deletion bundled-modules
Submodule bundled-modules updated 504 files
37 changes: 22 additions & 15 deletions companion/lib/Graphics/Controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -133,23 +133,30 @@ class GraphicsController extends CoreBase {
const control = controlId ? this.controls.getControl(controlId) : undefined
const buttonStyle = control?.getDrawStyle() ?? undefined

let render
if (location && locationIsInBounds && buttonStyle && buttonStyle.style) {
if (location && locationIsInBounds) {
// Update the internal b_text_1_4 variable
if (location && 'text' in buttonStyle) {
const variableValue = buttonStyle.text
setImmediate(() => {
const values = {
[`b_text_${location.pageNumber}_${location.row}_${location.column}`]: variableValue,
}

const bankIndex = xyToOldBankIndex(location.column, location.row)
if (bankIndex) values[`b_text_${location.pageNumber}_${bankIndex}`] = variableValue

this.instance.variable.setVariableValues('internal', values)
})
}
setImmediate(() => {
/** @type {import('@companion-module/base').CompanionVariableValues} */
const values = {}

// Update text, if it is present
values[`b_text_${location.pageNumber}_${location.row}_${location.column}`] =
buttonStyle?.style === 'button' ? buttonStyle.text : undefined
const bankIndex = xyToOldBankIndex(location.column, location.row)
if (bankIndex)
values[`b_text_${location.pageNumber}_${bankIndex}`] =
buttonStyle?.style === 'button' ? buttonStyle.text : undefined

// Update step
values[`b_step_${location.pageNumber}_${location.row}_${location.column}`] =
buttonStyle?.style === 'button' ? buttonStyle.step_cycle ?? 1 : undefined

this.instance.variable.setVariableValues('internal', values)
})
}

let render
if (location && locationIsInBounds && buttonStyle && buttonStyle.style) {
const pagename = this.page.getPageName(location.pageNumber)

// Check if the image is already present in the render cache and if so, return it
Expand Down
Loading

0 comments on commit 17d5f40

Please sign in to comment.