From dba88fe2b776d20c7654ee00528d54c74117a671 Mon Sep 17 00:00:00 2001 From: James Graham Date: Tue, 23 Jul 2024 14:15:19 +0100 Subject: [PATCH] REmove getAuthor as no longer needed --- autotests/eventhandlertest.cpp | 28 ---------------------------- src/eventhandler.cpp | 14 -------------- src/eventhandler.h | 17 +---------------- src/models/messagecontentmodel.cpp | 29 +++++++++++++++++++++-------- src/models/messagecontentmodel.h | 5 +++++ src/models/searchmodel.cpp | 13 ++++++++++++- src/models/searchmodel.h | 4 ++++ src/roommanager.cpp | 4 ++-- 8 files changed, 45 insertions(+), 69 deletions(-) diff --git a/autotests/eventhandlertest.cpp b/autotests/eventhandlertest.cpp index 0b62c7c01..b288b4a54 100644 --- a/autotests/eventhandlertest.cpp +++ b/autotests/eventhandlertest.cpp @@ -36,8 +36,6 @@ private Q_SLOTS: void eventId(); void nullEventId(); - void author(); - void nullAuthor(); void authorDisplayName(); void nullAuthorDisplayName(); void singleLineSidplayName(); @@ -96,32 +94,6 @@ void EventHandlerTest::nullEventId() QCOMPARE(noEventHandler.getId(), QString()); } -void EventHandlerTest::author() -{ - auto event = room->messageEvents().at(0).get(); - auto author = room->member(event->senderId()); - EventHandler eventHandler(room, event); - - auto eventHandlerAuthor = eventHandler.getAuthor(); - - QCOMPARE(eventHandlerAuthor.isLocalMember(), author.id() == room->localMember().id()); - QCOMPARE(eventHandlerAuthor.id(), author.id()); - QCOMPARE(eventHandlerAuthor.displayName(), author.displayName()); - QCOMPARE(eventHandlerAuthor.avatarUrl(), author.avatarUrl()); - QCOMPARE(eventHandlerAuthor.avatarMediaId(), author.avatarMediaId()); - QCOMPARE(eventHandlerAuthor.color(), author.color()); -} - -void EventHandlerTest::nullAuthor() -{ - QTest::ignoreMessage(QtWarningMsg, "getAuthor called with m_room set to nullptr."); - QCOMPARE(emptyHandler.getAuthor(), RoomMember()); - - EventHandler noEventHandler(room, nullptr); - QTest::ignoreMessage(QtWarningMsg, "getAuthor called with m_event set to nullptr. Returning empty user."); - QCOMPARE(noEventHandler.getAuthor(), RoomMember()); -} - void EventHandlerTest::authorDisplayName() { EventHandler eventHandler(room, room->messageEvents().at(1).get()); diff --git a/src/eventhandler.cpp b/src/eventhandler.cpp index 237c57382..6b4b65a38 100644 --- a/src/eventhandler.cpp +++ b/src/eventhandler.cpp @@ -61,20 +61,6 @@ MessageComponentType::Type EventHandler::messageComponentType() const return MessageComponentType::typeForEvent(*m_event); } -Quotient::RoomMember EventHandler::getAuthor(bool isPending) const -{ - if (m_room == nullptr) { - qCWarning(EventHandling) << "getAuthor called with m_room set to nullptr."; - return {}; - } - if (m_event == nullptr) { - qCWarning(EventHandling) << "getAuthor called with m_event set to nullptr. Returning empty user."; - return {}; - } - - return isPending ? m_room->localMember() : m_room->member(m_event->senderId()); -} - QString EventHandler::getAuthorDisplayName(bool isPending) const { if (m_room == nullptr) { diff --git a/src/eventhandler.h b/src/eventhandler.h index ca4c2895d..673710239 100644 --- a/src/eventhandler.h +++ b/src/eventhandler.h @@ -53,25 +53,10 @@ public: */ MessageComponentType::Type messageComponentType() const; - /** - * @brief Get the author of the event in context of the room. - * - * An empty Quotient::RoomMember will be returned if the EventHandler hasn't had - * the room or event initialised. - * - * @param isPending if the event is pending, i.e. has not been confirmed by - * the server. - * - * @return a Quotient::RoomMember object for the user. - * - * @sa Quotient::RoomMember - */ - Quotient::RoomMember getAuthor(bool isPending = false) const; - /** * @brief Get the display name of the event author. * - * This method is separate from getAuthor() and special in that it will return + * This method is special in that it will return * the old display name of the author if the current event is one that caused it * to change. This allows for scenarios where the UI wishes to notify that a * user's display name has changed and what it changed from. diff --git a/src/models/messagecontentmodel.cpp b/src/models/messagecontentmodel.cpp index 1238ddb45..1bd24db20 100644 --- a/src/models/messagecontentmodel.cpp +++ b/src/models/messagecontentmodel.cpp @@ -3,6 +3,7 @@ #include "messagecontentmodel.h" #include "neochatconfig.h" +#include "neochatroommember.h" #include @@ -35,10 +36,10 @@ 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(loadEvent(event->fullJson())) , m_isPending(isPending) , m_isReply(isReply) { + intiializeEvent(event); initializeModel(); } @@ -62,8 +63,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 = loadEvent(m_room->getEvent(eventId)->fullJson()); - Q_EMIT eventUpdated(); + intiializeEvent(eventId); updateReplyModel(); resetContent(); return true; @@ -81,8 +81,7 @@ void MessageContentModel::initializeModel() if (m_eventId == serverEvent->id()) { beginResetModel(); m_isPending = false; - m_event = loadEvent(serverEvent->fullJson()); - Q_EMIT eventUpdated(); + intiializeEvent(serverEvent); endResetModel(); } } @@ -91,8 +90,7 @@ void MessageContentModel::initializeModel() if (m_room != nullptr && m_event != nullptr) { if (m_eventId == newEvent->id()) { beginResetModel(); - m_event = loadEvent(newEvent->fullJson()); - Q_EMIT eventUpdated(); + intiializeEvent(newEvent); endResetModel(); } } @@ -154,6 +152,21 @@ void MessageContentModel::initializeModel() resetModel(); } +void MessageContentModel::intiializeEvent(const QString &eventId) +{ + const auto newEvent = m_room->getEvent(eventId); + if (newEvent != nullptr) { + intiializeEvent(newEvent); + } +} + +void MessageContentModel::intiializeEvent(const Quotient::RoomEvent *event) +{ + m_event = loadEvent(event->fullJson()); + m_eventSenderObject = std::unique_ptr(new NeochatRoomMember(m_room, event->senderId())); + Q_EMIT eventUpdated(); +} + bool MessageContentModel::showAuthor() const { return m_showAuthor; @@ -239,7 +252,7 @@ QVariant MessageContentModel::data(const QModelIndex &index, int role) const return eventHandler.getTimeString(false, QLocale::ShortFormat, m_isPending, lastUpdated); } if (role == AuthorRole) { - return QVariant::fromValue(eventHandler.getAuthor(m_isPending)); + return QVariant::fromValue(m_eventSenderObject.get()); } if (role == MediaInfoRole) { return eventHandler.getMediaInfo(); diff --git a/src/models/messagecontentmodel.h b/src/models/messagecontentmodel.h index 127bffc30..c81a2f2fd 100644 --- a/src/models/messagecontentmodel.h +++ b/src/models/messagecontentmodel.h @@ -6,11 +6,13 @@ #include #include +#include #include #include "enums/messagecomponenttype.h" #include "eventhandler.h" #include "itinerarymodel.h" +#include "neochatroommember.h" struct MessageComponent { MessageComponentType::Type type = MessageComponentType::Other; @@ -115,6 +117,7 @@ private: QPointer m_room; QString m_eventId; QString m_eventSenderId; + std::unique_ptr m_eventSenderObject; Quotient::RoomEventPtr m_event; bool m_isPending; @@ -122,6 +125,8 @@ private: bool m_isReply; void initializeModel(); + void intiializeEvent(const QString &eventId); + void intiializeEvent(const Quotient::RoomEvent *event); QList m_components; void resetModel(); diff --git a/src/models/searchmodel.cpp b/src/models/searchmodel.cpp index 4a8dc2031..bbd5243dd 100644 --- a/src/models/searchmodel.cpp +++ b/src/models/searchmodel.cpp @@ -7,6 +7,7 @@ #include "eventhandler.h" #include "models/messagecontentmodel.h" #include "neochatroom.h" +#include "neochatroommember.h" #include @@ -66,7 +67,17 @@ void SearchModel::search() m_job = job; connect(job, &BaseJob::finished, this, [this, job] { beginResetModel(); + m_memberObjects.clear(); m_result = job->searchCategories().roomEvents; + + if (m_result.has_value()) { + for (const auto &result : m_result.value().results) { + if (!m_memberObjects.contains(result.result->senderId())) { + m_memberObjects[result.result->senderId()] = std::unique_ptr(new NeochatRoomMember(m_room, result.result->senderId())); + } + } + } + endResetModel(); setSearching(false); m_job = nullptr; @@ -83,7 +94,7 @@ QVariant SearchModel::data(const QModelIndex &index, int role) const switch (role) { case AuthorRole: - return QVariant::fromValue(eventHandler.getAuthor()); + return QVariant::fromValue(m_memberObjects.at(event.senderId()).get()); case ShowSectionRole: if (row == 0) { return true; diff --git a/src/models/searchmodel.h b/src/models/searchmodel.h index 79477741c..f1d5944a6 100644 --- a/src/models/searchmodel.h +++ b/src/models/searchmodel.h @@ -9,6 +9,8 @@ #include +#include "neochatroommember.h" + namespace Quotient { class Connection; @@ -123,4 +125,6 @@ private: std::optional m_result = std::nullopt; Quotient::SearchJob *m_job = nullptr; bool m_searching = false; + + std::map> m_memberObjects; }; diff --git a/src/roommanager.cpp b/src/roommanager.cpp index 063799f49..d87b5373b 100644 --- a/src/roommanager.cpp +++ b/src/roommanager.cpp @@ -209,7 +209,7 @@ void RoomManager::viewEventMenu(const QString &eventId, NeoChatRoom *room, const if (eventHandler.getMediaInfo().contains("mimeType"_ls)) { Q_EMIT showFileMenu(eventId, - eventHandler.getAuthor(), + room->member(event.senderId()), eventHandler.messageComponentType(), eventHandler.getPlainBody(), eventHandler.getMediaInfo()["mimeType"_ls].toString(), @@ -218,7 +218,7 @@ void RoomManager::viewEventMenu(const QString &eventId, NeoChatRoom *room, const } Q_EMIT showMessageMenu(eventId, - eventHandler.getAuthor(), + room->member(event.senderId()), eventHandler.messageComponentType(), eventHandler.getPlainBody(), eventHandler.getRichBody(),