matrixion/src/ui/RoomSettings.h

143 lines
4.2 KiB
C
Raw Normal View History

2021-03-05 02:35:15 +03:00
// SPDX-FileCopyrightText: 2021 Nheko Contributors
// SPDX-FileCopyrightText: 2022 Nheko Contributors
2021-03-05 02:35:15 +03:00
//
// SPDX-License-Identifier: GPL-3.0-or-later
#pragma once
#include <QLabel>
#include <QObject>
#include <QPushButton>
#include <QSet>
#include <QString>
#include <mtx/events/event_type.hpp>
#include <mtx/events/guest_access.hpp>
#include "CacheStructs.h"
class TextField;
2021-02-11 21:09:11 +03:00
/// Convenience class which connects events emmited from threads
/// outside of main with the UI code.
class ThreadProxy : public QObject
{
2021-09-18 01:22:33 +03:00
Q_OBJECT
2021-02-11 21:09:11 +03:00
signals:
2021-09-18 01:22:33 +03:00
void error(const QString &msg);
void nameEventSent(const QString &);
void topicEventSent(const QString &);
void stopLoading();
2021-02-11 21:09:11 +03:00
};
class EditModal : public QWidget
{
2021-09-18 01:22:33 +03:00
Q_OBJECT
public:
2021-09-18 01:22:33 +03:00
EditModal(const QString &roomId, QWidget *parent = nullptr);
2021-09-18 01:22:33 +03:00
void setFields(const QString &roomName, const QString &roomTopic);
signals:
2021-09-18 01:22:33 +03:00
void nameChanged(const QString &roomName);
void topicChanged(const QString &topic);
private slots:
2021-09-18 01:22:33 +03:00
void topicEventSent(const QString &topic);
void nameEventSent(const QString &name);
void error(const QString &msg);
2021-09-18 01:22:33 +03:00
void applyClicked();
private:
2021-09-18 01:22:33 +03:00
QString roomId_;
QString initialName_;
QString initialTopic_;
2021-09-18 01:22:33 +03:00
QLabel *errorField_;
2021-09-18 01:22:33 +03:00
TextField *nameInput_;
TextField *topicInput_;
2021-09-18 01:22:33 +03:00
QPushButton *applyBtn_;
QPushButton *cancelBtn_;
};
class RoomSettings : public QObject
{
2021-09-18 01:22:33 +03:00
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 supportsKnocking READ supportsKnocking CONSTANT)
Q_PROPERTY(bool supportsRestricted READ supportsRestricted CONSTANT)
public:
2021-09-18 01:22:33 +03:00
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 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;
bool supportsKnocking() const;
bool supportsRestricted() 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);
signals:
2021-09-18 01:22:33 +03:00
void loadingChanged();
void roomNameChanged();
void roomTopicChanged();
void avatarUrlChanged();
void encryptionChanged();
void notificationsChanged();
void accessJoinRulesChanged();
void displayError(const QString &errorMessage);
2021-02-11 21:09:11 +03:00
public slots:
2021-09-18 01:22:33 +03:00
void stopLoading();
void avatarChanged();
private:
2021-09-18 01:22:33 +03:00
void retrieveRoomInfo();
void updateAccessRules(const std::string &room_id,
const mtx::events::state::JoinRules &,
const mtx::events::state::GuestAccess &);
private:
2021-09-18 01:22:33 +03:00
QString roomid_;
bool usesEncryption_ = false;
bool isLoading_ = false;
RoomInfo info_;
int notifications_ = 0;
int accessRules_ = 0;
};