summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorNicolas Werner <nicolas.werner@hotmail.de>2023-03-09 21:51:22 +0100
committerNicolas Werner <nicolas.werner@hotmail.de>2023-03-09 21:51:22 +0100
commit3b8a1f85e6ca3e3c53a0aa76d4190ab987a63cbe (patch)
treefe60d70a3cc2375dd2af9c91d78e43a16f468c62 /src
parentCleanup table rendering (diff)
downloadnheko-3b8a1f85e6ca3e3c53a0aa76d4190ab987a63cbe.tar.xz
Fix avatar change being rendered as a join
Diffstat (limited to 'src')
-rw-r--r--src/timeline/TimelineModel.cpp21
1 files changed, 16 insertions, 5 deletions
diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp

index 6d8de8f5..25ee71cb 100644 --- a/src/timeline/TimelineModel.cpp +++ b/src/timeline/TimelineModel.cpp
@@ -1122,14 +1122,25 @@ isMessage(const mtx::events::RoomEvent<mtx::events::voip::CallSelectAnswer> &) // Workaround. We also want to see a room at the top, if we just joined it auto -isYourJoin(const mtx::events::StateEvent<mtx::events::state::Member> &e) +isYourJoin(const mtx::events::StateEvent<mtx::events::state::Member> &e, EventStore &events) { - return e.content.membership == mtx::events::state::Membership::Join && - e.state_key == http::client()->user_id().to_string(); + if (e.content.membership == mtx::events::state::Membership::Join && + e.state_key == http::client()->user_id().to_string() && + !e.unsigned_data.replaces_state.empty()) { + auto tempPrevEvent = events.get(e.unsigned_data.replaces_state, e.event_id); + if (tempPrevEvent) { + if (auto prevEvent = + std::get_if<mtx::events::StateEvent<mtx::events::state::Member>>(tempPrevEvent)) { + if (prevEvent->content.membership != mtx::events::state::Membership::Join) + return true; + } + } + } + return false; } template<typename T> auto -isYourJoin(const mtx::events::Event<T> &) +isYourJoin(const mtx::events::Event<T> &, EventStore &) { return false; } @@ -1153,7 +1164,7 @@ TimelineModel::updateLastMessage() if (!event) continue; - if (std::visit([](const auto &e) -> bool { return isYourJoin(e); }, *event)) { + if (std::visit([this](const auto &e) -> bool { return isYourJoin(e, events); }, *event)) { auto time = mtx::accessors::origin_server_ts(*event); uint64_t ts = time.toMSecsSinceEpoch(); auto description =