Retry initial sync (#19)

This commit is contained in:
Konstantinos Sideris 2017-10-20 22:32:48 +03:00
parent 8a9a513ecd
commit 13e526c27d
6 changed files with 60 additions and 19 deletions

View file

@ -29,6 +29,8 @@
#include "StateEvent.h"
constexpr int MAX_INITIAL_SYNC_FAILURES = 5;
namespace events = matrix::events;
ChatPage::ChatPage(QSharedPointer<MatrixClient> client, QWidget *parent)
@ -192,6 +194,24 @@ ChatPage::ChatPage(QSharedPointer<MatrixClient> client, QWidget *parent)
SIGNAL(initialSyncCompleted(const SyncResponse &)),
this,
SLOT(initialSyncCompleted(const SyncResponse &)));
connect(client_.data(), &MatrixClient::initialSyncFailed, this, [=](const QString &msg) {
initialSyncFailures += 1;
if (initialSyncFailures >= MAX_INITIAL_SYNC_FAILURES) {
initialSyncFailures = 0;
deleteConfigs();
emit showLoginPage(msg);
emit contentLoaded();
return;
}
qWarning() << msg;
qWarning() << "Retrying initial sync";
client_->initialSync();
});
connect(client_.data(),
SIGNAL(syncCompleted(const SyncResponse &)),
this,
@ -239,7 +259,29 @@ ChatPage::ChatPage(QSharedPointer<MatrixClient> client, QWidget *parent)
void
ChatPage::logout()
{
// Delete all config parameters.
deleteConfigs();
resetUI();
emit close();
}
void
ChatPage::resetUI()
{
room_avatars_.clear();
room_list_->clear();
settingsManager_.clear();
state_manager_.clear();
top_bar_->reset();
user_info_widget_->reset();
view_manager_->clearAll();
AvatarProvider::clear();
}
void
ChatPage::deleteConfigs()
{
QSettings settings;
settings.beginGroup("auth");
settings.remove("");
@ -253,21 +295,7 @@ ChatPage::logout()
cache_->deleteData();
// Clear the environment.
room_list_->clear();
view_manager_->clearAll();
top_bar_->reset();
user_info_widget_->reset();
client_->reset();
state_manager_.clear();
settingsManager_.clear();
room_avatars_.clear();
AvatarProvider::clear();
emit close();
}
void

View file

@ -73,6 +73,10 @@ MainWindow::MainWindow(QWidget *parent)
connect(
chat_page_, SIGNAL(changeWindowTitle(QString)), this, SLOT(setWindowTitle(QString)));
connect(chat_page_, SIGNAL(unreadMessages(int)), trayIcon_, SLOT(setUnreadCount(int)));
connect(chat_page_, &ChatPage::showLoginPage, this, [=](const QString &msg) {
login_page_->loginError(msg);
showLoginPage();
});
connect(trayIcon_,
SIGNAL(activated(QSystemTrayIcon::ActivationReason)),

View file

@ -221,7 +221,7 @@ MatrixClient::onInitialSyncResponse(QNetworkReply *reply)
int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
if (status == 0 || status >= 400) {
qWarning() << reply->errorString();
emit initialSyncFailed(reply->errorString());
return;
}