This commit is contained in:
2026-10-18 03:11:10 +07:00
parent 8610f45a29
commit 3e2608eae3
23 changed files with 1460 additions and 302 deletions
+33 -52
View File
@@ -17,60 +17,41 @@
до выхода из приложения. На Linux требуется рабочий libsecret/KWallet;
`basic_text` не используется для сохранения секретов.
## Серверные команды
## Постоянная связь и автоматическая подготовка SCREEN-012
1. Нажать «Подключить управление этой игрой», записать номер экрана.
Открыть показ на внешнем дисплее. Дождаться сообщения о связи.
2. Открыть существующую страницу управления этой игрой на сайте.
Убедиться, что экран появился в её списке. Назначить звук этому экрану
через сайт или одноимённую кнопку приложения; это отключает звук других
экранов игры по существующим правилам сервера.
3. Отправить новую команду смены режима, пуска вступления, паузы, продолжения,
перемотки и громкости. Повторить с заключительным видео.
4. Проверить текст, настройку/пуск/паузу/сброс таймера и музыку: выбор трека,
громкость, повтор и автоматический переход. Все используемые ресурсы должны
быть в скачанном пакете; новый плейлист требует подготовки материалов.
5. Чередовать серверные команды и локальный пульт. Локальная пауза не должна отменяться повтором
того же серверного состояния. Новая серверная команда должна применяться.
Команды компьютера действуют только на этот показ и не рассылаются другим экранам.
6. Проверить прежний браузерный экран отдельно: его вход, привязка и команды
должны работать как раньше. Общие команды игры по-прежнему относятся ко всем
её подключённым экранам.
1. Выбрать игру, которой ещё нет на компьютере, и нажать «Подключить выбранную
игру». Проверить связь и прогресс загрузки при закрытом показе.
2. Назначить звук экрану. Вручную открыть показ: текущие серверные экран и музыка
применяются после сохранения необходимых файлов. Проверить локальные адреса
медиа; прямого воспроизведения HTTP-файлов в renderer быть не должно.
3. Через сайт сменить экран, текст, таймер и музыку. Повторное состояние не
перезапускает медиа. Закрыть показ, изменить серверное состояние и открыть его
снова: оно применяется, но закрытое окно самостоятельно не открывается.
4. Добавить новый трек или сменить плейлист на ещё не подготовленный. На медленном
соединении прежняя музыка продолжает играть до готовности нового файла.
Смена текста в это время не ждёт музыку. Аналогично проверить новое вступление,
видео и изображения. Все связанные плейлисты и остальные материалы готовятся фоном.
5. Во время загрузки несколько раз сменить серверную команду: устаревший файл
не должен включаться после завершения загрузки. Ошибка отдельного файла или
нехватка места не удаляет готовые материалы; проверить «Повторить подготовку».
6. Проверить локальные режимы, шаги, основной канал, таймер и музыку: онлайн они
меняют общий сервер. Выключение всего звука остаётся локальным. Публикация
произвольного текста сохраняет и выбирает текстовый шаг общего плана.
7. Отключить сеть, изменить показ локально, затем изменить состояние на сервере.
Вернуть сеть: серверные экран и музыка принимаются; локальные офлайн-команды
не отправляются позднее. После полного скачивания проверить час показа без сети.
8. Перезапустить приложение без сети с тем же профилем. Сохранённые игра и снимок
результатов доступны, окно закрыто. Открыть его и проверить локальные файлы.
Повредить один тестовый файл, восстановить его автоматически при доступной сети
и повторить перезапуск: остальные ресурсы и исправленный файл должны сохраниться.
9. Проверить истечение JWT и экранной сессии, смену игры во время загрузки,
выход без удаления файлов и сохранность предыдущего полного пакета после
неудачной ручной перезагрузки. Не менять рабочую базу ради проверки.
Опрос идёт раз в секунду, только пока окно показа открыто. Первое состояние при
подключении/повторном открытии становится исходной отметкой: старые команды не
запускаются, назначение звука учитывается при первом подключении. Для показа
отправьте новую команду. Сайт показывает наличие связи; точные подтверждения
проигрывателя и ошибки доступны в пульте приложения, поскольку существующий API
не принимает их от экрана.
## Обрыв связи, обновления и перезапуск
1. Во время воспроизведения отключить сеть компьютера. Проверить локальные
play/pause/seek, переход музыки и продолжающийся таймер.
2. При отключённой сети изменить показ локально, затем отправить команду
через сайт. Вернуть сеть: накопленное состояние не должно отменить локальное
действие. Следующая новая серверная команда должна примениться.
3. Проверить истечение пользовательского входа и отдельно недействительную
экранную сессию на тестовом сервере. Показ не прерывается; интерфейс предлагает
повторный вход или подключение управления. Не менять рабочую базу ради проверки.
4. Закрыть показ. Изменить материалы игры на сервере и проверить изменения
в приложении. Явно загрузить новую версию. При открытом показе обновление
выбранной игры должно отклоняться. Ошибка и отмена загрузки сохраняют старую копию.
5. Завершить игру и обновить снимок результатов. Проверить таблицу и время снимка.
Ошибка обновления должна сохранять последний успешный снимок.
6. Закрыть приложение, отключить сеть и запустить снова. Выбранная игра и снимок
результатов доступны; окно показа и звук сами не запускаются. Открыть показ
и проверить локальное воспроизведение.
7. Выход из аккаунта не удаляет материалы и не прерывает локальное воспроизведение,
но отключает получение команд сервера. Удалить невыбранный пакет через интерфейс.
Проверка метаданных не обнаруживает новые байты файла по прежнему URL:
для этого нужна повторная загрузка. Сервер хранит последнее состояние, поэтому
несколько команд между опросами могут объединиться. После неопределённого исхода
запроса перехода музыки приложение не повторяет его автоматически. Секреты
находятся отдельно от пакетов в зашифрованном файле `connection/credentials.bin`
в userData; пароль не сохраняется. Снимки содержат только поля публичной таблицы.
Ручная «Загрузить материалы» остаётся для принудительного обновления файлов по
прежнему адресу и требует закрытого показа. Существующие полные пакеты совместимы
с автоматическим кешем. Пароль не сохраняется, токены остаются в основном процессе
и защищённом хранилище ОС; снимки содержат только публичные поля результатов.
## Фиксация результата