_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);
}
}
}
+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) {
private Q_SLOTS:
void slotCheckConnection();
+ void slotCheckServerAvailibility();
void slotPushNotificationsReady();
void slotServerUserStatusChanged();
QTimer _checkConnectionTimer;
QElapsedTimer _lastCheckConnectionTimer;
+ QTimer _checkServerAvailibilityTimer;
+
explicit AccountState() = default;
friend class ::FakeAccountState;