diff --git a/src/models/messagecontentmodel.cpp b/src/models/messagecontentmodel.cpp index 1bd24db20..07c180074 100644 --- a/src/models/messagecontentmodel.cpp +++ b/src/models/messagecontentmodel.cpp @@ -163,7 +163,13 @@ void MessageContentModel::intiializeEvent(const QString &eventId) void MessageContentModel::intiializeEvent(const Quotient::RoomEvent *event) { m_event = loadEvent(event->fullJson()); - m_eventSenderObject = std::unique_ptr(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(new NeochatRoomMember(m_room, senderId)); Q_EMIT eventUpdated(); } diff --git a/src/models/messageeventmodel.cpp b/src/models/messageeventmodel.cpp index 17cc1db2c..a5a714fc4 100644 --- a/src/models/messageeventmodel.cpp +++ b/src/models/messageeventmodel.cpp @@ -615,9 +615,15 @@ void MessageEventModel::createEventObjects(const Quotient::RoomEvent *event) } 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())) { - m_memberObjects[event->senderId()] = std::unique_ptr(new NeochatRoomMember(m_currentRoom, event->senderId())); + if (!m_memberObjects.contains(senderId)) { + m_memberObjects[senderId] = std::unique_ptr(new NeochatRoomMember(m_currentRoom, senderId)); } // ReadMarkerModel handles updates to add and remove markers, we only need to diff --git a/src/neochatroom.cpp b/src/neochatroom.cpp index 569c6358e..378a2222b 100644 --- a/src/neochatroom.cpp +++ b/src/neochatroom.cpp @@ -1767,6 +1767,11 @@ const RoomEvent *NeoChatRoom::getEvent(const QString &eventId) const 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 &event) { return event->id() == eventId; });