Open Stream Deck

Миграция

Переход на SDK 1.0 с SDK 0.2 и с плагинов Elgato и StreamDock.

SDK 1.0 несовместим с предыдущими форматами. Плагины SDK 0.2 (.OpenStreamDeck) и плагины Elgato и StreamDock приложение больше не устанавливает. Ниже описано, что изменить.

С SDK 0.2

БылоСтало
OpenStreamDeck.tomlopensd.toml с sdk = 1
capabilities = [...]Не нужны. Подписи, картинки, состояния и настройки доступны всегда, внешние операции объявляются в [permissions]
[entrypoints] wasm32-unknown-unknown = "bin/plugin.wasm"[runtime] type = "wasm", main = "plugin.wasm"
propertyInspector, settingsPage[ui] inspector, settings
controllers = ["Keypad", "Information"]controllers = ["key", "side"]
defaultSettingssettings
titleAlignment, fontSize, titleColor в состоянииtitle = { align, size, color, bold } у действия
cargo osd …opensd …
.OpenStreamDeck.opensd
Крейт open-stream-deck-sdkКрейт opensd

В коде на Rust:

БылоСтало
ActionHandler, SystemHandler, AppОдин Plugin с fn event(&mut self, host: &mut Host, event: Event)
export_plugin!(Plugin::new().action(…))opensd::export!(MyPlugin::default())
event.event == "keyDown"Event::KeyDown(key)
ActionContextkey.context и host.key(&context)
ClientCommands: копируемый, хранится в структурах
on_key_gesture и KeyGestureConfiggestures в манифесте, события Tap, LongPress, HoldStart, HoldRepeat, HoldEnd
osd.tick каждые 50 мсТаймеры по запросу: set_timer, set_interval
event.extra["osdNowMs"]host.now()
BrokerEvent::parse(&event)Варианты Event::Http, WsOpen, WsMessage, WsClose, AppStatus, Done, Denied
client.http_get(id, url, timeout)host.http(id, &Request::get(url).timeout(ms))
client.clipboard_writeclipboard
ctx.show_ok(), show_alert()flash_ok(), flash_alert()
ctx.send_to_inspectorto_inspector
client.save_global_settingsset_globals

Страницы настроек больше не копируют bridge.js к себе: подключите /_opensd/inspector.js. Вызовы osd.saveSettings, osd.send, osd.openSettingsPage меняются на opensd.saveSettings, opensd.send, opensd.openSettings.

Бюджет fuel и лимит 64 сообщений за вызов исчезли: код выполняется движком WebView с JIT. Ограничения теперь другие, см. исполнение.

С плагинов Elgato и StreamDock

Модель событий похожа, поэтому перенос сводится к замене транспорта и манифеста.

Elgato / StreamDockOpen Stream Deck
manifest.jsonopensd.toml
UUID действияid действия, начинается с id плагина
CodePath с Node.js или исполняемым файломОдин файл plugin.js или plugin.wasm
connectElgatoStreamDeckSocket и WebSocketГлобальный opensd, без соединения
willAppear, willDisappearappear, disappear
setTitle, setImage, setState, showOkkey.setTitle, key.setImage, key.setState, key.flash("ok")
setSettings, getSettingskey.saveSettings; настройки приходят в каждом событии
setGlobalSettingsopensd.setGlobals
sendToPropertyInspector, sendToPluginkey.toInspector, событие inspectorMessage
Доступ к сети и файлам из Node.jsРазрешения network, loopback; файлов нет
child_processРазрешение launch для объявленных программ

Плагин на Node.js с npm-зависимостями собирается в один файл через esbuild, как в шаблоне TypeScript. Модули Node.js (fs, net, child_process) недоступны: вместо них используются разрешения.