diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp
index b2a036c5..ce136e35 100644
--- a/src/timeline/TimelineModel.cpp
+++ b/src/timeline/TimelineModel.cpp
@@ -521,6 +521,8 @@ TimelineModel::TimelineModel(TimelineViewManager *manager, QString room_id, QObj
cache::client()->updateState(room_id_.toStdString(), events_, true);
this->syncState({std::move(events_.events)});
});
+
+ connect(this, &TimelineModel::ignoredUser, this, &TimelineModel::handleIgnoredUser);
}
QHash<int, QByteArray>
@@ -2109,6 +2111,17 @@ TimelineModel::scrollTimerEvent()
}
void
+TimelineModel::handleIgnoredUser(const QString &id, const std::optional<QString> &err)
+{
+ if (err) {
+ MainWindow::instance()->showNotification(
+ tr("Failed to ignore \"%1\": %2").arg(id).arg(*err));
+ } else {
+ this->clearTimeline();
+ }
+}
+
+void
TimelineModel::requestKeyForEvent(const QString &id)
{
auto encrypted_event = events.get(id.toStdString(), "", false);
diff --git a/src/timeline/TimelineModel.h b/src/timeline/TimelineModel.h
index fccc99eb..c8947891 100644
--- a/src/timeline/TimelineModel.h
+++ b/src/timeline/TimelineModel.h
@@ -454,6 +454,7 @@ public slots:
private slots:
void addPendingMessage(mtx::events::collections::TimelineEvents event);
void scrollTimerEvent();
+ void handleIgnoredUser(const QString &id, const std::optional<QString> &err);
signals:
void dataAtIdChanged(QString id);
@@ -503,6 +504,9 @@ signals:
void fetchedMore();
+ // The user may close the profile window before we receive a response, so handle it here
+ void ignoredUser(const QString &id, const std::optional<QString> &err);
+
private:
template<typename T>
void sendEncryptedMessage(mtx::events::RoomEvent<T> msg, mtx::events::EventType eventType);
|