Signed-off-by: galeon <dertiellis@gmail.com>
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 и щелчку мимо него и во время установки: отменить установку можно только на панели загрузки главного окна, которую модальное окно перекрывает. Установка при закрытии окна продолжается.
При создании этого документа использовался ИИ.