57 lines
3.9 KiB
Markdown
57 lines
3.9 KiB
Markdown
# SeasonalBuildsDialog.qml
|
||
|
||
Каталог сезонных сборок с сервера лаунчера. Таблица показывает всё, что нужно, чтобы решить,
|
||
ставить сборку или нет. Остальное делает одна кнопка: создаёт запись сборки, ставит версию игры,
|
||
модлоадер и Java и раскладывает файлы. Как это устроено, описано в
|
||
[LauncherBackend](../cpp/LauncherBackend.md#сезонные-сборки).
|
||
|
||
Открывается из [Main](Main.md) кнопкой в правом нижнем углу (`openCatalog()`).
|
||
|
||
## Свойства
|
||
|
||
| | |
|
||
|---|---|
|
||
| `backend` (required) | `LauncherBackend` |
|
||
| `selectedId` | выбранная строка, по `id` сборки |
|
||
| `columns` | описание колонок: ключ, заголовок, ширина, выравнивание |
|
||
|
||
Выбранная строка хранится по `id`, а не по индексу: список может обновиться, пока окно открыто,
|
||
и индекс начал бы указывать на другую сборку.
|
||
|
||
## Таблица
|
||
|
||
Колонки: название, версия, модлоадер с версией, число модов, начало и конец сезона, статус
|
||
(«не установлена», «установлена», «доступно обновление»). Ширины заданы в одном месте, `columns`,
|
||
и их используют и шапка, и строки.
|
||
|
||
Таблица собрана из `Row` с колонками фиксированной ширины, а не из `TableView`. В проекте нет ни
|
||
одной модели на `QAbstractItemModel`, строки приходят из C++ готовыми `QVariantMap`, и заводить
|
||
модель ради семи колонок не стоит.
|
||
|
||
Строки приходят уже отсортированными и сведёнными с локальными записями: окно ничего не считает.
|
||
|
||
Пустой список и ошибка сервера выглядят одинаково пусто, поэтому причина пишется прямо на месте
|
||
строк: «загрузка…», «сборок пока нет» или текст `seasonalCatalogError` красным.
|
||
|
||
Под таблицей описание выбранной сборки, ревизия, размер архива и установленная ревизия, если она
|
||
есть. Описания длинные и в таблицу не помещаются, а решение принимают как раз по ним.
|
||
|
||
## Кнопки
|
||
|
||
- **Обновить список** — `refreshSeasonalCatalog(true)`, мимо кэша. Выключена, пока идёт загрузка.
|
||
- **Установить / Обновить** — `installSeasonalBuild(id)`. Подпись зависит от `updateAvailable`.
|
||
Выключена, пока лаунчер чем-то занят (`busy`): установка занимает и панель загрузки, и
|
||
`.minecraft` целиком.
|
||
|
||
Двойной щелчок по строке делает то же, что кнопка установки.
|
||
|
||
Каталог обновляется при каждом открытии окна (`refreshSeasonalCatalog(false)`). Свежий кэш отвечает
|
||
без сети.
|
||
|
||
Пока идёт установка, окно закрывается только кнопкой. Отменить установку можно на панели загрузки
|
||
главного окна, и случайный щелчок мимо окна не должен её закрыть.
|
||
|
||
---
|
||
|
||
При создании этого документа использовался ИИ.
|