50 lines
6.6 KiB
Plaintext
50 lines
6.6 KiB
Plaintext
BUILD179 — кнопки общего Input и автообновление надписей удалений
|
||
Версия сервера: 2026.09.30.2
|
||
Дата: 30 сентября 2026
|
||
Патч поверх build178.
|
||
|
||
УСТАНОВКА
|
||
1. Остановите сервер и сохраните копии четырёх заменяемых файлов.
|
||
2. Распакуйте архив в корень проекта, сохранив структуру папок и подтвердив замену файлов.
|
||
3. Запустите сервер и обновите страницу сочетанием Ctrl+F5.
|
||
|
||
СОСТАВ
|
||
app.py
|
||
hockey_data/agent_bridge.py
|
||
hockey_data/mapping_context.py
|
||
ui_builder/static/app.js
|
||
README_build179_RU.txt
|
||
|
||
Архив содержит четыре изменённых рабочих файла и эту инструкцию.
|
||
Пользовательские JSON-конфигурации, настройки подключения, базы данных и файлы Agent в архив не включены.
|
||
|
||
ИСПРАВЛЕНИЯ КНОПОК
|
||
Кнопки одного Input выполняют действия в порядке: сохранение контекста кнопки → чтение SQL и применение Mapping → команды vMix.
|
||
Быстрые нажатия разных кнопок последовательно проходят весь этот порядок, поэтому в запрос первой кнопки не подставляется идентификатор следующей.
|
||
Для нижней панели обновляются title_button.id, title_button.label и title_button.text. Команды управления таймером сохраняют контекст последней кнопки титра.
|
||
На одно выполнение сценария каждый SQL-источник выбранного Input читается один раз. При следующем нажатии происходит новое чтение, даже если автообновление SQL выключено.
|
||
Явные шаги SetText сценария выполняются после Mapping и могут задавать собственную надпись.
|
||
|
||
Отсутствующий параметр или поле отдельной связи Mapping больше не блокирует весь титр. Доступные связи обновляются, а оператор получает сообщение об обновлении части данных с указанием источника или поля.
|
||
Ошибки целевого Input и отправки команд продолжают останавливать вывод. Вместо сообщения «Сценарий не был выполнен» показывается причина сбоя.
|
||
|
||
Для кнопок у «Выбранного игрока» SQL получает external ID игрока из нажатого блока через :selected_player_id. При нескольких заполненных слотах используется первый заполненный слот; остальные игроки доступны через переменные соответствующего блока.
|
||
Ручной общий выбор игрока в базе при этом не перезаписывается. Пустой идентификатор блока не заменяется предыдущим ручным выбором.
|
||
Выбранный Agent назначается текущему матчу и сессии до чтения SQL. Другие Agent не получают эти команды.
|
||
|
||
АВТООБНОВЛЕНИЕ НАДПИСЕЙ УДАЛЕНИЙ
|
||
Фоновое обновление продолжает работать по сохранённым настройкам SQL-источников. Включённые источники выполняются с заданным интервалом; выключенные автоматически не включаются.
|
||
В SQL передаётся сессия назначенного оператора, поэтому :session_token и переменные со scope session читаются для правильной сессии.
|
||
Ошибка валидации одного SQL-источника изолируется: остальные источники, включая надписи удалений, продолжают обновляться. Ошибка сохраняется в диагностике фонового обновления.
|
||
В vMix отправляются только изменившиеся значения. При смене игрока или типа штрафа надпись обновляется; одинаковый текст повторно не отправляется.
|
||
Автообновление статистики игрока также использует выбор блока последней нажатой кнопки титра.
|
||
|
||
ПРОВЕРКА
|
||
Локально прошли 120 релевантных серверных проверок на тестовой SQLite и сценарии в браузере с тестовым Agent.
|
||
Проверены две кнопки одного Input, два блока игроков, быстрые нажатия, разовое выполнение SQL, отсутствующие параметры, видимость полей, привязка матча и защита второго браузера.
|
||
Проверен работающий фоновый цикл: надпись удаления меняется после смены игрока, несмотря на ошибку другого SQL-источника.
|
||
Историческая проверка, ожидающая привязку по ключу Input вместо названия, исключена как несовместимая с ранее принятой привязкой по названию.
|
||
Работа с вашим запущенным vMix и рабочей базой в этих проверках не выполнялась.
|
||
|
||
После установки проверьте «Раздевалка хозяев», соседнюю кнопку того же Input и кнопки у двух блоков игроков. Для проверки удалений оставьте автообновление соответствующего SQL-источника включённым и поменяйте игрока или тип штрафа.
|