From 143c68504562f6c560893b0ea1d0ee81f21e12af Mon Sep 17 00:00:00 2001 From: James Graham Date: Wed, 6 Aug 2025 18:10:03 +0100 Subject: [PATCH] Fix creating a new thread locally Fix creating a new thread locally. We need to listen for the newThread signal and update the thread root event mode content --- .../models/eventmessagecontentmodel.cpp | 20 +++++++++++++++---- src/messagecontent/models/threadmodel.cpp | 8 ++++++-- src/timeline/messagedelegate.cpp | 1 + src/timeline/models/messagemodel.cpp | 2 +- 4 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/messagecontent/models/eventmessagecontentmodel.cpp b/src/messagecontent/models/eventmessagecontentmodel.cpp index b0dc8d791..234f75cf2 100644 --- a/src/messagecontent/models/eventmessagecontentmodel.cpp +++ b/src/messagecontent/models/eventmessagecontentmodel.cpp @@ -113,6 +113,13 @@ void EventMessageContentModel::initializeModel() updateReactionModel(); } }); +#if Quotient_VERSION_MINOR > 9 + connect(m_room, &Room::newThread, this, [this](const Thread &newThread) { + if (newThread.threadRootId == m_eventId) { + resetContent(); + } + }); +#endif initializeEvent(); resetModel(); @@ -157,12 +164,16 @@ QString EventMessageContentModel::threadRootId() const } auto roomMessageEvent = eventCast(event.first); #if Quotient_VERSION_MINOR > 9 || (Quotient_VERSION_MINOR == 9 && Quotient_VERSION_PATCH > 1) - if (roomMessageEvent && (roomMessageEvent->isThreaded() || m_room->threads().contains(roomMessageEvent->id()))) { + if (roomMessageEvent && roomMessageEvent->isThreaded()) { + return roomMessageEvent->threadRootEventId(); + } else if (m_room->threads().contains(roomMessageEvent->id())) { + return m_eventId; + } #else if (roomMessageEvent && roomMessageEvent->isThreaded()) { -#endif return roomMessageEvent->threadRootEventId(); } +#endif return {}; } @@ -306,8 +317,9 @@ QList EventMessageContentModel::messageContentComponents(bool const auto roomMessageEvent = eventCast(event.first); #if Quotient_VERSION_MINOR > 9 || (Quotient_VERSION_MINOR == 9 && Quotient_VERSION_PATCH > 1) - if (m_threadsEnabled && roomMessageEvent && (roomMessageEvent->isThreaded() || m_room->threads().contains(roomMessageEvent->id())) - && roomMessageEvent->id() == roomMessageEvent->threadRootEventId()) { + if (m_threadsEnabled && roomMessageEvent + && ((roomMessageEvent->isThreaded() && roomMessageEvent->id() == roomMessageEvent->threadRootEventId()) + || m_room->threads().contains(roomMessageEvent->id()))) { #else if (m_threadsEnabled && roomMessageEvent && roomMessageEvent->isThreaded() && roomMessageEvent->id() == roomMessageEvent->threadRootEventId()) { #endif diff --git a/src/messagecontent/models/threadmodel.cpp b/src/messagecontent/models/threadmodel.cpp index ee7d15d7b..bff73bdd8 100644 --- a/src/messagecontent/models/threadmodel.cpp +++ b/src/messagecontent/models/threadmodel.cpp @@ -95,7 +95,9 @@ void ThreadModel::fetchMoreEvents(int max) connect(m_currentJob, &Quotient::BaseJob::success, this, [this]() { auto newEvents = m_currentJob->chunk(); for (auto &event : newEvents) { - m_events.push_back(event->id()); + if (std::find(m_events.begin(), m_events.end(), event->id()) == m_events.end()) { + m_events.push_back(event->id()); + } } addModels(); @@ -122,7 +124,9 @@ void ThreadModel::addNewEvent(const Quotient::RoomEvent *event) if (eventId.isEmpty()) { eventId = event->transactionId(); } - m_events.push_front(eventId); + if (std::find(m_events.begin(), m_events.end(), eventId) == m_events.end()) { + m_events.push_front(eventId); + } } void ThreadModel::addModels() diff --git a/src/timeline/messagedelegate.cpp b/src/timeline/messagedelegate.cpp index 625dd8b9a..7c69e5329 100644 --- a/src/timeline/messagedelegate.cpp +++ b/src/timeline/messagedelegate.cpp @@ -87,6 +87,7 @@ void MessageDelegateBase::setIsThreaded(bool isThreaded) m_isThreaded = isThreaded; setAlwaysFillWidth(m_isThreaded || m_compactMode); setPercentageValues(m_isThreaded || m_compactMode); + updateAvatar(); Q_EMIT isThreadedChanged(); } diff --git a/src/timeline/models/messagemodel.cpp b/src/timeline/models/messagemodel.cpp index 9ed037417..8bbf3f002 100644 --- a/src/timeline/models/messagemodel.cpp +++ b/src/timeline/models/messagemodel.cpp @@ -43,7 +43,7 @@ MessageModel::MessageModel(QObject *parent) }); connect(this, &MessageModel::threadsEnabledChanged, this, [this]() { - Q_EMIT dataChanged(index(0), index(rowCount() - 1), {ContentModelRole, IsThreadedRole}); + Q_EMIT dataChanged(index(0), index(rowCount() - 1), {DelegateTypeRole, ContentModelRole, IsThreadedRole, SpecialMarksRole}); }); }