diff options
author | Nicolas Werner <nicolas.werner@hotmail.de> | 2022-12-13 05:08:05 +0100 |
---|---|---|
committer | Nicolas Werner <nicolas.werner@hotmail.de> | 2022-12-13 05:08:22 +0100 |
commit | 952827d629bbb7571f290dad63ae5dad69646472 (patch) | |
tree | d07ccc332da509ff870c9ad5f9ff56883ccd8efe /src | |
parent | Disable keyboard selection for text by default (diff) | |
download | nheko-952827d629bbb7571f290dad63ae5dad69646472.tar.xz |
Add a button to room the upgraded room in the timeline
Diffstat (limited to 'src')
-rw-r--r-- | src/timeline/TimelineModel.cpp | 27 | ||||
-rw-r--r-- | src/timeline/TimelineModel.h | 1 |
2 files changed, 27 insertions, 1 deletions
diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp index fe8a78ef..62dbdae6 100644 --- a/src/timeline/TimelineModel.cpp +++ b/src/timeline/TimelineModel.cpp @@ -1489,7 +1489,6 @@ TimelineModel::sendEncryptedMessage(mtx::events::RoomEvent<T> msg, mtx::events:: const auto room_id = room_id_.toStdString(); using namespace mtx::events; - using namespace mtx::identifiers; nlohmann::json doc = {{"type", mtx::events::to_string(eventType)}, {"content", nlohmann::json(msg.content)}, @@ -2658,6 +2657,32 @@ TimelineModel::showAcceptKnockButton(const QString &id) return event->content.membership == Membership::Knock; } +void +TimelineModel::joinReplacementRoom(const QString &id) +{ + mtx::events::collections::TimelineEvents *e = events.get(id.toStdString(), ""); + if (!e) + return; + + auto event = std::get_if<mtx::events::StateEvent<mtx::events::state::Tombstone>>(e); + if (!event) + return; + + auto joined_rooms = cache::joinedRooms(); + for (const auto &roomid : joined_rooms) { + if (roomid == event->content.replacement_room) { + manager_->rooms()->setCurrentRoom( + QString::fromStdString(event->content.replacement_room)); + return; + } + } + + ChatPage::instance()->joinRoomVia( + event->content.replacement_room, + {mtx::identifiers::parse<mtx::identifiers::User>(event->sender).hostname()}, + true); +} + QString TimelineModel::formatMemberEvent(const QString &id) { diff --git a/src/timeline/TimelineModel.h b/src/timeline/TimelineModel.h index 2352be1f..01d80797 100644 --- a/src/timeline/TimelineModel.h +++ b/src/timeline/TimelineModel.h @@ -287,6 +287,7 @@ public: Q_INVOKABLE QString formatTypingUsers(const std::vector<QString> &users, const QColor &bg); Q_INVOKABLE bool showAcceptKnockButton(const QString &id); Q_INVOKABLE void acceptKnock(const QString &id); + Q_INVOKABLE void joinReplacementRoom(const QString &id); Q_INVOKABLE QString formatMemberEvent(const QString &id); Q_INVOKABLE QString formatJoinRuleEvent(const QString &id); Q_INVOKABLE QString formatHistoryVisibilityEvent(const QString &id); |