From ac5212ebb28693ba643a13ad07e262508375c884 Mon Sep 17 00:00:00 2001 From: James Graham Date: Fri, 17 Mar 2023 14:23:39 +0000 Subject: [PATCH] Update space heirarchy cache Add functions to update the space heirarchy cache when a new space is added or removed. --- src/spacehierarchycache.cpp | 24 +++++++++++++++++++++++- src/spacehierarchycache.h | 9 +++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/spacehierarchycache.cpp b/src/spacehierarchycache.cpp index bd313628d..91b182901 100644 --- a/src/spacehierarchycache.cpp +++ b/src/spacehierarchycache.cpp @@ -3,10 +3,12 @@ #include "spacehierarchycache.h" -#include "controller.h" #ifdef QUOTIENT_07 #include #endif +#include + +#include "controller.h" #include "neochatroom.h" using namespace Quotient; @@ -17,6 +19,8 @@ SpaceHierarchyCache::SpaceHierarchyCache(QObject *parent) cacheSpaceHierarchy(); connect(&Controller::instance(), &Controller::activeConnectionChanged, this, [this]() { cacheSpaceHierarchy(); + connect(Controller::instance().activeConnection(), &Connection::joinedRoom, this, &SpaceHierarchyCache::addSpaceToHierarchy); + connect(Controller::instance().activeConnection(), &Connection::aboutToDeleteRoom, this, &SpaceHierarchyCache::removeSpaceFromHierarchy); }); } @@ -68,6 +72,24 @@ void SpaceHierarchyCache::populateSpaceHierarchy(const QString &spaceId) #endif } +void SpaceHierarchyCache::addSpaceToHierarchy(Quotient::Room *room) +{ + connectSingleShot(room, &Quotient::Room::baseStateLoaded, this, [this, room]() { + const auto neoChatRoom = static_cast(room); + if (neoChatRoom->isSpace()) { + populateSpaceHierarchy(neoChatRoom->id()); + } + }); +} + +void SpaceHierarchyCache::removeSpaceFromHierarchy(Quotient::Room *room) +{ + const auto neoChatRoom = static_cast(room); + if (neoChatRoom->isSpace()) { + m_spaceHierarchy.remove(neoChatRoom->id()); + } +} + QVector &SpaceHierarchyCache::getRoomListForSpace(const QString &spaceId, bool updateCache) { if (updateCache) { diff --git a/src/spacehierarchycache.h b/src/spacehierarchycache.h index 0e1e32dda..85f57a5b2 100644 --- a/src/spacehierarchycache.h +++ b/src/spacehierarchycache.h @@ -8,6 +8,11 @@ #include #include +namespace Quotient +{ +class Room; +} + class SpaceHierarchyCache : public QObject { Q_OBJECT @@ -24,6 +29,10 @@ public: Q_SIGNALS: void spaceHierarchyChanged(); +private Q_SLOTS: + void addSpaceToHierarchy(Quotient::Room *room); + void removeSpaceFromHierarchy(Quotient::Room *room); + private: explicit SpaceHierarchyCache(QObject *parent = nullptr);