license login feature
This commit is contained in:
+32
-1
@@ -13,6 +13,7 @@
|
||||
|
||||
struct AuthResult;
|
||||
class AuthService;
|
||||
class MsaAuthService;
|
||||
class GameLauncher;
|
||||
class VersionManifestService;
|
||||
class VersionInstaller;
|
||||
@@ -48,6 +49,10 @@ class LauncherBackend : public QObject
|
||||
Q_PROPERTY(QString switchStatus READ switchStatus NOTIFY switchChanged)
|
||||
Q_PROPERTY(bool busy READ busy NOTIFY busyChanged)
|
||||
|
||||
// Собран ли лаунчер с Qt WebEngine. Без него окно входа Microsoft
|
||||
// показать нечем, и интерфейс не должен предлагать этот путь.
|
||||
Q_PROPERTY(bool microsoftAvailable READ microsoftAvailable CONSTANT)
|
||||
|
||||
// Объединённый список для выпадающего меню версий: установленные, разделитель,
|
||||
// затем весь каталог Mojang.
|
||||
Q_PROPERTY(QVariantList versionCatalog READ versionCatalog NOTIFY versionCatalogChanged)
|
||||
@@ -93,6 +98,7 @@ public:
|
||||
QString switchStatus() const;
|
||||
// Пока идёт загрузка версии, лаунчер тоже занят: кнопка запуска гаснет.
|
||||
bool busy() const;
|
||||
bool microsoftAvailable() const;
|
||||
|
||||
QVariantList versionCatalog() const;
|
||||
bool catalogLoading() const;
|
||||
@@ -128,6 +134,15 @@ public:
|
||||
// loader, loaderVersion, resolvedVersionId.
|
||||
Q_INVOKABLE void updateCustomBuild(int index, const QVariantMap &fields);
|
||||
Q_INVOKABLE QVariantMap profileAt(int index) const;
|
||||
|
||||
// Вход в аккаунт Microsoft. profileIndex = -1 — вход ещё не привязан к
|
||||
// профилю: он создастся по нику, который вернут Minecraft Services.
|
||||
Q_INVOKABLE void startMicrosoftLogin(int profileIndex);
|
||||
Q_INVOKABLE void finishMicrosoftLogin(const QString &code);
|
||||
Q_INVOKABLE void cancelMicrosoftLogin();
|
||||
// Разбор адреса, на который встроенное окно возвращается после входа.
|
||||
// Живёт в C++, чтобы правила совпадения не разъезжались с сервисом.
|
||||
Q_INVOKABLE QVariantMap inspectMicrosoftRedirect(const QString &url) const;
|
||||
Q_INVOKABLE QVariantMap customBuildAt(int index) const;
|
||||
Q_INVOKABLE void removeProfile(int index);
|
||||
// Что именно потеряется при удалении — для текста предупреждения.
|
||||
@@ -224,6 +239,12 @@ signals:
|
||||
void launched(const QString &profileName, const QString &buildName, const QString &serverUrl);
|
||||
void launchError(const QString &message);
|
||||
void twoFactorRequired(const QString &profileName);
|
||||
// Окну входа Microsoft: открыться на этом адресе.
|
||||
void microsoftLoginUrlReady(const QString &url);
|
||||
void microsoftLoginSucceeded(const QString &playerName);
|
||||
void microsoftLoginFailed(const QString &message);
|
||||
// Сессия профиля протухла настолько, что нужен повторный вход руками.
|
||||
void microsoftReloginRequired(int profileIndex);
|
||||
void gameOutput(const QString &line);
|
||||
void gameFinished(int exitCode, bool crashed);
|
||||
|
||||
@@ -232,8 +253,11 @@ private:
|
||||
{
|
||||
int id = 0;
|
||||
QString name, login, password;
|
||||
QString authType = QStringLiteral("offline"); // offline | elyby
|
||||
QString authType = QStringLiteral("offline"); // offline | elyby | microsoft
|
||||
QString clientToken, accessToken, uuid, resolvedName, userType;
|
||||
// Только для microsoft: продление сессии, ${auth_xuid} и срок жизни
|
||||
// accessToken в ISO-8601 (чтобы класть в JSON без конвертеров).
|
||||
QString refreshToken, xuid, tokenExpiry;
|
||||
};
|
||||
// Пользовательская сборка: имя, сервер, версия Minecraft и, начиная со
|
||||
// второго этапа, выбранный модлоадер.
|
||||
@@ -329,6 +353,8 @@ private:
|
||||
void setBusy(bool busy);
|
||||
void failLaunch(const QString &message);
|
||||
void beginAuthentication();
|
||||
void beginMicrosoftAuthentication();
|
||||
void applyMicrosoftResult(Profile &profile, const AuthResult &auth);
|
||||
void continueLaunch(const AuthResult &auth);
|
||||
|
||||
QList<Profile> m_profiles;
|
||||
@@ -341,6 +367,7 @@ private:
|
||||
int m_nextBuildId = 1;
|
||||
|
||||
AuthService *m_auth;
|
||||
MsaAuthService *m_msa;
|
||||
GameLauncher *m_launcher;
|
||||
VersionManifestService *m_manifest;
|
||||
VersionInstaller *m_installer;
|
||||
@@ -356,6 +383,10 @@ private:
|
||||
// когда установщик отчитается.
|
||||
int m_loaderInstallBuildId = -1;
|
||||
|
||||
// Профиль, для которого открыто окно входа Microsoft. -1 — окно закрыто,
|
||||
// -2 — вход для профиля, которого ещё нет.
|
||||
int m_msaLoginProfile = -1;
|
||||
|
||||
// Каталог версий пересобирается только по изменениям: QML читает свойство
|
||||
// помногу раз за кадр, пока открыт список.
|
||||
mutable QVariantList m_catalog;
|
||||
|
||||
Reference in New Issue
Block a user