summary refs log tree commit diff
path: root/src/ChatPage.cc
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2017-10-21 21:17:01 +0300
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2017-10-21 21:17:01 +0300
commit160fe1d668d9c1fa8f089cec34df29c2ba31a56f (patch)
treef0d9fd1aee271afa8e51aea312ad1ec01ff614dc /src/ChatPage.cc
parentRemove ui flickering when adding new timeline events (diff)
downloadnheko-160fe1d668d9c1fa8f089cec34df29c2ba31a56f.tar.xz
Remove cache updates from the main thread
Diffstat (limited to 'src/ChatPage.cc')
-rw-r--r--src/ChatPage.cc25
1 files changed, 9 insertions, 16 deletions
diff --git a/src/ChatPage.cc b/src/ChatPage.cc
index 5df8dec2..65fef9de 100644
--- a/src/ChatPage.cc
+++ b/src/ChatPage.cc
@@ -18,6 +18,7 @@
 #include <QApplication>
 #include <QDebug>
 #include <QSettings>
+#include <QtConcurrent>
 
 #include "AvatarProvider.h"
 #include "ChatPage.h"
@@ -196,6 +197,11 @@ ChatPage::ChatPage(QSharedPointer<MatrixClient> client, QWidget *parent)
                 this,
                 SLOT(initialSyncCompleted(const SyncResponse &)));
         connect(client_.data(), &MatrixClient::initialSyncFailed, this, [=](const QString &msg) {
+                if (client_->getHomeServer().isEmpty()) {
+                        deleteConfigs();
+                        return;
+                }
+
                 initialSyncFailures += 1;
 
                 if (initialSyncFailures >= MAX_INITIAL_SYNC_FAILURES) {
@@ -426,14 +432,7 @@ ChatPage::syncCompleted(const SyncResponse &response)
                 }
         }
 
-        try {
-                cache_->setState(response.nextBatch(), state_manager_);
-        } catch (const lmdb::error &e) {
-                qCritical() << "The cache couldn't be updated: " << e.what();
-                // TODO: Notify the user.
-                cache_->unmount();
-                cache_->deleteData();
-        }
+        QtConcurrent::run(cache_.data(), &Cache::setState, response.nextBatch(), state_manager_);
 
         client_->setNextBatchToken(response.nextBatch());
 
@@ -479,16 +478,10 @@ ChatPage::initialSyncCompleted(const SyncResponse &response)
                 QApplication::processEvents();
         }
 
-        try {
-                cache_->setState(response.nextBatch(), state_manager_);
-        } catch (const lmdb::error &e) {
-                qCritical() << "The cache couldn't be initialized: " << e.what();
-                cache_->unmount();
-                cache_->deleteData();
-        }
-
         client_->setNextBatchToken(response.nextBatch());
 
+        QtConcurrent::run(cache_.data(), &Cache::setState, response.nextBatch(), state_manager_);
+
         // Populate timelines with messages.
         view_manager_->initialize(response.rooms());