EventHandler Nullptr checks

So I got lazy halfway through doing this the first time.

Add missing checks for null m_room and m_event to EventHandler and add tests for them.
This commit is contained in:
James Graham
2023-10-29 14:51:25 +00:00
parent f3c4d9449a
commit 57978b1a6e
2 changed files with 355 additions and 2 deletions

View File

@@ -39,34 +39,61 @@ private:
Connection *connection = nullptr; Connection *connection = nullptr;
TestRoom *room = nullptr; TestRoom *room = nullptr;
EventHandler eventHandler; EventHandler eventHandler;
EventHandler emptyHandler;
EventHandler noEventHandler;
private Q_SLOTS: private Q_SLOTS:
void initTestCase(); void initTestCase();
void nullSetEvent();
void eventId(); void eventId();
void nullEventId();
void delegateType_data(); void delegateType_data();
void delegateType(); void delegateType();
void nullDelegateType();
void author(); void author();
void nullAuthor();
void authorDisplayName(); void authorDisplayName();
void nullAuthorDisplayName();
void time(); void time();
void nullTime();
void timeString(); void timeString();
void nullTimeString();
void highlighted(); void highlighted();
void nullHighlighted();
void hidden(); void hidden();
void nullHidden();
void body(); void body();
void nullBody();
void genericBody_data(); void genericBody_data();
void genericBody(); void genericBody();
void nullGenericBody();
void mediaInfo(); void mediaInfo();
void nullMediaInfo();
void linkPreviewer(); void linkPreviewer();
void nullLinkPreviewer();
void reactions(); void reactions();
void nullReactions();
void hasReply(); void hasReply();
void nullHasReply();
void replyId(); void replyId();
void nullReplyId();
void replyDelegateType(); void replyDelegateType();
void nullReplyDelegateType();
void replyAuthor(); void replyAuthor();
void nullReplyAuthor();
void replyBody(); void replyBody();
void nullReplyBody();
void replyMediaInfo(); void replyMediaInfo();
void nullReplyMediaInfo();
void thread(); void thread();
void nullThread();
void location(); void location();
void nullLocation();
void readMarkers(); void readMarkers();
void nullReadMarkers();
void cleanup();
}; };
void EventHandlerTest::initTestCase() void EventHandlerTest::initTestCase()
@@ -82,6 +109,13 @@ void EventHandlerTest::initTestCase()
room->update(std::move(roomData)); room->update(std::move(roomData));
eventHandler.setRoom(room); eventHandler.setRoom(room);
noEventHandler.setRoom(room);
}
void EventHandlerTest::nullSetEvent()
{
QTest::ignoreMessage(QtWarningMsg, "cannot setEvent when m_room is set to nullptr.");
emptyHandler.setEvent(room->messageEvents().at(0).get());
} }
void EventHandlerTest::eventId() void EventHandlerTest::eventId()
@@ -91,6 +125,12 @@ void EventHandlerTest::eventId()
QCOMPARE(eventHandler.getId(), QStringLiteral("$153456789:example.org")); QCOMPARE(eventHandler.getId(), QStringLiteral("$153456789:example.org"));
} }
void EventHandlerTest::nullEventId()
{
QTest::ignoreMessage(QtWarningMsg, "getId called with m_event set to nullptr.");
QCOMPARE(noEventHandler.getId(), QString());
}
void EventHandlerTest::delegateType_data() void EventHandlerTest::delegateType_data()
{ {
QTest::addColumn<int>("eventNum"); QTest::addColumn<int>("eventNum");
@@ -114,6 +154,12 @@ void EventHandlerTest::delegateType()
QCOMPARE(eventHandler.getDelegateType(), delegateType); QCOMPARE(eventHandler.getDelegateType(), delegateType);
} }
void EventHandlerTest::nullDelegateType()
{
QTest::ignoreMessage(QtWarningMsg, "getDelegateType called with m_event set to nullptr.");
QCOMPARE(noEventHandler.getDelegateType(), DelegateType::Other);
}
void EventHandlerTest::author() void EventHandlerTest::author()
{ {
auto event = room->messageEvents().at(0).get(); auto event = room->messageEvents().at(0).get();
@@ -131,6 +177,15 @@ void EventHandlerTest::author()
QCOMPARE(eventHandlerAuthor["object"_ls], QVariant::fromValue(author)); QCOMPARE(eventHandlerAuthor["object"_ls], QVariant::fromValue(author));
} }
void EventHandlerTest::nullAuthor()
{
QTest::ignoreMessage(QtWarningMsg, "getAuthor called with m_room set to nullptr.");
QCOMPARE(emptyHandler.getAuthor(), QVariantMap());
QTest::ignoreMessage(QtWarningMsg, "getAuthor called with m_event set to nullptr. Returning empty user.");
QCOMPARE(noEventHandler.getAuthor(), room->getUser(nullptr));
}
void EventHandlerTest::authorDisplayName() void EventHandlerTest::authorDisplayName()
{ {
auto event = room->messageEvents().at(1).get(); auto event = room->messageEvents().at(1).get();
@@ -139,6 +194,15 @@ void EventHandlerTest::authorDisplayName()
QCOMPARE(eventHandler.getAuthorDisplayName(), QStringLiteral("before")); QCOMPARE(eventHandler.getAuthorDisplayName(), QStringLiteral("before"));
} }
void EventHandlerTest::nullAuthorDisplayName()
{
QTest::ignoreMessage(QtWarningMsg, "getAuthorDisplayName called with m_room set to nullptr.");
QCOMPARE(emptyHandler.getAuthorDisplayName(), QString());
QTest::ignoreMessage(QtWarningMsg, "getAuthorDisplayName called with m_event set to nullptr.");
QCOMPARE(noEventHandler.getAuthorDisplayName(), QString());
}
void EventHandlerTest::time() void EventHandlerTest::time()
{ {
auto event = room->messageEvents().at(0).get(); auto event = room->messageEvents().at(0).get();
@@ -148,6 +212,16 @@ void EventHandlerTest::time()
QCOMPARE(eventHandler.getTime(true, QDateTime::fromMSecsSinceEpoch(1234, Qt::UTC)), QDateTime::fromMSecsSinceEpoch(1234, Qt::UTC)); QCOMPARE(eventHandler.getTime(true, QDateTime::fromMSecsSinceEpoch(1234, Qt::UTC)), QDateTime::fromMSecsSinceEpoch(1234, Qt::UTC));
} }
void EventHandlerTest::nullTime()
{
QTest::ignoreMessage(QtWarningMsg, "getTime called with m_event set to nullptr.");
QCOMPARE(noEventHandler.getTime(), QDateTime());
eventHandler.setEvent(room->messageEvents().at(0).get());
QTest::ignoreMessage(QtWarningMsg, "a value must be provided for lastUpdated for a pending event.");
QCOMPARE(eventHandler.getTime(true), QDateTime());
}
void EventHandlerTest::timeString() void EventHandlerTest::timeString()
{ {
auto event = room->messageEvents().at(0).get(); auto event = room->messageEvents().at(0).get();
@@ -169,6 +243,16 @@ void EventHandlerTest::timeString()
format.formatRelativeDate(QDateTime::fromMSecsSinceEpoch(1690699214545, Qt::UTC).toLocalTime().date(), QLocale::LongFormat)); format.formatRelativeDate(QDateTime::fromMSecsSinceEpoch(1690699214545, Qt::UTC).toLocalTime().date(), QLocale::LongFormat));
} }
void EventHandlerTest::nullTimeString()
{
QTest::ignoreMessage(QtWarningMsg, "getTimeString called with m_event set to nullptr.");
QCOMPARE(noEventHandler.getTimeString(false), QString());
eventHandler.setEvent(room->messageEvents().at(0).get());
QTest::ignoreMessage(QtWarningMsg, "a value must be provided for lastUpdated for a pending event.");
QCOMPARE(eventHandler.getTimeString(false, QLocale::ShortFormat, true), QString());
}
void EventHandlerTest::highlighted() void EventHandlerTest::highlighted()
{ {
auto event = room->messageEvents().at(2).get(); auto event = room->messageEvents().at(2).get();
@@ -182,6 +266,15 @@ void EventHandlerTest::highlighted()
QCOMPARE(eventHandler.isHighlighted(), false); QCOMPARE(eventHandler.isHighlighted(), false);
} }
void EventHandlerTest::nullHighlighted()
{
QTest::ignoreMessage(QtWarningMsg, "isHighlighted called with m_room set to nullptr.");
QCOMPARE(emptyHandler.isHighlighted(), false);
QTest::ignoreMessage(QtWarningMsg, "isHighlighted called with m_event set to nullptr.");
QCOMPARE(noEventHandler.isHighlighted(), false);
}
void EventHandlerTest::hidden() void EventHandlerTest::hidden()
{ {
auto event = room->messageEvents().at(3).get(); auto event = room->messageEvents().at(3).get();
@@ -195,6 +288,15 @@ void EventHandlerTest::hidden()
QCOMPARE(eventHandler.isHidden(), false); QCOMPARE(eventHandler.isHidden(), false);
} }
void EventHandlerTest::nullHidden()
{
QTest::ignoreMessage(QtWarningMsg, "isHidden called with m_room set to nullptr.");
QCOMPARE(emptyHandler.isHidden(), false);
QTest::ignoreMessage(QtWarningMsg, "isHidden called with m_event set to nullptr.");
QCOMPARE(noEventHandler.isHidden(), false);
}
void EventHandlerTest::body() void EventHandlerTest::body()
{ {
auto event = room->messageEvents().at(0).get(); auto event = room->messageEvents().at(0).get();
@@ -206,6 +308,15 @@ void EventHandlerTest::body()
QCOMPARE(eventHandler.getPlainBody(true), QStringLiteral("This is an example text message")); QCOMPARE(eventHandler.getPlainBody(true), QStringLiteral("This is an example text message"));
} }
void EventHandlerTest::nullBody()
{
QTest::ignoreMessage(QtWarningMsg, "getRichBody called with m_event set to nullptr.");
QCOMPARE(noEventHandler.getRichBody(), QString());
QTest::ignoreMessage(QtWarningMsg, "getPlainBody called with m_event set to nullptr.");
QCOMPARE(noEventHandler.getPlainBody(), QString());
}
void EventHandlerTest::genericBody_data() void EventHandlerTest::genericBody_data()
{ {
QTest::addColumn<int>("eventNum"); QTest::addColumn<int>("eventNum");
@@ -228,6 +339,12 @@ void EventHandlerTest::genericBody()
QCOMPARE(eventHandler.getGenericBody(), output); QCOMPARE(eventHandler.getGenericBody(), output);
} }
void EventHandlerTest::nullGenericBody()
{
QTest::ignoreMessage(QtWarningMsg, "getGenericBody called with m_event set to nullptr.");
QCOMPARE(noEventHandler.getGenericBody(), QString());
}
void EventHandlerTest::mediaInfo() void EventHandlerTest::mediaInfo()
{ {
auto event = room->messageEvents().at(4).get(); auto event = room->messageEvents().at(4).get();
@@ -251,6 +368,15 @@ void EventHandlerTest::mediaInfo()
QCOMPARE(thumbnailInfo["height"_ls], 450); QCOMPARE(thumbnailInfo["height"_ls], 450);
} }
void EventHandlerTest::nullMediaInfo()
{
QTest::ignoreMessage(QtWarningMsg, "getMediaInfo called with m_room set to nullptr.");
QCOMPARE(emptyHandler.getMediaInfo(), QVariantMap());
QTest::ignoreMessage(QtWarningMsg, "getMediaInfo called with m_event set to nullptr.");
QCOMPARE(noEventHandler.getMediaInfo(), QVariantMap());
}
void EventHandlerTest::linkPreviewer() void EventHandlerTest::linkPreviewer()
{ {
auto event = room->messageEvents().at(2).get(); auto event = room->messageEvents().at(2).get();
@@ -264,6 +390,15 @@ void EventHandlerTest::linkPreviewer()
QCOMPARE(eventHandler.getLinkPreviewer(), nullptr); QCOMPARE(eventHandler.getLinkPreviewer(), nullptr);
} }
void EventHandlerTest::nullLinkPreviewer()
{
QTest::ignoreMessage(QtWarningMsg, "getLinkPreviewer called with m_room set to nullptr.");
QCOMPARE(emptyHandler.getLinkPreviewer(), nullptr);
QTest::ignoreMessage(QtWarningMsg, "getLinkPreviewer called with m_event set to nullptr.");
QCOMPARE(noEventHandler.getLinkPreviewer(), nullptr);
}
void EventHandlerTest::reactions() void EventHandlerTest::reactions()
{ {
auto event = room->messageEvents().at(0).get(); auto event = room->messageEvents().at(0).get();
@@ -272,6 +407,15 @@ void EventHandlerTest::reactions()
QCOMPARE(eventHandler.getReactions()->rowCount(), 1); QCOMPARE(eventHandler.getReactions()->rowCount(), 1);
} }
void EventHandlerTest::nullReactions()
{
QTest::ignoreMessage(QtWarningMsg, "getReactions called with m_room set to nullptr.");
QCOMPARE(emptyHandler.getReactions(), nullptr);
QTest::ignoreMessage(QtWarningMsg, "getReactions called with m_event set to nullptr.");
QCOMPARE(noEventHandler.getReactions(), nullptr);
}
void EventHandlerTest::hasReply() void EventHandlerTest::hasReply()
{ {
auto event = room->messageEvents().at(5).get(); auto event = room->messageEvents().at(5).get();
@@ -285,6 +429,12 @@ void EventHandlerTest::hasReply()
QCOMPARE(eventHandler.hasReply(), false); QCOMPARE(eventHandler.hasReply(), false);
} }
void EventHandlerTest::nullHasReply()
{
QTest::ignoreMessage(QtWarningMsg, "hasReply called with m_event set to nullptr.");
QCOMPARE(noEventHandler.hasReply(), false);
}
void EventHandlerTest::replyId() void EventHandlerTest::replyId()
{ {
auto event = room->messageEvents().at(5).get(); auto event = room->messageEvents().at(5).get();
@@ -298,6 +448,12 @@ void EventHandlerTest::replyId()
QCOMPARE(eventHandler.getReplyId(), QStringLiteral("")); QCOMPARE(eventHandler.getReplyId(), QStringLiteral(""));
} }
void EventHandlerTest::nullReplyId()
{
QTest::ignoreMessage(QtWarningMsg, "getReplyId called with m_event set to nullptr.");
QCOMPARE(noEventHandler.getReplyId(), QString());
}
void EventHandlerTest::replyDelegateType() void EventHandlerTest::replyDelegateType()
{ {
auto event = room->messageEvents().at(5).get(); auto event = room->messageEvents().at(5).get();
@@ -311,6 +467,15 @@ void EventHandlerTest::replyDelegateType()
QCOMPARE(eventHandler.getReplyDelegateType(), DelegateType::Other); QCOMPARE(eventHandler.getReplyDelegateType(), DelegateType::Other);
} }
void EventHandlerTest::nullReplyDelegateType()
{
QTest::ignoreMessage(QtWarningMsg, "getReplyDelegateType called with m_room set to nullptr.");
QCOMPARE(emptyHandler.getReplyDelegateType(), DelegateType::Other);
QTest::ignoreMessage(QtWarningMsg, "getReplyDelegateType called with m_event set to nullptr.");
QCOMPARE(noEventHandler.getReplyDelegateType(), DelegateType::Other);
}
void EventHandlerTest::replyAuthor() void EventHandlerTest::replyAuthor()
{ {
auto event = room->messageEvents().at(5).get(); auto event = room->messageEvents().at(5).get();
@@ -334,6 +499,15 @@ void EventHandlerTest::replyAuthor()
QCOMPARE(eventHandler.getReplyAuthor(), room->getUser(nullptr)); QCOMPARE(eventHandler.getReplyAuthor(), room->getUser(nullptr));
} }
void EventHandlerTest::nullReplyAuthor()
{
QTest::ignoreMessage(QtWarningMsg, "getReplyAuthor called with m_room set to nullptr.");
QCOMPARE(emptyHandler.getReplyAuthor(), QVariantMap());
QTest::ignoreMessage(QtWarningMsg, "getReplyAuthor called with m_event set to nullptr. Returning empty user.");
QCOMPARE(noEventHandler.getReplyAuthor(), room->getUser(nullptr));
}
void EventHandlerTest::replyBody() void EventHandlerTest::replyBody()
{ {
auto event = room->messageEvents().at(5).get(); auto event = room->messageEvents().at(5).get();
@@ -345,6 +519,15 @@ void EventHandlerTest::replyBody()
QCOMPARE(eventHandler.getReplyPlainBody(true), QStringLiteral("This is an example text message")); QCOMPARE(eventHandler.getReplyPlainBody(true), QStringLiteral("This is an example text message"));
} }
void EventHandlerTest::nullReplyBody()
{
QTest::ignoreMessage(QtWarningMsg, "getReplyRichBody called with m_event set to nullptr.");
QCOMPARE(noEventHandler.getReplyRichBody(), QString());
QTest::ignoreMessage(QtWarningMsg, "getReplyPlainBody called with m_event set to nullptr.");
QCOMPARE(noEventHandler.getReplyPlainBody(), QString());
}
void EventHandlerTest::replyMediaInfo() void EventHandlerTest::replyMediaInfo()
{ {
auto event = room->messageEvents().at(6).get(); auto event = room->messageEvents().at(6).get();
@@ -369,6 +552,15 @@ void EventHandlerTest::replyMediaInfo()
QCOMPARE(thumbnailInfo["height"_ls], 450); QCOMPARE(thumbnailInfo["height"_ls], 450);
} }
void EventHandlerTest::nullReplyMediaInfo()
{
QTest::ignoreMessage(QtWarningMsg, "getReplyMediaInfo called with m_room set to nullptr.");
QCOMPARE(emptyHandler.getReplyMediaInfo(), QVariantMap());
QTest::ignoreMessage(QtWarningMsg, "getReplyMediaInfo called with m_event set to nullptr.");
QCOMPARE(noEventHandler.getReplyMediaInfo(), QVariantMap());
}
void EventHandlerTest::thread() void EventHandlerTest::thread()
{ {
auto event = room->messageEvents().at(0).get(); auto event = room->messageEvents().at(0).get();
@@ -392,6 +584,15 @@ void EventHandlerTest::thread()
QCOMPARE(eventHandler.getReplyId(), QStringLiteral("$threadmessage1:example.org")); QCOMPARE(eventHandler.getReplyId(), QStringLiteral("$threadmessage1:example.org"));
} }
void EventHandlerTest::nullThread()
{
QTest::ignoreMessage(QtWarningMsg, "isThreaded called with m_event set to nullptr.");
QCOMPARE(emptyHandler.isThreaded(), false);
QTest::ignoreMessage(QtWarningMsg, "threadRoot called with m_event set to nullptr.");
QCOMPARE(noEventHandler.threadRoot(), QString());
}
void EventHandlerTest::location() void EventHandlerTest::location()
{ {
auto event = room->messageEvents().at(7).get(); auto event = room->messageEvents().at(7).get();
@@ -402,6 +603,18 @@ void EventHandlerTest::location()
QCOMPARE(eventHandler.getLocationAssetType(), QStringLiteral("m.pin")); QCOMPARE(eventHandler.getLocationAssetType(), QStringLiteral("m.pin"));
} }
void EventHandlerTest::nullLocation()
{
QTest::ignoreMessage(QtWarningMsg, "getLatitude called with m_event set to nullptr.");
QCOMPARE(emptyHandler.getLatitude(), -100.0);
QTest::ignoreMessage(QtWarningMsg, "getLongitude called with m_event set to nullptr.");
QCOMPARE(emptyHandler.getLongitude(), -200.0);
QTest::ignoreMessage(QtWarningMsg, "getLocationAssetType called with m_event set to nullptr.");
QCOMPARE(emptyHandler.getLocationAssetType(), QString());
}
void EventHandlerTest::readMarkers() void EventHandlerTest::readMarkers()
{ {
auto event = room->messageEvents().at(0).get(); auto event = room->messageEvents().at(0).get();
@@ -431,5 +644,37 @@ void EventHandlerTest::readMarkers()
QCOMPARE(eventHandler.getReadMarkersString().startsWith(QStringLiteral("6 users:")), true); QCOMPARE(eventHandler.getReadMarkersString().startsWith(QStringLiteral("6 users:")), true);
} }
void EventHandlerTest::nullReadMarkers()
{
QTest::ignoreMessage(QtWarningMsg, "hasReadMarkers called with m_room set to nullptr.");
QCOMPARE(emptyHandler.hasReadMarkers(), false);
QTest::ignoreMessage(QtWarningMsg, "getReadMarkers called with m_room set to nullptr.");
QCOMPARE(emptyHandler.getReadMarkers(), QVariantList());
QTest::ignoreMessage(QtWarningMsg, "getNumberExcessReadMarkers called with m_room set to nullptr.");
QCOMPARE(emptyHandler.getNumberExcessReadMarkers(), QString());
QTest::ignoreMessage(QtWarningMsg, "getReadMarkersString called with m_room set to nullptr.");
QCOMPARE(emptyHandler.getReadMarkersString(), QString());
QTest::ignoreMessage(QtWarningMsg, "hasReadMarkers called with m_event set to nullptr.");
QCOMPARE(noEventHandler.hasReadMarkers(), false);
QTest::ignoreMessage(QtWarningMsg, "getReadMarkers called with m_event set to nullptr.");
QCOMPARE(noEventHandler.getReadMarkers(), QVariantList());
QTest::ignoreMessage(QtWarningMsg, "getNumberExcessReadMarkers called with m_event set to nullptr.");
QCOMPARE(noEventHandler.getNumberExcessReadMarkers(), QString());
QTest::ignoreMessage(QtWarningMsg, "getReadMarkersString called with m_event set to nullptr.");
QCOMPARE(noEventHandler.getReadMarkersString(), QString());
}
void EventHandlerTest::cleanup()
{
eventHandler.setEvent(nullptr);
}
QTEST_MAIN(EventHandlerTest) QTEST_MAIN(EventHandlerTest)
#include "eventhandlertest.moc" #include "eventhandlertest.moc"

