cleanups
This commit is contained in:
+2
-14
@@ -24,7 +24,7 @@ constexpr auto kExecutable = "java";
|
||||
|
||||
const QString kMetaFile = QStringLiteral("runtime.json");
|
||||
|
||||
} // namespace
|
||||
}
|
||||
|
||||
QString javaKindKey(JavaRuntimeKind kind)
|
||||
{
|
||||
@@ -65,7 +65,6 @@ QString JavaRuntimeStore::sanitizeId(const QString &id)
|
||||
const bool safe = ch.isLetterOrNumber() || ch == u'.' || ch == u'-' || ch == u'_';
|
||||
out += safe ? ch : u'_';
|
||||
}
|
||||
// Точки в начале превратили бы папку в скрытую, а «..» — в путь наружу.
|
||||
while (out.startsWith(u'.'))
|
||||
out.remove(0, 1);
|
||||
return out;
|
||||
@@ -84,8 +83,6 @@ QString JavaRuntimeStore::locateBinary(const QString &rootDir)
|
||||
if (rootDir.isEmpty() || !QDir(rootDir).exists())
|
||||
return {};
|
||||
|
||||
// Кандидатов бывает несколько: в JDK рядом с bin/java лежит ещё и
|
||||
// jre/bin/java. Берём самый короткий путь — это корневой интерпретатор.
|
||||
QString best;
|
||||
QDirIterator it(rootDir, QStringList{QString::fromLatin1(kExecutable)},
|
||||
QDir::Files, QDirIterator::Subdirectories);
|
||||
@@ -119,8 +116,6 @@ std::optional<InstalledJavaRuntime> JavaRuntimeStore::find(const QString &id)
|
||||
runtime.version = object.value(QStringLiteral("version")).toString();
|
||||
runtime.size = static_cast<qint64>(object.value(QStringLiteral("size")).toDouble());
|
||||
|
||||
// Путь хранится относительным: папку лаунчера могли перенести вместе с
|
||||
// профилем пользователя, а абсолютный путь этого не переживает.
|
||||
const QString relative = object.value(QStringLiteral("javaPath")).toString();
|
||||
runtime.javaPath = relative.isEmpty() ? QString() : QDir(dir).absoluteFilePath(relative);
|
||||
|
||||
@@ -185,8 +180,6 @@ bool JavaRuntimeStore::writeMeta(const InstalledJavaRuntime &runtime, QString *e
|
||||
bool JavaRuntimeStore::remove(const QString &id, QString *error)
|
||||
{
|
||||
const QString dir = dirFor(id);
|
||||
// Удаляем только внутри <root>/java: sanitizeId не пропустит «..», но
|
||||
// проверка стоит одной строки, а цена ошибки — чужая папка.
|
||||
if (dir.isEmpty() || !dir.startsWith(LauncherPaths::javaDir() + u'/')) {
|
||||
if (error)
|
||||
*error = Loc::text("java.error.invalidRuntimeId");
|
||||
@@ -208,9 +201,6 @@ int JavaRequirement::minimumFor(const QString &minecraftVersionId)
|
||||
if (id.isEmpty())
|
||||
return 0;
|
||||
|
||||
// Снапшоты — YYwWWa. Ровных границ по неделям нет, но год отвечает на
|
||||
// вопрос «какая Java» точнее, чем ничего: 1.17 (Java 16) вышла в 21-м году,
|
||||
// 1.18 (Java 17) в конце того же года, 1.20.5 (Java 21) — в 24-м.
|
||||
static const QRegularExpression snapshot(QStringLiteral("^(\\d{2})w\\d{2}[a-z]$"));
|
||||
const QRegularExpressionMatch snapshotMatch = snapshot.match(id);
|
||||
if (snapshotMatch.hasMatch()) {
|
||||
@@ -224,18 +214,16 @@ int JavaRequirement::minimumFor(const QString &minecraftVersionId)
|
||||
return 8;
|
||||
}
|
||||
|
||||
// Релизы и их пре-релизы: 1.20.5, 1.21, 1.21.4-pre1, 26.2.
|
||||
static const QRegularExpression release(
|
||||
QStringLiteral("^(\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))?"));
|
||||
const QRegularExpressionMatch releaseMatch = release.match(id);
|
||||
if (!releaseMatch.hasMatch())
|
||||
return 8; // a1.2.6, b1.7.3, rd-132211 и прочая доисторическая ваниль
|
||||
return 8;
|
||||
|
||||
const int epoch = releaseMatch.captured(1).toInt();
|
||||
const int major = releaseMatch.captured(2).toInt();
|
||||
const int patch = releaseMatch.captured(3).toInt();
|
||||
|
||||
// Нумерация после 1.21.x пошла по годам (26.2) — это заведомо новее 1.20.5.
|
||||
if (epoch != 1)
|
||||
return 21;
|
||||
if (major >= 21)
|
||||
|
||||
Reference in New Issue
Block a user