diff --git a/include/ChatPage.h b/include/ChatPage.h
index 1582db06..147ff6b2 100644
--- a/include/ChatPage.h
+++ b/include/ChatPage.h
@@ -81,6 +81,7 @@ public:
QSharedPointer<UserSettings> userSettings() { return userSettings_; }
QSharedPointer<Cache> cache() { return cache_; }
+ void deleteConfigs();
signals:
void contentLoaded();
@@ -126,7 +127,6 @@ private:
void updateTypingUsers(const QString &roomid, const std::vector<std::string> &user_ids);
void loadStateFromCache();
- void deleteConfigs();
void resetUI();
//! Decides whether or not to hide the group's sidebar.
void setGroupViewState(bool isEnabled);
diff --git a/include/MatrixClient.h b/include/MatrixClient.h
index d16031d3..c60a7e0a 100644
--- a/include/MatrixClient.h
+++ b/include/MatrixClient.h
@@ -175,6 +175,8 @@ signals:
void redactionFailed(const QString &error);
void redactionCompleted(const QString &room_id, const QString &event_id);
+ void invalidToken();
+ void syncError(const QString &error);
private:
QNetworkReply *makeUploadRequest(QSharedPointer<QIODevice> iodev);
diff --git a/src/MainWindow.cc b/src/MainWindow.cc
index c2353a11..404baec5 100644
--- a/src/MainWindow.cc
+++ b/src/MainWindow.cc
@@ -131,6 +131,11 @@ MainWindow::MainWindow(QWidget *parent)
SIGNAL(registerSuccess(QString, QString, QString)),
this,
SLOT(showChatPage(QString, QString, QString)));
+ connect(client_.data(), &MatrixClient::invalidToken, this, [this]() {
+ chat_page_->deleteConfigs();
+ showLoginPage();
+ login_page_->loginError("Invalid token detected. Please try to login again.");
+ });
QShortcut *quitShortcut = new QShortcut(QKeySequence::Quit, this);
connect(quitShortcut, &QShortcut::activated, this, QApplication::quit);
diff --git a/src/MatrixClient.cc b/src/MatrixClient.cc
index 5593dbe6..96f8b941 100644
--- a/src/MatrixClient.cc
+++ b/src/MatrixClient.cc
@@ -309,13 +309,24 @@ MatrixClient::sync() noexcept
reply->deleteLater();
int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
+ auto data = reply->readAll();
if (status == 0 || status >= 400) {
- qDebug() << reply->errorString();
- return;
- }
+ try {
+ mtx::errors::Error res = nlohmann::json::parse(data);
- auto data = reply->readAll();
+ if (res.errcode == mtx::errors::ErrorCode::M_UNKNOWN_TOKEN) {
+ emit invalidToken();
+ return;
+ }
+
+ emit syncError(QString::fromStdString(res.error));
+
+ return;
+ } catch (const nlohmann::json::exception &e) {
+ qWarning() << e.what();
+ }
+ }
try {
mtx::responses::Sync response = nlohmann::json::parse(data);
|