Add dynamic button labels via ui_config.json and /api/config #12
Loading…
Reference in a new issue
No description provided.
Delete branch "feature/9_dynamic_button_labels"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Что сделано
Реализация динамических названий кнопок по подтверждённой схеме (вариант A +
ui_config.json, обсуждение в #9).Бекенд (go-emu)
UI_CONFIG_FILE(по умолчанию —ui_config.jsonрядом с исполняемым файлом; относительный путь трактуется от бинарника).{"version":1,"labels":{...}}. Запись атомарная (tmp + rename + fsync) — переживает рестарт процесса и выключение питания.BUTTON_LABEL_*из.env(админские) <ui_config.json(пользовательские). Пустое значение = явный сброс к дефолту./api/buttons:GET /api/config— эффективные переопределения (env + файл);PUT /api/config/labels— валидация + атомарная запись файла + обновление копии в памяти.Фронт (web)
resolveButtons()— чистый мерж дефолтной таблицыBUTTONSс переопределениями из/api/config(без мутации глобального состояния).fetchLabelOverrides()— загрузка при старте с bearer-токеном; при недоступности API/битом ответе тихо используются дефолты.ButtonPanel/useButtonMaskполучают эффективную таблицу через пропсы/аргумент вместо глобального импорта.Документация
go-emu/.env.example:UI_CONFIG_FILE+ примерыBUTTON_LABEL_*.Как проверить
Тесты:
make test-go,make web-test— все зелёные (Go: sanitize/env-merge/persistence/HTTP-хендлеры; web: мерж/фолбэки/интеграция App с мок-API).Closes #9
На windows машине я не смогу это проверить без изменения кода, верно?
Да, вы правы, но с важным уточнением: это ограничение не из этого PR — оно было и до него.
Эмулятор go-emu построен вокруг PTY (
creack/pty) и используетgolang.org/x/sys/unix(unix.Poll) — это Linux/macOS-only, на «голой» Windows он без изменений кода не запускался и раньше. Это даже зафиксировано в Makefile: «Go targets require Linux/macOS (uses PTY). Windows users should use WSL».То, что добавлено в этом PR (
UI_CONFIG_FILE,ui_config.json,GET /api/config,PUT /api/config/labels), написано на кроссплатформенных примитивах Go (os.ReadFile,os.CreateTemp+os.Rename,filepath, обычный TCP-listener) — платформозависимого кода нет. То есть Windows-совместимость этот PR не ухудшает, но и PTY-ядро под Windows не чинит.Как проверить на Windows-машине без изменений кода:
cd web && npm install && npm run devработает на Windows нативно (Vite). Но без бекенда/api/configнедоступен, фронт покажет дефолтные подписи (это отдельный протестированный кейс — фолбэк), сам механизм пользовательских подписей так не проверить.Если нужна нативная работа эмулятора под Windows (named pipes вместо PTY) — это отдельная задача, готов оценить отдельно.
Ветка обновлена — в
mainсмержили fullscreen (#24), из-за чего PR перестал сливаться (конфликты вweb/src/App.tsxиApp.test.tsx). Смержилmainв ветку (коммит121a9c5), конфликт разрешён так:/api/config(этот PR) и fullscreen/поддержка изmain;buttons), а не из глобальногоBUTTONS— пользовательские подписи теперь работают и в fullscreen-режиме;keba-panel-settings(как вmain), чтобы не ломаться при включённых оверрайдах подписей.Проверка:
web-build— ok,npx tsc -b— 0 ошибок,make web-test— 54/54 зелёные, включая интеграционный кейс «подписи POWER→Питание + fullscreen-грид 2×3». Go-часть merge не затрагивает (файлыgo-emu/вне диффа), окружение без Go-тулчейна — протестировать серверные тесты локально не могу.PR снова mergeable — готов к мержу.
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.Merge
Merge the changes and update on Forgejo.Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.