From 13b15390c36ab3e53f038a49ca90a20bab20385d Mon Sep 17 00:00:00 2001 From: Tobias Fella Date: Sat, 6 Jul 2024 15:54:29 +0200 Subject: [PATCH] Fix crashes due to event being deleted --- src/models/messagecontentmodel.cpp | 14 +++++++------- src/models/messagecontentmodel.h | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/models/messagecontentmodel.cpp b/src/models/messagecontentmodel.cpp index a85ce4eac..8e99ad692 100644 --- a/src/models/messagecontentmodel.cpp +++ b/src/models/messagecontentmodel.cpp @@ -35,7 +35,7 @@ MessageContentModel::MessageContentModel(NeoChatRoom *room, const Quotient::Room , m_room(room) , m_eventId(event != nullptr ? event->id() : QString()) , m_eventSenderId(event != nullptr ? event->senderId() : QString()) - , m_event(event) + , m_event(loadEvent(event->fullJson())) , m_isPending(isPending) , m_isReply(isReply) { @@ -62,7 +62,7 @@ void MessageContentModel::initializeModel() Quotient::connectUntil(m_room.get(), &NeoChatRoom::extraEventLoaded, this, [this](const QString &eventId) { if (m_room != nullptr) { if (eventId == m_eventId) { - m_event = m_room->getEvent(eventId); + m_event = loadEvent(m_room->getEvent(eventId)->fullJson()); Q_EMIT eventUpdated(); updateReplyModel(); updateComponents(); @@ -81,7 +81,7 @@ void MessageContentModel::initializeModel() if (m_eventId == serverEvent->id()) { beginResetModel(); m_isPending = false; - m_event = serverEvent; + m_event = loadEvent(serverEvent->fullJson()); Q_EMIT eventUpdated(); endResetModel(); } @@ -91,7 +91,7 @@ void MessageContentModel::initializeModel() if (m_room != nullptr && m_event != nullptr) { if (m_eventId == newEvent->id()) { beginResetModel(); - m_event = newEvent; + m_event = loadEvent(newEvent->fullJson()); Q_EMIT eventUpdated(); endResetModel(); } @@ -198,7 +198,7 @@ QVariant MessageContentModel::data(const QModelIndex &index, int role) const return {}; } - EventHandler eventHandler(m_room, m_event); + EventHandler eventHandler(m_room, m_event.get()); const auto component = m_components[index.row()]; if (role == DisplayRole) { @@ -357,7 +357,7 @@ void MessageContentModel::updateComponents(bool isEditing) if (isEditing) { m_components += MessageComponent{MessageComponentType::Edit, QString(), {}}; } else { - EventHandler eventHandler(m_room, m_event); + EventHandler eventHandler(m_room, m_event.get()); m_components.append(componentsForType(eventHandler.messageComponentType())); } @@ -374,7 +374,7 @@ void MessageContentModel::updateReplyModel() return; } - EventHandler eventHandler(m_room, m_event); + EventHandler eventHandler(m_room, m_event.get()); if (!eventHandler.hasReply()) { return; } diff --git a/src/models/messagecontentmodel.h b/src/models/messagecontentmodel.h index c7588d93c..861ef66f9 100644 --- a/src/models/messagecontentmodel.h +++ b/src/models/messagecontentmodel.h @@ -115,7 +115,7 @@ private: QPointer m_room; QString m_eventId; QString m_eventSenderId; - const Quotient::RoomEvent *m_event = nullptr; + Quotient::RoomEventPtr m_event; bool m_isPending; bool m_showAuthor = true;