83 lines
8.4 KiB
Markdown
83 lines
8.4 KiB
Markdown
# Build 175 — кнопки титров и язык Mapping
|
||
|
||
Версия приложения: `2026.09.29.12`. Установить поверх build 174.
|
||
В архиве только 5 изменённых файлов приложения и эта инструкция.
|
||
|
||
## Установка
|
||
|
||
1. Остановите приложение и сохраните копии заменяемых файлов.
|
||
2. Распакуйте содержимое архива в корень проекта с заменой файлов, сохраняя вложенные каталоги.
|
||
3. Запустите приложение и обновите страницу браузера через Ctrl+F5.
|
||
|
||
Файлы настроек, база данных, .env и архивы КХЛ в поставку не включены.
|
||
Настройки кнопок продолжают храниться в `settings/hockey_player_panel_buttons.json`.
|
||
Существующие кнопки и их ID сохраняются. Новый параметр `title_text` появляется при сохранении кнопки через интерфейс.
|
||
|
||
## Один Input — несколько надписей
|
||
|
||
1. Откройте ⚙ рядом с кнопкой + у блока игроков → «Титры блоков».
|
||
2. Создайте кнопки, назначьте им разные ID и одинаковое название vMix Input.
|
||
3. Заполните поле «Надпись в титре» для каждой кнопки. Например:
|
||
|
||
| Кнопка | ID | Надпись в титре | Input |
|
||
|---|---|---|---|
|
||
| Сезон | season | СТАТИСТИКА ЗА СЕЗОН | Статистика игрока |
|
||
| Карьера | career | СТАТИСТИКА ЗА КАРЬЕРУ | Статистика игрока |
|
||
| Матч | match | СТАТИСТИКА ЗА МАТЧ | Статистика игрока |
|
||
|
||
4. Сохраните настройки. В Mapping у текстового элемента этого Input выберите «Титры · Нажатая кнопка → Надпись в титре» (`title_button.text`).
|
||
5. Выберите игрока и нажмите нужную кнопку. Сначала сохраняются её ID и надпись, затем применяется Mapping, затем Input отправляется в Preview.
|
||
|
||
Пустое поле «Надпись в титре» передаёт пустую строку и очищает связанный текстовый элемент. Название самой кнопки и подсказка задаются отдельно; режим «Только иконка» работает как прежде.
|
||
Подсветка показывает последнюю нажатую кнопку в матче, а не состояние эфира vMix. Сохраняется вместе с контекстом матча, в том числе после обновления страницы. На время отправки остальные кнопки титров блокируются, чтобы быстрые нажатия в разных блоках не смешивали надписи.
|
||
|
||
## ID, условия и SQL
|
||
|
||
| Поле Mapping | Параметр SQL | Значение |
|
||
|---|---|---|
|
||
| `title_button.id` | `:title_button_id` | ID последней нажатой кнопки |
|
||
| `title_button.label` | `:title_button_label` | Название кнопки |
|
||
| `title_button.text` | `:title_button_text` | Настроенная надпись |
|
||
| `title_button.panel_id` | `:title_button_panel_id` | ID блока |
|
||
| `title_button.input` | `:title_button_input` | Название Input |
|
||
|
||
Можно использовать ID в условиях Mapping или в своём SQL-источнике. Например, один SQL-источник с полями `caption_RUS` и `caption_ENG`:
|
||
|
||
```sql
|
||
SELECT
|
||
CASE :title_button_id
|
||
WHEN 'season' THEN 'СТАТИСТИКА ЗА СЕЗОН'
|
||
WHEN 'career' THEN 'СТАТИСТИКА ЗА КАРЬЕРУ'
|
||
WHEN 'match' THEN 'СТАТИСТИКА ЗА МАТЧ'
|
||
ELSE ''
|
||
END AS "caption_RUS",
|
||
CASE :title_button_id
|
||
WHEN 'season' THEN 'SEASON STATISTICS'
|
||
WHEN 'career' THEN 'CAREER STATISTICS'
|
||
WHEN 'match' THEN 'GAME STATISTICS'
|
||
ELSE ''
|
||
END AS "caption_ENG"
|
||
```
|
||
|
||
Если код источника `button_caption`, в Mapping выберите `button_caption.caption` с отметкой AUTO. Такая надпись учитывает и кнопку, и выбранный RU/EN. В этом варианте поле «Надпись в титре» кнопки не используется для соответствующего элемента vMix.
|
||
|
||
Сохранены и открыты для Mapping отдельные поля последней кнопки каждого блока:
|
||
`player_select.<ID блока>._preview_button_id`, `_preview_button_label`, `_preview_button_text`, `_preview_input`.
|
||
Глобальные `title_button.*` удобны для одного общего Input; поля конкретного блока — для независимых Input разных блоков.
|
||
|
||
## Исправление языка
|
||
|
||
- Mapping использует текущий переключатель RU/EN, даже пока карточка матча ещё содержит прежний язык.
|
||
- Запоздавший ответ каталога больше не заменяет более свежий ответ другого языка.
|
||
- Стандартные SQL-источники «Матч и команды», «Турнир», «Выбранный игрок», «Выделенный матч» читают нужные языковые столбцы. Ключи полей и связи Mapping сохраняются.
|
||
- При первом обращении старые стандартные запросы обновляются, только если их текст совпадает с исходным. Пользовательские SQL-запросы, подписи полей и остальные настройки сохраняются.
|
||
- Когда английское значение отсутствует в базе, используется русское. Явно выбранный столбец `*_RUS` остаётся русским; для автоматического языка выбирайте поле без суффикса (AUTO). Пользовательский SQL, который напрямую выбирает только `*_ru`, нужно сделать двуязычным по аналогии с примером выше.
|
||
- Настроенный вручную текст кнопки сам по себе не переводится. Для двух языков можно использовать показанный SQL.
|
||
|
||
## Проверка
|
||
|
||
Локально проверены сохранение JSON и повторная загрузка, ID в контексте/SQL, изоляция матчей, смена и очистка надписи, команды SetText с тем же названием Input, английский язык аккаунта при отправке в Agent и миграция только стандартных SQL-запросов.
|
||
В браузере проверены редактор кнопок, подсветка, сохранение настроек, порядок данных/Mapping/Preview, блокировка повторных нажатий, отказ от Preview при ошибке Mapping, RU/EN со старой карточкой матча и ответы в обратном порядке. Дополнительно пройдены проверки переименования и копирования Mapping.
|
||
57 целевых Python-проверок прошли. 6 устаревших проверок предыдущих сборок исключены из итогового прогона: прежний порядок вкладок, версия парсера 2 вместо 3 и тестовые Inputs без названия (старая привязка по ключу).
|
||
Реальные vMix и рабочая база не подключались: серверные проверки использовали SQLite и имитацию транспорта, браузерные — тестовые API.
|