Files
BiLauncher/doc/qml/SeasonalBuildsDialog.md
T
2026-10-11 22:32:13 +03:00

3.9 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)). Свежий кэш отвечает без сети.

Пока идёт установка, окно закрывается только кнопкой. Отменить установку можно на панели загрузки главного окна, и случайный щелчок мимо окна не должен её закрыть.


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