mirror of
https://github.com/nextcloud/desktop.git
synced 2024-11-22 21:15:55 +03:00
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:
parent
16eaa350fc
commit
cd4b72967c
2 changed files with 29 additions and 0 deletions
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue