summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2017-10-20 22:32:48 +0300
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2017-10-20 22:32:48 +0300
commit13e526c27d91c5cfa61ef709b7d1b0e709ba59fb (patch)
tree1b87c3c3894aa0ed71f276838a1d7011d26da5c9 /src
parentMove ctrl-k callback to the MainWindow (diff)
downloadnheko-13e526c27d91c5cfa61ef709b7d1b0e709ba59fb.tar.xz
Retry initial sync (#19)
Diffstat (limited to 'src')
-rw-r--r--src/ChatPage.cc58
-rw-r--r--src/MainWindow.cc4
-rw-r--r--src/MatrixClient.cc2
3 files changed, 48 insertions, 16 deletions
diff --git a/src/ChatPage.cc b/src/ChatPage.cc

index d8280a4a..cf78d8a1 100644 --- a/src/ChatPage.cc +++ b/src/ChatPage.cc
@@ -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 diff --git a/src/MainWindow.cc b/src/MainWindow.cc
index f6276967..b6033eaf 100644 --- a/src/MainWindow.cc +++ b/src/MainWindow.cc
@@ -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)), diff --git a/src/MatrixClient.cc b/src/MatrixClient.cc
index e9e47fcb..4ececd01 100644 --- a/src/MatrixClient.cc +++ b/src/MatrixClient.cc
@@ -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; }