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.h135
1 files changed, 135 insertions, 0 deletions
diff --git a/src/ui/RoomSettings.h b/src/ui/RoomSettings.h
new file mode 100644

index 00000000..25c6e588 --- /dev/null +++ b/src/ui/RoomSettings.h
@@ -0,0 +1,135 @@ +#pragma once + +#include <QLabel> +#include <QObject> +#include <QPushButton> +#include <QString> + +#include <mtx/events/guest_access.hpp> + +#include "CacheStructs.h" + +class TextField; + +/// Convenience class which connects events emmited from threads +/// outside of main with the UI code. +class ThreadProxy : public QObject +{ + Q_OBJECT + +signals: + void error(const QString &msg); + void nameEventSent(const QString &); + void topicEventSent(const QString &); + void stopLoading(); +}; + +class EditModal : public QWidget +{ + Q_OBJECT + +public: + EditModal(const QString &roomId, QWidget *parent = nullptr); + + void setFields(const QString &roomName, const QString &roomTopic); + +signals: + void nameChanged(const QString &roomName); + void topicChanged(const QString &topic); + +private slots: + void topicEventSent(const QString &topic); + void nameEventSent(const QString &name); + void error(const QString &msg); + + void applyClicked(); + +private: + QString roomId_; + QString initialName_; + QString initialTopic_; + + QLabel *errorField_; + + TextField *nameInput_; + TextField *topicInput_; + + QPushButton *applyBtn_; + QPushButton *cancelBtn_; +}; + +class RoomSettings : public QObject +{ + Q_OBJECT + Q_PROPERTY(QString roomId READ roomId CONSTANT) + Q_PROPERTY(QString roomVersion READ roomVersion CONSTANT) + Q_PROPERTY(QString roomName READ roomName NOTIFY roomNameChanged) + Q_PROPERTY(QString roomTopic READ roomTopic NOTIFY roomTopicChanged) + 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 isLoading READ isLoading NOTIFY loadingChanged) + Q_PROPERTY(bool canChangeAvatar READ canChangeAvatar CONSTANT) + Q_PROPERTY(bool canChangeJoinRules READ canChangeJoinRules CONSTANT) + Q_PROPERTY(bool canChangeNameAndTopic READ canChangeNameAndTopic CONSTANT) + Q_PROPERTY(bool isEncryptionEnabled READ isEncryptionEnabled NOTIFY encryptionChanged) + Q_PROPERTY(bool respondsToKeyRequests READ respondsToKeyRequests NOTIFY keyRequestsChanged) + +public: + RoomSettings(QString roomid, QObject *parent = nullptr); + + QString roomId() const; + QString roomName() const; + QString roomTopic() const; + QString roomVersion() const; + QString roomAvatarUrl(); + int memberCount() const; + int notifications(); + int accessJoinRules(); + bool respondsToKeyRequests(); + bool isLoading() const; + //! Whether the user has enough power level to send m.room.join_rules events. + bool canChangeJoinRules() const; + //! Whether the user has enough power level to send m.room.name & m.room.topic events. + bool canChangeNameAndTopic() const; + //! Whether the user has enough power level to send m.room.avatar event. + bool canChangeAvatar() const; + bool isEncryptionEnabled() const; + + Q_INVOKABLE void enableEncryption(); + Q_INVOKABLE void updateAvatar(); + Q_INVOKABLE void openEditModal(); + Q_INVOKABLE void changeAccessRules(int index); + Q_INVOKABLE void changeNotifications(int currentIndex); + Q_INVOKABLE void changeKeyRequestsPreference(bool isOn); + +signals: + void loadingChanged(); + void roomNameChanged(); + void roomTopicChanged(); + void avatarUrlChanged(); + void encryptionChanged(); + void keyRequestsChanged(); + void notificationsChanged(); + void accessJoinRulesChanged(); + void displayError(const QString &errorMessage); + +public slots: + void stopLoading(); + void avatarChanged(); + +private: + void retrieveRoomInfo(); + void updateAccessRules(const std::string &room_id, + const mtx::events::state::JoinRules &, + const mtx::events::state::GuestAccess &); + +private: + QString roomid_; + bool usesEncryption_ = false; + bool isLoading_ = false; + RoomInfo info_; + int notifications_ = 0; + int accessRules_ = 0; +}; \ No newline at end of file