Fix crashes due to event being deleted

This commit is contained in:
Tobias Fella
2024-07-06 15:54:29 +02:00
parent 799b62e9d2
commit 13b15390c3
2 changed files with 8 additions and 8 deletions

View File

@@ -35,7 +35,7 @@ MessageContentModel::MessageContentModel(NeoChatRoom *room, const Quotient::Room
, m_room(room) , m_room(room)
, m_eventId(event != nullptr ? event->id() : QString()) , m_eventId(event != nullptr ? event->id() : QString())
, m_eventSenderId(event != nullptr ? event->senderId() : QString()) , m_eventSenderId(event != nullptr ? event->senderId() : QString())
, m_event(event) , m_event(loadEvent<RoomEvent>(event->fullJson()))
, m_isPending(isPending) , m_isPending(isPending)
, m_isReply(isReply) , m_isReply(isReply)
{ {
@@ -62,7 +62,7 @@ void MessageContentModel::initializeModel()
Quotient::connectUntil(m_room.get(), &NeoChatRoom::extraEventLoaded, this, [this](const QString &eventId) { Quotient::connectUntil(m_room.get(), &NeoChatRoom::extraEventLoaded, this, [this](const QString &eventId) {
if (m_room != nullptr) { if (m_room != nullptr) {
if (eventId == m_eventId) { if (eventId == m_eventId) {
m_event = m_room->getEvent(eventId); m_event = loadEvent<RoomEvent>(m_room->getEvent(eventId)->fullJson());
Q_EMIT eventUpdated(); Q_EMIT eventUpdated();
updateReplyModel(); updateReplyModel();
updateComponents(); updateComponents();
@@ -81,7 +81,7 @@ void MessageContentModel::initializeModel()
if (m_eventId == serverEvent->id()) { if (m_eventId == serverEvent->id()) {
beginResetModel(); beginResetModel();
m_isPending = false; m_isPending = false;
m_event = serverEvent; m_event = loadEvent<RoomEvent>(serverEvent->fullJson());
Q_EMIT eventUpdated(); Q_EMIT eventUpdated();
endResetModel(); endResetModel();
} }
@@ -91,7 +91,7 @@ void MessageContentModel::initializeModel()
if (m_room != nullptr && m_event != nullptr) { if (m_room != nullptr && m_event != nullptr) {
if (m_eventId == newEvent->id()) { if (m_eventId == newEvent->id()) {
beginResetModel(); beginResetModel();
m_event = newEvent; m_event = loadEvent<RoomEvent>(newEvent->fullJson());
Q_EMIT eventUpdated(); Q_EMIT eventUpdated();
endResetModel(); endResetModel();
} }
@@ -198,7 +198,7 @@ QVariant MessageContentModel::data(const QModelIndex &index, int role) const
return {}; return {};
} }
EventHandler eventHandler(m_room, m_event); EventHandler eventHandler(m_room, m_event.get());
const auto component = m_components[index.row()]; const auto component = m_components[index.row()];
if (role == DisplayRole) { if (role == DisplayRole) {
@@ -357,7 +357,7 @@ void MessageContentModel::updateComponents(bool isEditing)
if (isEditing) { if (isEditing) {
m_components += MessageComponent{MessageComponentType::Edit, QString(), {}}; m_components += MessageComponent{MessageComponentType::Edit, QString(), {}};
} else { } else {
EventHandler eventHandler(m_room, m_event); EventHandler eventHandler(m_room, m_event.get());
m_components.append(componentsForType(eventHandler.messageComponentType())); m_components.append(componentsForType(eventHandler.messageComponentType()));
} }
@@ -374,7 +374,7 @@ void MessageContentModel::updateReplyModel()
return; return;
} }
EventHandler eventHandler(m_room, m_event); EventHandler eventHandler(m_room, m_event.get());
if (!eventHandler.hasReply()) { if (!eventHandler.hasReply()) {
return; return;
} }

View File

@@ -115,7 +115,7 @@ private:
QPointer<NeoChatRoom> m_room; QPointer<NeoChatRoom> m_room;
QString m_eventId; QString m_eventId;
QString m_eventSenderId; QString m_eventSenderId;
const Quotient::RoomEvent *m_event = nullptr; Quotient::RoomEventPtr m_event;
bool m_isPending; bool m_isPending;
bool m_showAuthor = true; bool m_showAuthor = true;