java implementation and downloading

This commit is contained in:
2026-08-27 19:35:11 +03:00
parent 08e0dc4965
commit dddc0261d4
14 changed files with 2907 additions and 10 deletions
+37
View File
@@ -18,6 +18,8 @@ class VersionInstaller;
class ModLoaderVersionService;
class ModLoaderInstaller;
class BuildSwitcher;
class JavaRuntimeService;
class JavaInstaller;
class LauncherBackend : public QObject
{
@@ -48,6 +50,11 @@ class LauncherBackend : public QObject
Q_PROPERTY(QVariantList versionCatalog READ versionCatalog NOTIFY versionCatalogChanged)
Q_PROPERTY(bool catalogLoading READ catalogLoading NOTIFY catalogLoadingChanged)
// Сборки Java для окна выбора: скачиваемые из сети плюс те, что уже лежат
// в папке лаунчера.
Q_PROPERTY(QVariantList javaCatalog READ javaCatalog NOTIFY javaCatalogChanged)
Q_PROPERTY(bool javaCatalogLoading READ javaCatalogLoading NOTIFY javaCatalogLoadingChanged)
// Одного сигнала на все свойства загрузки достаточно: установщик уже
// ограничивает частоту, а QML всё равно перечитывает их разом.
Q_PROPERTY(bool downloading READ downloading NOTIFY downloadChanged)
@@ -78,6 +85,9 @@ public:
QVariantList versionCatalog() const;
bool catalogLoading() const;
QVariantList javaCatalog() const;
bool javaCatalogLoading() const;
bool downloading() const;
double downloadProgress() const;
QString downloadVersion() const;
@@ -145,6 +155,16 @@ public:
Q_INVOKABLE void updateSettings(const QVariantMap &values);
Q_INVOKABLE QStringList detectedJava() const;
// ── Сборки Java ─────────────────────────────────────────────────────
// Вызывается при открытии окна выбора: свежий кэш — без сети.
Q_INVOKABLE void refreshJavaCatalog(bool force = false);
Q_INVOKABLE void installJavaRuntime(const QString &runtimeId);
Q_INVOKABLE void removeJavaRuntime(const QString &runtimeId);
// Пусто — сборки с таким id в папке лаунчера нет.
Q_INVOKABLE QVariantMap javaRuntimeInfo(const QString &runtimeId) const;
// Минимальная Java для версии игры выбранной сборки; 0 — версия не выбрана.
Q_INVOKABLE int requiredJavaMajor(int buildIndex) const;
Q_INVOKABLE void openMinecraftFolder();
Q_INVOKABLE void openGameFolder();
@@ -160,8 +180,13 @@ signals:
void busyChanged();
void versionCatalogChanged();
void catalogLoadingChanged();
void javaCatalogChanged();
void javaCatalogLoadingChanged();
void downloadChanged();
// Сборка Java установлена: окно настроек обновляет подпись, не переоткрываясь.
void javaRuntimeInstalled(const QString &runtimeId);
void launchProgress(const QString &message);
void launched(const QString &profileName, const QString &buildName, const QString &serverUrl);
void launchError(const QString &message);
@@ -216,6 +241,13 @@ private:
void invalidateCatalog();
void rebuildCatalog() const;
void invalidateJavaCatalog();
void rebuildJavaCatalog() const;
// Панель загрузки занята установкой Java, а не версии или модлоадера.
bool javaDownloadShown() const;
// Путь к java выбранной сборки из папки лаунчера. Пусто — сборка не выбрана
// или ещё не скачана; тогда в дело идёт javaPath и автопоиск.
QString managedJavaPath() const;
// Версия выбрана, но её нет в .minecraft — ставим в фоне.
void maybeInstall(const QString &versionId);
@@ -240,6 +272,8 @@ private:
ModLoaderVersionService *m_loaderMeta;
ModLoaderInstaller *m_loaderInstaller;
BuildSwitcher *m_switcher;
JavaRuntimeService *m_javaMeta;
JavaInstaller *m_javaInstaller;
// Сборка, для которой сейчас ставится модлоадер: по её id находим запись,
// когда установщик отчитается.
@@ -250,6 +284,9 @@ private:
mutable QVariantList m_catalog;
mutable bool m_catalogDirty = true;
mutable QVariantList m_javaCatalog;
mutable bool m_javaCatalogDirty = true;
bool m_busy = false;
// Состояние запуска, начатого до асинхронной авторизации.