From 476edc6ad38e37412fad04ca557c22b310fb9d60 Mon Sep 17 00:00:00 2001 From: James Graham Date: Sun, 22 Dec 2024 10:11:37 +0000 Subject: [PATCH] Show thread on latest message Use the new thread functionality in libQuotient to show the thread on the latest message rather than the root. Note: to test you need to bump your libquotient minor version to 10 or higher. Also Note: this reveals some other bugs in how new threads are shown or refreshed when new messages are added, this will be fixed in a later patch as some re-architecting is required --- src/models/messagecontentmodel.cpp | 7 +++++++ src/models/messageeventmodel.cpp | 12 ++++++++++++ 2 files changed, 19 insertions(+) diff --git a/src/models/messagecontentmodel.cpp b/src/models/messagecontentmodel.cpp index 43633c988..7b8130e40 100644 --- a/src/models/messagecontentmodel.cpp +++ b/src/models/messagecontentmodel.cpp @@ -12,6 +12,9 @@ #include #include #include +#if Quotient_VERSION_MINOR > 9 +#include +#endif #include #include @@ -484,7 +487,11 @@ QList MessageContentModel::messageContentComponents(bool isEdi } // If the event is already threaded the ThreadModel will handle displaying a chat bar. +#if Quotient_VERSION_MINOR > 9 + if (isThreading && roomMessageEvent && !(roomMessageEvent->isThreaded() || m_room->threads().contains(roomMessageEvent->id()))) { +#else if (isThreading && roomMessageEvent && roomMessageEvent->isThreaded()) { +#endif newComponents += MessageComponent{MessageComponentType::ChatBar, QString(), {}}; } diff --git a/src/models/messageeventmodel.cpp b/src/models/messageeventmodel.cpp index 99d7d8c68..7041945b2 100644 --- a/src/models/messageeventmodel.cpp +++ b/src/models/messageeventmodel.cpp @@ -13,6 +13,9 @@ #include #include #include +#if Quotient_VERSION_MINOR > 9 +#include +#endif #include #include @@ -477,9 +480,18 @@ QVariant MessageEventModel::data(const QModelIndex &idx, int role) const } auto roomMessageEvent = eventCast(&evt); +#if Quotient_VERSION_MINOR > 9 + if (roomMessageEvent && (roomMessageEvent->isThreaded() || m_currentRoom->threads().contains(evt.id()))) { + const auto &thread = m_currentRoom->threads().value(roomMessageEvent->isThreaded() ? roomMessageEvent->threadRootEventId() : evt.id()); + if (thread.latestEventId != evt.id()) { + return EventStatus::Hidden; + } + } +#else if (roomMessageEvent && roomMessageEvent->isThreaded() && roomMessageEvent->threadRootEventId() != evt.id() && NeoChatConfig::threads()) { return EventStatus::Hidden; } +#endif return EventStatus::Normal; }