1
Fork 0
mirror of https://github.com/redstrate/Astra.git synced 2025-04-21 20:27:45 +00:00

Prevent logging in when maintenance is in progress

This commit is contained in:
redstrate 2021-12-02 14:17:33 -05:00
parent 80306d65fb
commit f4f3bfb07c
5 changed files with 53 additions and 2 deletions

View file

@ -353,6 +353,12 @@ LauncherCore::LauncherCore() : settings(QSettings::IniFormat, QSettings::UserSco
assetUpdater = new AssetUpdater(*this); assetUpdater = new AssetUpdater(*this);
readInitialInformation(); readInitialInformation();
// check gate status before login
squareLauncher->gateOpen();
// TODO: we really should call this "heavy" signal
connect(squareLauncher, &SquareLauncher::gateStatusRecieved, this, &LauncherCore::settingsChanged);
} }
ProfileSettings LauncherCore::getProfile(int index) const { ProfileSettings LauncherCore::getProfile(int index) const {

View file

@ -86,7 +86,7 @@ LauncherWindow::LauncherWindow(LauncherCore& core, QWidget* parent) : QMainWindo
otpEdit = new QLineEdit(); otpEdit = new QLineEdit();
layout->addRow("One-Time Password", otpEdit); layout->addRow("One-Time Password", otpEdit);
auto loginButton = new QPushButton("Login"); loginButton = new QPushButton("Login");
layout->addRow(loginButton); layout->addRow(loginButton);
registerButton = new QPushButton("Register"); registerButton = new QPushButton("Register");
@ -185,6 +185,15 @@ void LauncherWindow::reloadControls() {
}); });
} }
const bool isLockedOut = !currentProfile().isSapphire && !core.squareLauncher->isGateOpen;
if(!isLockedOut) {
loginButton->setText("Login");
} else {
loginButton->setText("Login (Maintenance is in progress)");
}
loginButton->setEnabled(!isLockedOut);
registerButton->setEnabled(currentProfile().isSapphire); registerButton->setEnabled(currentProfile().isSapphire);
otpEdit->setEnabled(!currentProfile().isSapphire); otpEdit->setEnabled(!currentProfile().isSapphire);

View file

@ -27,5 +27,5 @@ private:
QLineEdit* usernameEdit, *passwordEdit; QLineEdit* usernameEdit, *passwordEdit;
QLineEdit* otpEdit; QLineEdit* otpEdit;
QCheckBox* rememberUsernameBox, *rememberPasswordBox; QCheckBox* rememberUsernameBox, *rememberPasswordBox;
QPushButton* registerButton; QPushButton* loginButton, *registerButton;
}; };

View file

@ -5,6 +5,8 @@
#include <QNetworkReply> #include <QNetworkReply>
#include <QRegularExpressionMatch> #include <QRegularExpressionMatch>
#include <QMessageBox> #include <QMessageBox>
#include <QJsonDocument>
#include <QJsonObject>
#include "launchercore.h" #include "launchercore.h"
@ -157,3 +159,29 @@ void SquareLauncher::readExpansionVersions(const LoginInformation& info, int max
for(int i = 0; i < max; i++) for(int i = 0; i < max; i++)
expansionVersions.push_back(window.readVersion(QString("%1/game/sqpack/ex%2/ex%2.ver").arg(info.settings->gamePath, QString::number(i + 1)))); expansionVersions.push_back(window.readVersion(QString("%1/game/sqpack/ex%2/ex%2.ver").arg(info.settings->gamePath, QString::number(i + 1))));
} }
void SquareLauncher::gateOpen() {
QUrlQuery query;
query.addQueryItem("", QString::number(QDateTime::currentMSecsSinceEpoch()));
QUrl url;
url.setUrl("https://frontier.ffxiv.com/worldStatus/gate_status.json");
url.setQuery(query);
QNetworkRequest request;
request.setUrl(url);
window.buildRequest(request);
auto reply = window.mgr->get(request);
connect(reply, &QNetworkReply::finished, [this, reply] {
QJsonDocument document = QJsonDocument::fromJson(reply->readAll());
if(document.isEmpty() || document.object()["status"].toInt() == 0) {
gateStatusRecieved(false);
isGateOpen = false;
} else {
gateStatusRecieved(true);
isGateOpen = true;
}
});
}

View file

@ -3,15 +3,23 @@
#include "launchercore.h" #include "launchercore.h"
class SquareLauncher : public QObject { class SquareLauncher : public QObject {
Q_OBJECT
public: public:
SquareLauncher(LauncherCore& window); SquareLauncher(LauncherCore& window);
void gateOpen();
void getStored(const LoginInformation& info); void getStored(const LoginInformation& info);
void login(const LoginInformation& info, QUrl referer); void login(const LoginInformation& info, QUrl referer);
void registerSession(const LoginInformation& info); void registerSession(const LoginInformation& info);
bool isGateOpen = false;
signals:
void gateStatusRecieved(bool gateOpen);
private: private:
QString getBootHash(const LoginInformation& info); QString getBootHash(const LoginInformation& info);
void readExpansionVersions(const LoginInformation& info, int max); void readExpansionVersions(const LoginInformation& info, int max);