Обзор SDK
Что такое SDK 1.0, из каких частей он состоит и на каких принципах построен.
SDK Open Stream Deck нужен, чтобы писать плагины для приложения. Плагин пишется на Rust, JavaScript, TypeScript или любом языке, который собирается в WebAssembly, и распространяется одним файлом .opensd.
Текущая версия 1.0.2. SDK 1.x несовместим с SDK 0.2, с плагинами Elgato и StreamDock. Что изменить при переносе, описано в разделе миграция.
Принципы
- Один файл без исполняемых файлов ОС.
.opensdэто обычный ZIP: манифест в JSON, код на JavaScript в исходном виде или модуль WebAssembly, ресурсы. Его можно распаковать любым архиватором, аopensd inspectпокажет, что внутри и что плагин просит. - Одна песочница для всех языков. Плагин работает в изолированном воркере движка WebView приложения. У него нет файлов, процессов, окна приложения и сети, кроме того, что пользователь разрешил явно.
- Ноль в простое. Хост не опрашивает плагины. Событие приходит, только когда что-то произошло, а таймер плагин включает сам и только когда он нужен.
- Одинаково на Windows, macOS и Linux. Код плагина не зависит от ОС.
Из чего состоит
CLI opensd один и тот же, откуда его ни ставь. Он создаёт проекты, собирает и проверяет плагины, упаковывает их и запускает в приложении. Как поставить, описано в быстром старте.
Исходный код открыт: Open-Stream-Deck/Open-Stream-Deck-SDK. Лицензия на выбор MIT или Apache 2.0.
Что умеет плагин
- Реагировать на нажатия, отпускания, короткое и долгое нажатие, удержание с повтором. Жесты считает хост по порогам из манифеста.
- Менять подпись со стилем, картинку и состояние кнопки, ставить отметку
okилиalert. - Хранить настройки каждой кнопки и общие настройки плагина. Простые формы настроек описываются полями в манифесте, и приложение рисует их само.
- Показывать свою страницу настроек кнопки и отдельное окно настроек плагина на HTML.
- Работать с сетью, локальными программами, буфером обмена и запуском приложений через разрешения, которые подтверждает пользователь.
Минимальный плагин
JavaScript:
opensd.action("com.example.hello.key", {
tap({ key }) {
key.setTitle("Hello").flash("ok");
},
});Rust:
use opensd::{Event, Host, Plugin, Result};
#[derive(Default)]
struct Hello;
impl Plugin for Hello {
fn event(&mut self, host: &mut Host, event: Event) -> Result {
if let Event::Tap(key) = event {
host.key(&key.context).set_title("Hello")?.flash_ok()?;
}
Ok(())
}
}
opensd::export!(Hello);Куда дальше
- Первый плагин за пять минут: быстрый старт.
- Плагин на Rust или на JavaScript и TypeScript.
- Настройки кнопок и окно плагина: настройки.
- Полный контракт: манифест, протокол, пакет, исполнение, разрешения, ABI.