builds fixes
This commit is contained in:
+26
-35
@@ -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))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user