# 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.._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.