Made only unjoined rooms joinable
2 files changed, 14 insertions, 2 deletions
diff --git a/src/RoomDirectoryModel.cpp b/src/RoomDirectoryModel.cpp
index 2a06e4d4..b206bf9e 100644
--- a/src/RoomDirectoryModel.cpp
+++ b/src/RoomDirectoryModel.cpp
@@ -4,6 +4,7 @@
#include "RoomDirectoryModel.h"
#include "ChatPage.h"
+#include "Cache.h"
#include <algorithm>
@@ -68,6 +69,16 @@ RoomDirectoryModel::setSearchTerm(const QString &f)
resetDisplayedData();
}
+
+bool
+RoomDirectoryModel::canJoinRoom(const QByteArray &room)
+{
+ const auto &cache = cache::roomInfo();
+ const QString room_id (room);
+ const bool validRoom = !room_id.isNull() && !room_id.isEmpty();
+ return validRoom && !cache.contains(room_id);
+}
+
std::vector<std::string>
RoomDirectoryModel::getViasForRoom(const std::vector<std::string> &aliases)
{
@@ -174,4 +185,4 @@ RoomDirectoryModel::displayRooms(std::vector<mtx::responses::PublicRoomsChunk> f
}
prevBatch_ = std::exchange(nextBatch_, next_batch);
-}
\ No newline at end of file
+}
diff --git a/src/RoomDirectoryModel.h b/src/RoomDirectoryModel.h
index ff571d93..7099ff00 100644
--- a/src/RoomDirectoryModel.h
+++ b/src/RoomDirectoryModel.h
@@ -56,6 +56,7 @@ public:
}
void fetchMore(const QModelIndex &) override;
+ Q_INVOKABLE bool canJoinRoom(const QByteArray &room);
Q_INVOKABLE void joinRoom(const int &index = -1);
signals:
@@ -84,4 +85,4 @@ private:
std::vector<std::string> getViasForRoom(const std::vector<std::string> &room);
void resetDisplayedData();
-};
\ No newline at end of file
+};
|