summary refs log tree commit diff
path: root/src/timeline
diff options
context:
space:
mode:
Diffstat (limited to 'src/timeline')
-rw-r--r--src/timeline/InputBar.cpp2
-rw-r--r--src/timeline/TimelineModel.cpp25
-rw-r--r--src/timeline/TimelineModel.h3
3 files changed, 28 insertions, 2 deletions
diff --git a/src/timeline/InputBar.cpp b/src/timeline/InputBar.cpp

index 18e224b2..cd7c4e0c 100644 --- a/src/timeline/InputBar.cpp +++ b/src/timeline/InputBar.cpp
@@ -617,6 +617,8 @@ InputBar::command(const QString &command, QString args) message(QStringLiteral("ノ┬─┬ノ ︵ ( \\o°o)\\")); } else if (command == QLatin1String("clear-timeline")) { room->clearTimeline(); + } else if (command == QLatin1String("reset-state")) { + room->resetState(); } else if (command == QLatin1String("rotate-megolm-session")) { cache::dropOutboundMegolmSession(room->roomId().toStdString()); } else if (command == QLatin1String("md")) { diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp
index 6fc10142..719c7be6 100644 --- a/src/timeline/TimelineModel.cpp +++ b/src/timeline/TimelineModel.cpp
@@ -440,6 +440,11 @@ TimelineModel::TimelineModel(TimelineViewManager *manager, QString room_id, QObj cache::client(), &Cache::verificationStatusChanged, this, &TimelineModel::trustlevelChanged); showEventTimer.callOnTimeout(this, &TimelineModel::scrollTimerEvent); + + connect(this, &TimelineModel::newState, this, [this](mtx::responses::StateEvents events_) { + cache::client()->updateState(room_id_.toStdString(), events_); + this->syncState({std::move(events_.events)}); + }); } QHash<int, QByteArray> @@ -2170,6 +2175,21 @@ TimelineModel::resetEdit() } } +void +TimelineModel::resetState() +{ + http::client()->get_state( + room_id_.toStdString(), + [this](const mtx::responses::StateEvents &events_, mtx::http::RequestErr e) { + if (e) { + nhlog::net()->error("Failed to retrive current room state: {}", *e); + return; + } + + emit newState(events_); + }); +} + QString TimelineModel::roomName() const { @@ -2247,8 +2267,9 @@ TimelineModel::widgetLinks() const QStringList list; - auto user = utils::localUser(); - auto av = QUrl::toPercentEncoding(QString::fromStdString(http::client()->mxc_to_download_url(avatarUrl(user).toStdString()))); + auto user = utils::localUser(); + auto av = QUrl::toPercentEncoding( + QString::fromStdString(http::client()->mxc_to_download_url(avatarUrl(user).toStdString()))); auto disp = QUrl::toPercentEncoding(displayName(user)); auto theme = UserSettings::instance()->theme(); if (theme == QStringLiteral("system")) diff --git a/src/timeline/TimelineModel.h b/src/timeline/TimelineModel.h
index b4267e8d..f6cc1e6b 100644 --- a/src/timeline/TimelineModel.h +++ b/src/timeline/TimelineModel.h
@@ -359,6 +359,7 @@ public slots: void resetEdit(); void setDecryptDescription(bool decrypt) { decryptDescription = decrypt; } void clearTimeline() { events.clearTimeline(); } + void resetState(); void receivedSessionKey(const std::string &session_key) { events.receivedSessionKey(session_key); @@ -401,6 +402,8 @@ signals: void lastMessageChanged(); void notificationsChanged(); + void newState(mtx::responses::StateEvents events); + void newMessageToSend(mtx::events::collections::TimelineEvents event); void addPendingMessageToStore(mtx::events::collections::TimelineEvents event); void updateFlowEventId(std::string event_id);