seasonal builds
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user