Files
BiLauncher/doc/qml/SeasonalBuildsDialog.md
T
galeon 92531c6e9a
tests / macos (push) Successful in 1m18s
tests / package-smoke-linux (push) Skipped
tests / package-smoke-windows (push) Skipped
tests / package-smoke-macos (push) Skipped
tests / linux (push) Successful in 2m17s
tests / windows (push) Failing after 14m10s
fix #25 by allowing user to close model windows while backend is busy
Signed-off-by: galeon <dertiellis@gmail.com>
2026-10-20 17:43:43 +03:00

4.0 KiB

SeasonalBuildsDialog.qml

Каталог сезонных сборок с сервера лаунчера. Таблица показывает всё, что нужно, чтобы решить, ставить сборку или нет. Остальное делает одна кнопка: создаёт запись сборки, ставит версию игры, модлоадер и Java и раскладывает файлы. Как это устроено, описано в LauncherBackend.

Открывается из Main кнопкой в правом нижнем углу (openCatalog()).

Свойства

backend (required) LauncherBackend
selectedId выбранная строка, по id сборки
columns описание колонок: ключ, заголовок, ширина, выравнивание

Выбранная строка хранится по id, а не по индексу: список может обновиться, пока окно открыто, и индекс начал бы указывать на другую сборку.

Таблица

Колонки: название, версия, модлоадер с версией, число модов, начало и конец сезона, статус («не установлена», «установлена», «доступно обновление»). Ширины заданы в одном месте, columns, и их используют и шапка, и строки.

Таблица собрана из Row с колонками фиксированной ширины, а не из TableView. В проекте нет ни одной модели на QAbstractItemModel, строки приходят из C++ готовыми QVariantMap, и заводить модель ради семи колонок не стоит.

Строки приходят уже отсортированными и сведёнными с локальными записями: окно ничего не считает.

Пустой список и ошибка сервера выглядят одинаково пусто, поэтому причина пишется прямо на месте строк: «загрузка…», «сборок пока нет» или текст seasonalCatalogError красным.

Под таблицей описание выбранной сборки, ревизия, размер архива и установленная ревизия, если она есть. Описания длинные и в таблицу не помещаются, а решение принимают как раз по ним.

Кнопки

  • Обновить список — refreshSeasonalCatalog(true), мимо кэша. Выключена, пока идёт загрузка.
  • Установить / Обновить — installSeasonalBuild(id). Подпись зависит от updateAvailable. Выключена, пока лаунчер чем-то занят (busy): установка занимает и панель загрузки, и .minecraft целиком.

Двойной щелчок по строке делает то же, что кнопка установки.

Каталог обновляется при каждом открытии окна (refreshSeasonalCatalog(false)). Свежий кэш отвечает без сети.

Окно закрывается по Esc и щелчку мимо него и во время установки: отменить установку можно только на панели загрузки главного окна, которую модальное окно перекрывает. Установка при закрытии окна продолжается.


При создании этого документа использовался ИИ.