Make sure the sender Id is intialised properly for pending events

This commit is contained in:
James Graham
2024-07-24 20:09:22 +01:00
parent c2f2bb26dc
commit 5aee89be6e
3 changed files with 20 additions and 3 deletions

View File

@@ -163,7 +163,13 @@ void MessageContentModel::intiializeEvent(const QString &eventId)
void MessageContentModel::intiializeEvent(const Quotient::RoomEvent *event) void MessageContentModel::intiializeEvent(const Quotient::RoomEvent *event)
{ {
m_event = loadEvent<RoomEvent>(event->fullJson()); m_event = loadEvent<RoomEvent>(event->fullJson());
m_eventSenderObject = std::unique_ptr<NeochatRoomMember>(new NeochatRoomMember(m_room, event->senderId())); auto senderId = event->senderId();
// A pending event might not have a sender ID set yet but in that case it must
// be the local member.
if (senderId.isEmpty()) {
senderId = m_room->localMember().id();
}
m_eventSenderObject = std::unique_ptr<NeochatRoomMember>(new NeochatRoomMember(m_room, senderId));
Q_EMIT eventUpdated(); Q_EMIT eventUpdated();
} }

View File

@@ -615,9 +615,15 @@ void MessageEventModel::createEventObjects(const Quotient::RoomEvent *event)
} }
auto eventId = event->id(); auto eventId = event->id();
auto senderId = event->senderId();
// A pending event might not have a sender ID set yet but in that case it must
// be the local member.
if (senderId.isEmpty()) {
senderId = m_currentRoom->localMember().id();
}
if (!m_memberObjects.contains(event->senderId())) { if (!m_memberObjects.contains(senderId)) {
m_memberObjects[event->senderId()] = std::unique_ptr<NeochatRoomMember>(new NeochatRoomMember(m_currentRoom, event->senderId())); m_memberObjects[senderId] = std::unique_ptr<NeochatRoomMember>(new NeochatRoomMember(m_currentRoom, senderId));
} }
// ReadMarkerModel handles updates to add and remove markers, we only need to // ReadMarkerModel handles updates to add and remove markers, we only need to

View File

@@ -1767,6 +1767,11 @@ const RoomEvent *NeoChatRoom::getEvent(const QString &eventId) const
return timelineIt->get(); return timelineIt->get();
} }
const auto pendingIt = findPendingEvent(eventId);
if (pendingIt != pendingEvents().end()) {
return pendingIt->event();
}
auto extraIt = std::find_if(m_extraEvents.begin(), m_extraEvents.end(), [eventId](const Quotient::event_ptr_tt<Quotient::RoomEvent> &event) { auto extraIt = std::find_if(m_extraEvents.begin(), m_extraEvents.end(), [eventId](const Quotient::event_ptr_tt<Quotient::RoomEvent> &event) {
return event->id() == eventId; return event->id() == eventId;
}); });