This commit is contained in:
2026-09-29 09:40:37 +03:00
parent 441021b9a6
commit 6567e731d1
34 changed files with 57 additions and 709 deletions
+6 -32
View File
@@ -7,18 +7,16 @@
#include <optional>
// Откуда взялась сборка Java и что именно в ней лежит.
enum class JavaRuntimeKind {
Mojang, // «Java» — тот же рантайм, которым игру запускает официальный лаунчер
Jdk, // Eclipse Temurin JDK: компилятор и инструменты в комплекте
Jre // Eclipse Temurin JRE: только то, что нужно для запуска
Mojang,
Jdk,
Jre
};
QString javaKindKey(JavaRuntimeKind kind); // java | jdk | jre
QString javaKindKey(JavaRuntimeKind kind);
std::optional<JavaRuntimeKind> javaKindFromKey(const QString &key);
QString javaKindTitle(JavaRuntimeKind kind);
// Строка каталога — то, что можно скачать.
struct JavaRuntimeEntry
{
QString id; // temurin-jdk-21.0.12.1_1 | mojang-java-runtime-delta
@@ -37,7 +35,6 @@ struct JavaRuntimeEntry
bool isValid() const { return !id.isEmpty() && major > 0 && url.isValid(); }
};
// Сборка, уже распакованная в папке лаунчера.
struct InstalledJavaRuntime
{
QString id;
@@ -48,39 +45,16 @@ struct InstalledJavaRuntime
qint64 size = 0; // сколько заняло на диске по итогам установки
};
// Папка <root>/java: одна подпапка на сборку плюс её описание внутри. Отдельного
// индекса нет намеренно — удалённую вручную папку не пришлось бы вычищать ещё и
// из общего файла.
namespace JavaRuntimeStore {
QString dirFor(const QString &id);
// Всё, что лежит в <root>/java и на что нашлась java. Новые версии сверху.
QList<InstalledJavaRuntime> installed();
std::optional<InstalledJavaRuntime> find(const QString &id);
// Ищет bin/java в распакованном дереве: у Temurin на macOS это
// Contents/Home/bin, у Mojang — jre.bundle/Contents/Home/bin.
QString locateBinary(const QString &rootDir);
bool writeMeta(const InstalledJavaRuntime &runtime, QString *error);
bool remove(const QString &id, QString *error);
// Имя папки из идентификатора каталога: всё, кроме букв, цифр, точки, дефиса и
// подчёркивания, заменяется — идентификатор приходит из сети.
QString sanitizeId(const QString &id);
} // namespace JavaRuntimeStore
// Какая Java нужна какой версии игры. Точный ответ лежит в client.json
// (javaVersion.majorVersion) и берётся оттуда при запуске; эта таблица нужна
// раньше — когда версия ещё не скачана, а подсказку в каталоге показать надо.
}
namespace JavaRequirement {
// Минимальная мажорная версия Java для версии игры. 0 — разобрать не удалось.
int minimumFor(const QString &minecraftVersionId);
// «Minecraft 1.20.5 и новее» — подпись к строке каталога.
QString coverage(int javaMajor);
} // namespace JavaRequirement
}