builds fixes

This commit is contained in:
2026-08-27 16:44:42 +03:00
parent 168884127b
commit 08e0dc4965
10 changed files with 788 additions and 360 deletions
+26 -35
View File
@@ -42,35 +42,35 @@ Column {
return -1
}
// Самая свежая стабильная сборка, а если стабильных нет — просто самая
// свежая. Список отсортирован новыми вперёд, поэтому хватает первого
// совпадения.
function preferredIndex() {
for (var i = 0; i < loaderRow.entries.length; ++i) {
if (loaderRow.entries[i].recommended)
return i
}
for (var j = 0; j < loaderRow.entries.length; ++j) {
if (loaderRow.entries[j].stable)
return j
}
return loaderRow.entries.length > 0 ? 0 : -1
}
// Единственное место, где меняются entries и selectedVersion. Через него
// проходят все три пути — кэш, ответ сети и заполнение из сборки, — потому
// что выбранная версия обязана существовать в списке под текущую версию
// игры. Раньше проверял только путь из сети, и версия лоадера от прошлой
// версии игры доживала до сохранения сборки.
function applyEntries(list) {
loaderRow.entries = list
function syncCombo() {
const index = loaderRow.versionIndex(loaderRow.selectedVersion)
combo.currentIndex = index
// Список отсортирован новыми вперёд, поэтому максимально доступная
// версия для этой версии игры — всегда первая строка.
if (loaderRow.versionIndex(loaderRow.selectedVersion) < 0) {
const fallback = list.length > 0 ? list[0].version : ""
const changedValue = loaderRow.selectedVersion !== fallback
loaderRow.selectedVersion = fallback
if (changedValue && !loaderRow.applying)
loaderRow.changed()
}
combo.currentIndex = loaderRow.versionIndex(loaderRow.selectedVersion)
}
function reload() {
if (!box.checked || loaderRow.gameVersion === "") {
loaderRow.entries = []
loaderRow.applyEntries([])
return
}
// Сначала из кэша — список появляется мгновенно, — потом обновление сети.
loaderRow.entries = loaderRow.backend.loaderVersions(loaderRow.loaderKey,
loaderRow.gameVersion)
loaderRow.syncCombo()
loaderRow.applyEntries(loaderRow.backend.loaderVersions(loaderRow.loaderKey,
loaderRow.gameVersion))
loaderRow.backend.refreshLoaderVersions(loaderRow.loaderKey, loaderRow.gameVersion)
}
@@ -78,17 +78,17 @@ Column {
function applyBuild(loader, loaderVersion) {
loaderRow.applying = true
box.checked = loader === loaderRow.loaderKey
// Версию из сборки берём как пожелание: если под выбранную версию игры
// её нет, applyEntries() заменит её на максимально доступную.
loaderRow.selectedVersion = box.checked ? loaderVersion : ""
loaderRow.reload()
loaderRow.applying = false
}
onGameVersionChanged: {
// Сборка лоадера привязана к версии игры — при её смене выбор
// сбрасывается, и список перезапрашивается под новую версию.
loaderRow.entries = []
// Сборка лоадера привязана к версии игры: под новой версией прежний
// выбор недействителен, и список перезапрашивается заново.
loaderRow.selectedVersion = ""
combo.currentIndex = -1
loaderRow.reload()
}
@@ -97,16 +97,7 @@ Column {
function onLoaderVersionsChanged(key, game) {
if (key !== loaderRow.loaderKey || game !== loaderRow.gameVersion || !box.checked)
return
loaderRow.entries = loaderRow.backend.loaderVersions(key, game)
if (loaderRow.selectedVersion === "" || loaderRow.versionIndex(loaderRow.selectedVersion) < 0) {
const preferred = loaderRow.preferredIndex()
if (preferred >= 0) {
loaderRow.selectedVersion = loaderRow.entries[preferred].version
if (!loaderRow.applying)
loaderRow.changed()
}
}
loaderRow.syncCombo()
loaderRow.applyEntries(loaderRow.backend.loaderVersions(key, game))
}
}