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:
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user