diff --git a/imports/NeoChat/Dialog/UserDetailDialog.qml b/imports/NeoChat/Dialog/UserDetailDialog.qml index e0c98a775..176aaa0c5 100644 --- a/imports/NeoChat/Dialog/UserDetailDialog.qml +++ b/imports/NeoChat/Dialog/UserDetailDialog.qml @@ -104,7 +104,7 @@ Kirigami.OverlaySheet { } } Kirigami.BasicListItem { - visible: user !== room.localUser && room.canSendState("kick") && room.containsUser(user) + visible: user !== room.localUser && room.canSendState("kick") && room.containsUser(user.id) action: Kirigami.Action { text: i18n("Kick this user") @@ -116,7 +116,7 @@ Kirigami.OverlaySheet { } } Kirigami.BasicListItem { - visible: user !== room.localUser && room.canSendState("ban") + visible: user !== room.localUser && room.canSendState("ban") && !room.isUserBanned(user.id) action: Kirigami.Action { text: i18n("Ban this user") diff --git a/src/neochatroom.cpp b/src/neochatroom.cpp index 10e3e9ffd..84064f087 100644 --- a/src/neochatroom.cpp +++ b/src/neochatroom.cpp @@ -685,3 +685,8 @@ bool NeoChatRoom::isInvite() const { return joinState() == JoinState::Invite; } + +bool NeoChatRoom::isUserBanned(const QString &user) const +{ + return getCurrentState(user)->membership() == MembershipType::Ban; +} diff --git a/src/neochatroom.h b/src/neochatroom.h index 8faa50db9..1f8e99021 100644 --- a/src/neochatroom.h +++ b/src/neochatroom.h @@ -98,6 +98,7 @@ public: [[nodiscard]] QString eventToString(const RoomEvent &evt, Qt::TextFormat format = Qt::PlainText, bool removeReply = true) const; Q_INVOKABLE [[nodiscard]] bool containsUser(const QString &userID) const; + Q_INVOKABLE [[nodiscard]] bool isUserBanned(const QString &user) const; Q_INVOKABLE [[nodiscard]] bool canSendEvent(const QString &eventType) const; Q_INVOKABLE [[nodiscard]] bool canSendState(const QString &eventType) const;