version tracking and auto installing
This commit is contained in:
+49
-1
@@ -13,6 +13,8 @@
|
||||
struct AuthResult;
|
||||
class AuthService;
|
||||
class GameLauncher;
|
||||
class VersionManifestService;
|
||||
class VersionInstaller;
|
||||
|
||||
class LauncherBackend : public QObject
|
||||
{
|
||||
@@ -25,6 +27,20 @@ class LauncherBackend : public QObject
|
||||
Q_PROPERTY(bool gameRunning READ gameRunning NOTIFY gameRunningChanged)
|
||||
Q_PROPERTY(bool busy READ busy NOTIFY busyChanged)
|
||||
|
||||
// Объединённый список для выпадающего меню версий: установленные, разделитель,
|
||||
// затем весь каталог Mojang.
|
||||
Q_PROPERTY(QVariantList versionCatalog READ versionCatalog NOTIFY versionCatalogChanged)
|
||||
Q_PROPERTY(bool catalogLoading READ catalogLoading NOTIFY catalogLoadingChanged)
|
||||
|
||||
// Одного сигнала на все свойства загрузки достаточно: установщик уже
|
||||
// ограничивает частоту, а QML всё равно перечитывает их разом.
|
||||
Q_PROPERTY(bool downloading READ downloading NOTIFY downloadChanged)
|
||||
Q_PROPERTY(double downloadProgress READ downloadProgress NOTIFY downloadChanged)
|
||||
Q_PROPERTY(QString downloadVersion READ downloadVersion NOTIFY downloadChanged)
|
||||
Q_PROPERTY(QString downloadStatus READ downloadStatus NOTIFY downloadChanged)
|
||||
Q_PROPERTY(qint64 downloadBytesDone READ downloadBytesDone NOTIFY downloadChanged)
|
||||
Q_PROPERTY(qint64 downloadBytesTotal READ downloadBytesTotal NOTIFY downloadChanged)
|
||||
|
||||
public:
|
||||
explicit LauncherBackend(QObject *parent = nullptr);
|
||||
~LauncherBackend() override;
|
||||
@@ -33,7 +49,18 @@ public:
|
||||
QStringList versionNames() const;
|
||||
QStringList installedVersions() const;
|
||||
bool gameRunning() const;
|
||||
bool busy() const { return m_busy; }
|
||||
// Пока идёт загрузка версии, лаунчер тоже занят: кнопка запуска гаснет.
|
||||
bool busy() const;
|
||||
|
||||
QVariantList versionCatalog() const;
|
||||
bool catalogLoading() const;
|
||||
|
||||
bool downloading() const;
|
||||
double downloadProgress() const;
|
||||
QString downloadVersion() const;
|
||||
QString downloadStatus() const;
|
||||
qint64 downloadBytesDone() const;
|
||||
qint64 downloadBytesTotal() const;
|
||||
|
||||
Q_INVOKABLE void addProfile(const QString &name,
|
||||
const QString &login,
|
||||
@@ -66,6 +93,12 @@ public:
|
||||
// Проверка без запуска — для подсказки в интерфейсе.
|
||||
Q_INVOKABLE QStringList checkInstallation(int versionIndex) const;
|
||||
|
||||
// Вызывается при открытии выпадающего списка версий: свежий кэш — без сети.
|
||||
Q_INVOKABLE void refreshVersionCatalog(bool force = false);
|
||||
Q_INVOKABLE bool isVersionInstalled(const QString &versionId) const;
|
||||
Q_INVOKABLE void installVersion(const QString &versionId);
|
||||
Q_INVOKABLE void cancelDownload();
|
||||
|
||||
Q_INVOKABLE QVariantMap settings() const;
|
||||
Q_INVOKABLE void updateSettings(const QVariantMap &values);
|
||||
Q_INVOKABLE QStringList detectedJava() const;
|
||||
@@ -80,6 +113,9 @@ signals:
|
||||
void settingsChanged();
|
||||
void gameRunningChanged();
|
||||
void busyChanged();
|
||||
void versionCatalogChanged();
|
||||
void catalogLoadingChanged();
|
||||
void downloadChanged();
|
||||
|
||||
void launchProgress(const QString &message);
|
||||
void launched(const QString &profileName, const QString &versionName, const QString &serverUrl);
|
||||
@@ -121,6 +157,11 @@ private:
|
||||
QString gameDir() const;
|
||||
QString versionIdOf(const Version &version) const;
|
||||
|
||||
void invalidateCatalog();
|
||||
void rebuildCatalog() const;
|
||||
// Версия выбрана, но её нет в .minecraft — ставим в фоне.
|
||||
void maybeInstall(const QString &versionId);
|
||||
|
||||
void setBusy(bool busy);
|
||||
void failLaunch(const QString &message);
|
||||
void beginAuthentication();
|
||||
@@ -137,6 +178,13 @@ private:
|
||||
|
||||
AuthService *m_auth;
|
||||
GameLauncher *m_launcher;
|
||||
VersionManifestService *m_manifest;
|
||||
VersionInstaller *m_installer;
|
||||
|
||||
// Каталог версий пересобирается только по изменениям: QML читает свойство
|
||||
// помногу раз за кадр, пока открыт список.
|
||||
mutable QVariantList m_catalog;
|
||||
mutable bool m_catalogDirty = true;
|
||||
|
||||
bool m_busy = false;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user