Files
BiLauncher/javaruntime.h
2026-09-29 09:40:37 +03:00

61 lines
2.0 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#pragma once
#include <QDateTime>
#include <QList>
#include <QString>
#include <QUrl>
#include <optional>
enum class JavaRuntimeKind {
Mojang,
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
JavaRuntimeKind kind = JavaRuntimeKind::Jdk;
int major = 0; // 8, 17, 21…
QString version; // 21.0.12.1+1 | 21.0.7
QString component; // java-runtime-delta — только у сборок Mojang
QDateTime released;
QUrl url; // архив Temurin либо manifest.json компонента
QString checksum; // sha256 архива Temurin, sha1 манифеста Mojang
qint64 size = 0; // размер загрузки, 0 — неизвестен
QString archive; // zip | tar.gz | mojang
QString architecture; // x64 | aarch64 — на macOS бывает и не родная
bool lts = false;
bool isValid() const { return !id.isEmpty() && major > 0 && url.isValid(); }
};
struct InstalledJavaRuntime
{
QString id;
QString kind; // java | jdk | jre
int major = 0;
QString version;
QString javaPath; // абсолютный путь к java/java.exe
qint64 size = 0; // сколько заняло на диске по итогам установки
};
namespace JavaRuntimeStore {
QString dirFor(const QString &id);
QList<InstalledJavaRuntime> installed();
std::optional<InstalledJavaRuntime> find(const QString &id);
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 JavaRequirement {
int minimumFor(const QString &minecraftVersionId);
QString coverage(int javaMajor);
}