View File

@@ -19,6 +19,7 @@
#include <Quotient/events/stickerevent.h> #include <Quotient/events/stickerevent.h>
#include <Quotient/quotient_common.h> #include <Quotient/quotient_common.h>
#include "delegatetype.h"
#include "eventhandler_logging.h" #include "eventhandler_logging.h"
#include "events/pollevent.h" #include "events/pollevent.h"
#include "linkpreviewer.h" #include "linkpreviewer.h"
@@ -50,6 +51,10 @@ const Quotient::Event *EventHandler::getEvent() const
void EventHandler::setEvent(const Quotient::RoomEvent *event) void EventHandler::setEvent(const Quotient::RoomEvent *event)
{ {
if (m_room == nullptr) {
qCWarning(EventHandling) << "cannot setEvent when m_room is set to nullptr.";
return;
}
if (event == m_event) { if (event == m_event) {
return; return;
} }
@@ -181,7 +186,7 @@ QDateTime EventHandler::getTime(bool isPending, QDateTime lastUpdated) const
QString EventHandler::getTimeString(bool relative, QLocale::FormatType format, bool isPending, QDateTime lastUpdated) const QString EventHandler::getTimeString(bool relative, QLocale::FormatType format, bool isPending, QDateTime lastUpdated) const
{ {
if (m_event == nullptr) { if (m_event == nullptr) {
qCWarning(EventHandling) << "getTime called with m_event set to nullptr."; qCWarning(EventHandling) << "getTimeString called with m_event set to nullptr.";
return {}; return {};
} }
if (isPending && lastUpdated == QDateTime()) { if (isPending && lastUpdated == QDateTime()) {
@@ -216,6 +221,15 @@ bool EventHandler::isHighlighted()
bool EventHandler::isHidden() bool EventHandler::isHidden()
{ {
if (m_room == nullptr) {
qCWarning(EventHandling) << "isHidden called with m_room set to nullptr.";
return false;
}
if (m_event == nullptr) {
qCWarning(EventHandling) << "isHidden called with m_event set to nullptr.";
return false;
}
if (m_event->isStateEvent() && !NeoChatConfig::self()->showStateEvent()) { if (m_event->isStateEvent() && !NeoChatConfig::self()->showStateEvent()) {
return true; return true;
} }
@@ -611,6 +625,14 @@ QString EventHandler::getGenericBody() const
QVariantMap EventHandler::getMediaInfo() const QVariantMap EventHandler::getMediaInfo() const
{ {
if (m_room == nullptr) {
qCWarning(EventHandling) << "getMediaInfo called with m_room set to nullptr.";
return {};
}
if (m_event == nullptr) {
qCWarning(EventHandling) << "getMediaInfo called with m_event set to nullptr.";
return {};
}
return getMediaInfoForEvent(m_event); return getMediaInfoForEvent(m_event);
} }
@@ -723,6 +745,14 @@ QVariantMap EventHandler::getMediaInfoFromFileInfo(const EventContent::FileInfo
QSharedPointer<LinkPreviewer> EventHandler::getLinkPreviewer() const QSharedPointer<LinkPreviewer> EventHandler::getLinkPreviewer() const
{ {
if (m_room == nullptr) {
qCWarning(EventHandling) << "getLinkPreviewer called with m_room set to nullptr.";
return nullptr;
}
if (m_event == nullptr) {
qCWarning(EventHandling) << "getLinkPreviewer called with m_event set to nullptr.";
return nullptr;
}
if (!m_event->is<RoomMessageEvent>()) { if (!m_event->is<RoomMessageEvent>()) {
return nullptr; return nullptr;
} }
@@ -754,7 +784,7 @@ QSharedPointer<ReactionModel> EventHandler::getReactions() const
{ {
if (m_room == nullptr) { if (m_room == nullptr) {
qCWarning(EventHandling) << "getReactions called with m_room set to nullptr."; qCWarning(EventHandling) << "getReactions called with m_room set to nullptr.";
return {}; return nullptr;
} }
if (m_event == nullptr) { if (m_event == nullptr) {
qCWarning(EventHandling) << "getReactions called with m_event set to nullptr."; qCWarning(EventHandling) << "getReactions called with m_event set to nullptr.";
@@ -806,16 +836,33 @@ QSharedPointer<ReactionModel> EventHandler::getReactions() const
bool EventHandler::hasReply() const bool EventHandler::hasReply() const
{ {
if (m_event == nullptr) {
qCWarning(EventHandling) << "hasReply called with m_event set to nullptr.";
return false;
}
return !m_event->contentJson()["m.relates_to"_ls].toObject()["m.in_reply_to"_ls].toObject()["event_id"_ls].toString().isEmpty(); return !m_event->contentJson()["m.relates_to"_ls].toObject()["m.in_reply_to"_ls].toObject()["event_id"_ls].toString().isEmpty();
} }
QString EventHandler::getReplyId() const QString EventHandler::getReplyId() const
{ {
if (m_event == nullptr) {
qCWarning(EventHandling) << "getReplyId called with m_event set to nullptr.";
return {};
}
return m_event->contentJson()["m.relates_to"_ls].toObject()["m.in_reply_to"_ls].toObject()["event_id"_ls].toString(); return m_event->contentJson()["m.relates_to"_ls].toObject()["m.in_reply_to"_ls].toObject()["event_id"_ls].toString();
} }
DelegateType::Type EventHandler::getReplyDelegateType() const DelegateType::Type EventHandler::getReplyDelegateType() const
{ {
if (m_room == nullptr) {
qCWarning(EventHandling) << "getReplyDelegateType called with m_room set to nullptr.";
return DelegateType::Other;
}
if (m_event == nullptr) {
qCWarning(EventHandling) << "getReplyDelegateType called with m_event set to nullptr.";
return DelegateType::Other;
}
auto replyEvent = m_room->getReplyForEvent(*m_event); auto replyEvent = m_room->getReplyForEvent(*m_event);
if (replyEvent == nullptr) { if (replyEvent == nullptr) {
return DelegateType::Other; return DelegateType::Other;
@@ -903,6 +950,11 @@ QVariantMap EventHandler::getReplyMediaInfo() const
bool EventHandler::isThreaded() const bool EventHandler::isThreaded() const
{ {
if (m_event == nullptr) {
qCWarning(EventHandling) << "isThreaded called with m_event set to nullptr.";
return false;
}
return (m_event->contentPart<QJsonObject>("m.relates_to"_ls).contains("rel_type"_ls) return (m_event->contentPart<QJsonObject>("m.relates_to"_ls).contains("rel_type"_ls)
&& m_event->contentPart<QJsonObject>("m.relates_to"_ls)["rel_type"_ls].toString() == "m.thread"_ls) && m_event->contentPart<QJsonObject>("m.relates_to"_ls)["rel_type"_ls].toString() == "m.thread"_ls)
|| (!m_event->unsignedPart<QJsonObject>("m.relations"_ls).isEmpty() && m_event->unsignedPart<QJsonObject>("m.relations"_ls).contains("m.thread"_ls)); || (!m_event->unsignedPart<QJsonObject>("m.relations"_ls).isEmpty() && m_event->unsignedPart<QJsonObject>("m.relations"_ls).contains("m.thread"_ls));
@@ -910,6 +962,11 @@ bool EventHandler::isThreaded() const
QString EventHandler::threadRoot() const QString EventHandler::threadRoot() const
{ {
if (m_event == nullptr) {
qCWarning(EventHandling) << "threadRoot called with m_event set to nullptr.";
return {};
}
// Get the thread root ID from m.relates_to if it exists. // Get the thread root ID from m.relates_to if it exists.
if (m_event->contentPart<QJsonObject>("m.relates_to"_ls).contains("rel_type"_ls) if (m_event->contentPart<QJsonObject>("m.relates_to"_ls).contains("rel_type"_ls)
&& m_event->contentPart<QJsonObject>("m.relates_to"_ls)["rel_type"_ls].toString() == "m.thread"_ls) { && m_event->contentPart<QJsonObject>("m.relates_to"_ls)["rel_type"_ls].toString() == "m.thread"_ls) {
@@ -925,6 +982,11 @@ QString EventHandler::threadRoot() const
float EventHandler::getLatitude() const float EventHandler::getLatitude() const
{ {
if (m_event == nullptr) {
qCWarning(EventHandling) << "getLatitude called with m_event set to nullptr.";
return -100.0;
}
const auto geoUri = m_event->contentJson()["geo_uri"_ls].toString(); const auto geoUri = m_event->contentJson()["geo_uri"_ls].toString();
if (geoUri.isEmpty()) { if (geoUri.isEmpty()) {
return -100.0; // latitude runs from -90deg to +90deg so -100 is out of range. return -100.0; // latitude runs from -90deg to +90deg so -100 is out of range.
@@ -935,6 +997,11 @@ float EventHandler::getLatitude() const
float EventHandler::getLongitude() const float EventHandler::getLongitude() const
{ {
if (m_event == nullptr) {
qCWarning(EventHandling) << "getLongitude called with m_event set to nullptr.";
return -200.0;
}
const auto geoUri = m_event->contentJson()["geo_uri"_ls].toString(); const auto geoUri = m_event->contentJson()["geo_uri"_ls].toString();
if (geoUri.isEmpty()) { if (geoUri.isEmpty()) {
return -200.0; // longitude runs from -180deg to +180deg so -200 is out of range. return -200.0; // longitude runs from -180deg to +180deg so -200 is out of range.
@@ -945,6 +1012,11 @@ float EventHandler::getLongitude() const
QString EventHandler::getLocationAssetType() const QString EventHandler::getLocationAssetType() const
{ {
if (m_event == nullptr) {
qCWarning(EventHandling) << "getLocationAssetType called with m_event set to nullptr.";
return {};
}
const auto assetType = m_event->contentJson()["org.matrix.msc3488.asset"_ls].toObject()["type"_ls].toString(); const auto assetType = m_event->contentJson()["org.matrix.msc3488.asset"_ls].toObject()["type"_ls].toString();
if (assetType.isEmpty()) { if (assetType.isEmpty()) {
return {}; return {};
@@ -954,6 +1026,15 @@ QString EventHandler::getLocationAssetType() const
bool EventHandler::hasReadMarkers() const bool EventHandler::hasReadMarkers() const
{ {
if (m_room == nullptr) {
qCWarning(EventHandling) << "hasReadMarkers called with m_room set to nullptr.";
return false;
}
if (m_event == nullptr) {
qCWarning(EventHandling) << "hasReadMarkers called with m_event set to nullptr.";
return false;
}
auto userIds = m_room->userIdsAtEvent(m_event->id()); auto userIds = m_room->userIdsAtEvent(m_event->id());
userIds.remove(m_room->localUser()->id()); userIds.remove(m_room->localUser()->id());
return userIds.size() > 0; return userIds.size() > 0;
@@ -961,6 +1042,15 @@ bool EventHandler::hasReadMarkers() const
QVariantList EventHandler::getReadMarkers(int maxMarkers) const QVariantList EventHandler::getReadMarkers(int maxMarkers) const
{ {
if (m_room == nullptr) {
qCWarning(EventHandling) << "getReadMarkers called with m_room set to nullptr.";
return {};
}
if (m_event == nullptr) {
qCWarning(EventHandling) << "getReadMarkers called with m_event set to nullptr.";
return {};
}
auto userIds_temp = m_room->userIdsAtEvent(m_event->id()); auto userIds_temp = m_room->userIdsAtEvent(m_event->id());
userIds_temp.remove(m_room->localUser()->id()); userIds_temp.remove(m_room->localUser()->id());
@@ -981,6 +1071,15 @@ QVariantList EventHandler::getReadMarkers(int maxMarkers) const
QString EventHandler::getNumberExcessReadMarkers(int maxMarkers) const QString EventHandler::getNumberExcessReadMarkers(int maxMarkers) const
{ {
if (m_room == nullptr) {
qCWarning(EventHandling) << "getNumberExcessReadMarkers called with m_room set to nullptr.";
return {};
}
if (m_event == nullptr) {
qCWarning(EventHandling) << "getNumberExcessReadMarkers called with m_event set to nullptr.";
return {};
}
auto userIds = m_room->userIdsAtEvent(m_event->id()); auto userIds = m_room->userIdsAtEvent(m_event->id());
userIds.remove(m_room->localUser()->id()); userIds.remove(m_room->localUser()->id());
@@ -993,6 +1092,15 @@ QString EventHandler::getNumberExcessReadMarkers(int maxMarkers) const
QString EventHandler::getReadMarkersString() const QString EventHandler::getReadMarkersString() const
{ {
if (m_room == nullptr) {
qCWarning(EventHandling) << "getReadMarkersString called with m_room set to nullptr.";
return {};
}
if (m_event == nullptr) {
qCWarning(EventHandling) << "getReadMarkersString called with m_event set to nullptr.";
return {};
}
auto userIds = m_room->userIdsAtEvent(m_event->id()); auto userIds = m_room->userIdsAtEvent(m_event->id());
userIds.remove(m_room->localUser()->id()); userIds.remove(m_room->localUser()->id());