3.8 KiB
LoaderRow.qml
Одна строка модлоадера в карточке BuildsDialog: чекбокс, а если он отмечен, выпадающий список версий под выбранную версию Minecraft.
Совместимость здесь не проверяется. backend.loaderVersions() отдаёт список уже под конкретную
версию игры, и несовместимых строк в нём нет. Если список пустой, значит, модлоадер эту версию не
поддерживает, и вместо пустого выпадающего списка показывается текст.
Интерфейс
backend (required) |
LauncherBackend |
loaderKey (required) |
forge, fabric, neoforge, quilt |
title (required) |
подпись у чекбокса |
gameVersion |
версия Minecraft из карточки; её смена сбрасывает выбор |
checked |
алиас чекбокса |
selectedVersion |
выбранная версия модлоадера |
entries |
строки {version, label, recommended, stable} |
applying |
строка заполняется из сборки; изменения в это время не считаются пользовательскими |
userChecked() |
пользователь отметил чекбокс. Карточка снимает отметки с остальных строк |
changed() |
отметка или версия изменились, карточке пора сохранить сборку |
applyBuild(loader, loaderVersion) |
заполнить из сохранённой сборки без changed() |
Пока версия игры не выбрана, чекбокс выключен.
applyEntries(list)
Единственное место, где меняются entries и selectedVersion. Через него проходят все три пути:
ответ из кэша, ответ сети и заполнение из сборки. Если выбранной версии в новом списке нет, она
заменяется первой строкой, а это самая новая версия для этой версии игры. Если при этом значение
изменилось и строка не в режиме applying, испускается changed().
Раньше проверку делал только путь из сети, и версия модлоадера, выбранная под прошлую версию игры, доживала до сохранения сборки.
Откуда берётся список
reload() сначала берёт то, что уже есть в кэше (loaderVersions()), чтобы список появился сразу,
а потом просит обновление (refreshLoaderVersions()). Ответ приходит в
backend.loaderVersionsChanged(key, game). Строка сравнивает пару со своей и игнорирует чужие
ответы: от другого модлоадера или от прошлой версии игры.
Под пустым списком написано «загрузка версий…», пока идёт запрос
(loaderVersionsLoading()), и «не поддерживает версию N» после.
applyBuild() берёт версию из сборки как пожелание. Если под текущую версию игры её нет,
applyEntries() заменит её на самую новую.
При создании этого документа использовался ИИ.