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
This commit is contained in:
James Graham
2025-08-06 18:10:03 +01:00
parent b8fa6f0690
commit 143c685045
4 changed files with 24 additions and 7 deletions

View File

@@ -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<const RoomMessageEvent>(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<MessageComponent> EventMessageContentModel::messageContentComponents(bool
const auto roomMessageEvent = eventCast<const Quotient::RoomMessageEvent>(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

View File

@@ -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()

View File

@@ -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();
}

View File

@@ -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});
});
}