Check server's 204 endpoint every minute and restore connection immidiately after successful status code.

Signed-off-by: alex-z <blackslayer4@gmail.com>
This commit is contained in:
alex-z 2023-04-19 17:00:16 +02:00 committed by Matthieu Gallien
parent 16eaa350fc
commit cd4b72967c
2 changed files with 29 additions and 0 deletions

View file

@ -72,6 +72,10 @@ AccountState::AccountState(AccountPtr account)
_checkConnectionTimer.setInterval(ConnectionValidator::DefaultCallingIntervalMsec);
_checkConnectionTimer.start();
connect(&_checkServerAvailibilityTimer, &QTimer::timeout, this, &AccountState::slotCheckServerAvailibility);
_checkServerAvailibilityTimer.setInterval(ConnectionValidator::DefaultCallingIntervalMsec);
_checkServerAvailibilityTimer.start();
QTimer::singleShot(0, this, &AccountState::slotCheckConnection);
}
@ -557,6 +561,28 @@ void AccountState::slotCheckConnection()
}
}
void AccountState::slotCheckServerAvailibility()
{
if (state() == AccountState::Connected
|| state() == AccountState::SignedOut
|| state() == AccountState::MaintenanceMode
|| state() == AccountState::AskingCredentials) {
qCInfo(lcAccountState) << "Skipping server availibility check for account" << _account->id() << "with state" << state();
return;
}
qCInfo(lcAccountState) << "Checking server availibility for account" << _account->id();
const auto serverAvailibilityUrl = Utility::concatUrlPath(_account->url(), QLatin1String("/index.php/204"));
auto checkServerAvailibilityJob = _account->sendRequest(QByteArrayLiteral("GET"), serverAvailibilityUrl);
connect(checkServerAvailibilityJob, &SimpleNetworkJob::finishedSignal, this, [this](QNetworkReply *reply) {
if (reply->attribute(QNetworkRequest::HttpStatusCodeAttribute) == 204) {
qCInfo(lcAccountState) << "Server is now available for account" << _account->id();
_lastCheckConnectionTimer.invalidate();
resetRetryCount();
QMetaObject::invokeMethod(this, "slotCheckConnection", Qt::QueuedConnection);
}
});
}
void AccountState::slotPushNotificationsReady()
{
if (state() != AccountState::State::Connected) {

View file

@ -216,6 +216,7 @@ protected Q_SLOTS:
private Q_SLOTS:
void slotCheckConnection();
void slotCheckServerAvailibility();
void slotPushNotificationsReady();
void slotServerUserStatusChanged();
@ -261,6 +262,8 @@ private:
QTimer _checkConnectionTimer;
QElapsedTimer _lastCheckConnectionTimer;
QTimer _checkServerAvailibilityTimer;
explicit AccountState() = default;
friend class ::FakeAccountState;