Show thread root event instead of latest thread event
This commit is contained in:
committed by
Joshua Goins
parent
b42a82a455
commit
2d33cbf6b1
@@ -183,6 +183,12 @@ QVariant MessageModel::data(const QModelIndex &idx, int role) const
|
|||||||
if (event.value().get().contentJson().contains("m.new_content"_L1)) {
|
if (event.value().get().contentJson().contains("m.new_content"_L1)) {
|
||||||
return EventStatus::Hidden;
|
return EventStatus::Hidden;
|
||||||
}
|
}
|
||||||
|
// A threaded event will be merged into the thread root event so
|
||||||
|
// also don't show.
|
||||||
|
const auto roomMessageEvent = eventCast<const RoomMessageEvent>(&event.value().get());
|
||||||
|
if (roomMessageEvent && roomMessageEvent->relatesTo() && roomMessageEvent->relatesTo()->type == EventRelation::ThreadType) {
|
||||||
|
return EventStatus::Hidden;
|
||||||
|
}
|
||||||
const auto pendingIt = eventRoom->findPendingEvent(event->get().transactionId());
|
const auto pendingIt = eventRoom->findPendingEvent(event->get().transactionId());
|
||||||
if (pendingIt == eventRoom->pendingEvents().end()) {
|
if (pendingIt == eventRoom->pendingEvents().end()) {
|
||||||
return EventStatus::Hidden;
|
return EventStatus::Hidden;
|
||||||
@@ -194,12 +200,9 @@ QVariant MessageModel::data(const QModelIndex &idx, int role) const
|
|||||||
return EventStatus::Hidden;
|
return EventStatus::Hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto roomMessageEvent = eventCast<const RoomMessageEvent>(&event.value().get());
|
const auto roomMessageEvent = eventCast<const RoomMessageEvent>(&event.value().get());
|
||||||
if (roomMessageEvent && (roomMessageEvent->isThreaded() || eventRoom->threads().contains(event.value().get().id()))) {
|
if (roomMessageEvent && roomMessageEvent->relatesTo() && roomMessageEvent->relatesTo()->type == EventRelation::ThreadType) {
|
||||||
const auto &thread = eventRoom->threads().value(roomMessageEvent->isThreaded() ? roomMessageEvent->threadRootEventId() : event.value().get().id());
|
return EventStatus::Hidden;
|
||||||
if (thread.latestEventId != event.value().get().id()) {
|
|
||||||
return EventStatus::Hidden;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return EventStatus::Normal;
|
return EventStatus::Normal;
|
||||||
}
|
}
|
||||||
@@ -227,7 +230,7 @@ QVariant MessageModel::data(const QModelIndex &idx, int role) const
|
|||||||
|
|
||||||
if (role == IsThreadedRole) {
|
if (role == IsThreadedRole) {
|
||||||
if (auto roomMessageEvent = eventCast<const RoomMessageEvent>(&event.value().get())) {
|
if (auto roomMessageEvent = eventCast<const RoomMessageEvent>(&event.value().get())) {
|
||||||
return roomMessageEvent->isThreaded();
|
return roomMessageEvent->isThreaded() || eventRoom->threads().contains(event->get().id());
|
||||||
}
|
}
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
@@ -236,6 +239,8 @@ QVariant MessageModel::data(const QModelIndex &idx, int role) const
|
|||||||
auto roomMessageEvent = eventCast<const RoomMessageEvent>(&event.value().get());
|
auto roomMessageEvent = eventCast<const RoomMessageEvent>(&event.value().get());
|
||||||
if (roomMessageEvent && roomMessageEvent->isThreaded()) {
|
if (roomMessageEvent && roomMessageEvent->isThreaded()) {
|
||||||
return roomMessageEvent->threadRootEventId();
|
return roomMessageEvent->threadRootEventId();
|
||||||
|
} else if (eventRoom->threads().contains(event->get().id())) {
|
||||||
|
return event->get().id();
|
||||||
}
|
}
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
#include "messagemodel_logging.h"
|
#include "messagemodel_logging.h"
|
||||||
|
|
||||||
#include <Quotient/events/reactionevent.h>
|
#include <Quotient/events/reactionevent.h>
|
||||||
|
#include <Quotient/thread.h>
|
||||||
|
|
||||||
using namespace Quotient;
|
using namespace Quotient;
|
||||||
|
|
||||||
@@ -125,6 +126,21 @@ void TimelineMessageModel::connectNewRoom()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
#if Quotient_VERSION_MINOR > 9
|
||||||
|
connect(m_room, &Room::newThread, this, [this](const QString &threadRootId) {
|
||||||
|
if (threadRootId.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
refreshEventRoles(threadRootId, {IsThreadedRole, ThreadRootRole});
|
||||||
|
});
|
||||||
|
#elif Quotient_VERSION_MINOR == 9 && Quotient_VERSION_PATCH >= 4
|
||||||
|
connect(m_room, &Room::newThread, this, [this](const Thread &newThread) {
|
||||||
|
if (newThread.threadRootId.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
refreshEventRoles(newThread.threadRootId, {IsThreadedRole, ThreadRootRole});
|
||||||
|
});
|
||||||
|
#endif
|
||||||
connect(m_room->connection(), &Connection::ignoredUsersListChanged, this, [this] {
|
connect(m_room->connection(), &Connection::ignoredUsersListChanged, this, [this] {
|
||||||
beginResetModel();
|
beginResetModel();
|
||||||
endResetModel();
|
endResetModel();
|
||||||
|
|||||||
Reference in New Issue
Block a user