diff --git a/src/models/messagecontentmodel.cpp b/src/models/messagecontentmodel.cpp index bdb8347b4..468a68640 100644 --- a/src/models/messagecontentmodel.cpp +++ b/src/models/messagecontentmodel.cpp @@ -80,7 +80,7 @@ void MessageContentModel::initializeModel() connect(m_room, &NeoChatRoom::pendingEventAboutToMerge, this, [this](Quotient::RoomEvent *serverEvent) { if (m_room != nullptr && m_event != nullptr) { - if (m_eventId == serverEvent->id()) { + if (m_eventId == serverEvent->id() || m_eventId == serverEvent->transactionId()) { beginResetModel(); m_isPending = false; intiializeEvent(serverEvent); diff --git a/src/models/messageeventmodel.cpp b/src/models/messageeventmodel.cpp index ab50939ae..9b15d8892 100644 --- a/src/models/messageeventmodel.cpp +++ b/src/models/messageeventmodel.cpp @@ -444,8 +444,14 @@ QVariant MessageEventModel::data(const QModelIndex &idx, int role) const } if (role == ContentModelRole) { - if (m_contentModels.contains(evt.id().isEmpty() ? evt.transactionId() : evt.id())) { - return QVariant::fromValue(m_contentModels.at(evt.id().isEmpty() ? evt.transactionId() : evt.id()).get()); + QString modelId; + if (!evt.id().isEmpty() && m_contentModels.contains(evt.id())) { + modelId = evt.id(); + } else if (!evt.transactionId().isEmpty() && m_contentModels.contains(evt.transactionId())) { + modelId = evt.transactionId(); + } + if (!modelId.isEmpty()) { + return QVariant::fromValue(m_contentModels.at(modelId).get()); } return {}; } @@ -634,7 +640,7 @@ void MessageEventModel::createEventObjects(const Quotient::RoomEvent *event) m_memberObjects[senderId] = std::unique_ptr(new NeochatRoomMember(m_currentRoom, senderId)); } - if (!m_contentModels.contains(eventId)) { + if (!m_contentModels.contains(eventId) && !m_contentModels.contains(event->transactionId())) { if (!event->isStateEvent() || event->matrixType() == QStringLiteral("org.matrix.msc3672.beacon_info")) { m_contentModels[eventId] = std::unique_ptr(new MessageContentModel(m_currentRoom, event)); }