summary refs log tree commit diff
path: root/src/ui/RoomSettings.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/RoomSettings.h')
-rw-r--r--src/ui/RoomSettings.h78
1 files changed, 72 insertions, 6 deletions
diff --git a/src/ui/RoomSettings.h b/src/ui/RoomSettings.h

index 4cb5bcf4..35698310 100644 --- a/src/ui/RoomSettings.h +++ b/src/ui/RoomSettings.h
@@ -5,10 +5,13 @@ #pragma once +#include <QAbstractListModel> #include <QObject> #include <QSet> #include <QString> +#include <unordered_set> + #include <mtx/events/event_type.hpp> #include <mtx/events/guest_access.hpp> @@ -27,6 +30,43 @@ signals: void stopLoading(); }; +class RoomSettings; + +class RoomSettingsAllowedRoomsModel : public QAbstractListModel +{ + Q_OBJECT + +public: + enum Roles + { + Name, + IsAllowed, + IsSpaceParent, + }; + + explicit RoomSettingsAllowedRoomsModel(RoomSettings *parent); + + QHash<int, QByteArray> roleNames() const override; + int rowCount(const QModelIndex &) const override; + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; + bool + setData(const QModelIndex &index, const QVariant &value, int role = Qt::DisplayRole) override; + Q_INVOKABLE void addRoom(QString room); + + Qt::ItemFlags flags(const QModelIndex &) const override + { + return Qt::ItemIsEditable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | + Qt::ItemNeverHasChildren; + } + + QStringList allowedRoomIds; + +private: + QStringList listedRoomIds; + std::unordered_set<QString> parentSpaces; + RoomSettings *settings; +}; + class RoomSettings : public QObject { Q_OBJECT @@ -39,7 +79,10 @@ class RoomSettings : public QObject Q_PROPERTY(QString roomAvatarUrl READ roomAvatarUrl NOTIFY avatarUrlChanged) Q_PROPERTY(int memberCount READ memberCount CONSTANT) Q_PROPERTY(int notifications READ notifications NOTIFY notificationsChanged) - Q_PROPERTY(int accessJoinRules READ accessJoinRules NOTIFY accessJoinRulesChanged) + Q_PROPERTY(bool privateAccess READ privateAccess NOTIFY accessJoinRulesChanged) + Q_PROPERTY(bool guestAccess READ guestAccess NOTIFY accessJoinRulesChanged) + Q_PROPERTY(bool knockingEnabled READ knockingEnabled NOTIFY accessJoinRulesChanged) + Q_PROPERTY(bool restrictedEnabled READ restrictedEnabled NOTIFY accessJoinRulesChanged) Q_PROPERTY(bool isLoading READ isLoading NOTIFY loadingChanged) Q_PROPERTY(bool canChangeAvatar READ canChangeAvatar CONSTANT) Q_PROPERTY(bool canChangeJoinRules READ canChangeJoinRules CONSTANT) @@ -49,6 +92,11 @@ class RoomSettings : public QObject Q_PROPERTY(bool supportsKnocking READ supportsKnocking CONSTANT) Q_PROPERTY(bool supportsRestricted READ supportsRestricted CONSTANT) Q_PROPERTY(bool supportsKnockRestricted READ supportsKnockRestricted CONSTANT) + Q_PROPERTY( + QStringList allowedRooms READ allowedRooms WRITE setAllowedRooms NOTIFY allowedRoomsChanged) + Q_PROPERTY(RoomSettingsAllowedRoomsModel *allowedRoomsModel MEMBER allowedRoomsModel CONSTANT) + Q_PROPERTY( + bool allowedRoomsModified READ allowedRoomsModified NOTIFY allowedRoomsModifiedChanged) public: RoomSettings(QString roomid, QObject *parent = nullptr); @@ -62,7 +110,10 @@ public: QString roomAvatarUrl(); int memberCount() const; int notifications(); - int accessJoinRules(); + bool privateAccess() const; + bool guestAccess() const; + bool knockingEnabled() const; + bool restrictedEnabled() const; bool isLoading() const; //! Whether the user has enough power level to send m.room.join_rules events. bool canChangeJoinRules() const; @@ -76,14 +127,22 @@ public: bool supportsKnocking() const; bool supportsRestricted() const; bool supportsKnockRestricted() const; + QStringList allowedRooms() const; + void setAllowedRooms(QStringList rooms); + bool allowedRoomsModified() const { return allowedRoomsModified_; } Q_INVOKABLE void enableEncryption(); Q_INVOKABLE void updateAvatar(); - Q_INVOKABLE void changeAccessRules(int index); + Q_INVOKABLE void changeAccessRules(bool private_, + bool guestsAllowed, + bool knockingAllowed, + bool restrictedAllowed); Q_INVOKABLE void changeNotifications(int currentIndex); Q_INVOKABLE void changeTopic(QString topic); Q_INVOKABLE void changeName(QString name); + Q_INVOKABLE void applyAllowedFromModel(); + signals: void loadingChanged(); void roomNameChanged(); @@ -92,7 +151,9 @@ signals: void encryptionChanged(); void notificationsChanged(); void accessJoinRulesChanged(); + void allowedRoomsChanged(); void displayError(const QString &errorMessage); + void allowedRoomsModifiedChanged(); public slots: void stopLoading(); @@ -106,9 +167,14 @@ private: private: QString roomid_; - bool usesEncryption_ = false; - bool isLoading_ = false; + bool usesEncryption_ = false; + bool isLoading_ = false; + bool allowedRoomsModified_ = false; RoomInfo info_; int notifications_ = 0; - int accessRules_ = 0; + + mtx::events::state::JoinRules accessRules_; + mtx::events::state::AccessState guestRules_ = mtx::events::state::AccessState::Forbidden; + + RoomSettingsAllowedRoomsModel *allowedRoomsModel; };