seasonal builds

This commit is contained in:
2026-08-31 00:59:14 +03:00
parent 4689e59b5a
commit c25e071b29
17 changed files with 2312 additions and 18 deletions
+54
View File
@@ -132,6 +132,60 @@ QList<JavaRuntimeEntry> JavaRuntimeService::entries(JavaRuntimeKind kind) const
return result;
}
std::optional<JavaRuntimeEntry> JavaRuntimeService::bestFor(int major) const
{
if (major <= 0)
return std::nullopt;
// Каталог уже отфильтрован по текущей ОС и архитектуре, поэтому здесь
// остаётся выбрать из заведомо запускаемого.
const auto rank = [](JavaRuntimeKind kind) {
switch (kind) {
case JavaRuntimeKind::Jdk:
return 0;
case JavaRuntimeKind::Mojang:
return 1;
case JavaRuntimeKind::Jre:
return 2;
}
return 3;
};
const JavaRuntimeEntry *best = nullptr;
for (const JavaRuntimeEntry &entry : m_entries) {
if (!entry.isValid() || entry.major < major)
continue;
if (!best) {
best = &entry;
continue;
}
// Чем ближе мажорная версия к нужной, тем меньше шансов на сюрприз:
// игра на Java 8 под Java 21 просто не стартует.
if (entry.major != best->major) {
if (entry.major < best->major)
best = &entry;
continue;
}
if (rank(entry.kind) != rank(best->kind)) {
if (rank(entry.kind) < rank(best->kind))
best = &entry;
continue;
}
if (entry.released.isValid() && best->released.isValid()
&& entry.released != best->released) {
if (entry.released > best->released)
best = &entry;
continue;
}
if (entry.version > best->version)
best = &entry;
}
if (!best)
return std::nullopt;
return *best;
}
std::optional<JavaRuntimeEntry> JavaRuntimeService::find(const QString &id) const
{
const auto it = m_indexById.constFind(id);