diff --git a/src/neochatroom.cpp b/src/neochatroom.cpp index 2fd79fc30..e7ddacc98 100644 --- a/src/neochatroom.cpp +++ b/src/neochatroom.cpp @@ -1694,4 +1694,9 @@ void NeoChatRoom::loadReply(const QString &eventId, const QString &replyId) }); } +User *NeoChatRoom::invitingUser() const +{ + return connection()->user(currentState().get(connection()->userId())->senderId()); +} + #include "moc_neochatroom.cpp" diff --git a/src/neochatroom.h b/src/neochatroom.h index 32e42fee6..155299f2f 100644 --- a/src/neochatroom.h +++ b/src/neochatroom.h @@ -794,6 +794,11 @@ public: */ Q_INVOKABLE void loadReply(const QString &eventId, const QString &replyId); + /** + * If we're invited to this room, the user that invited us. Undefined in other cases. + */ + Q_INVOKABLE Quotient::User *invitingUser() const; + private: QSet highlights; diff --git a/src/notificationsmanager.cpp b/src/notificationsmanager.cpp index 454db3727..618bc7aaa 100644 --- a/src/notificationsmanager.cpp +++ b/src/notificationsmanager.cpp @@ -246,7 +246,7 @@ void NotificationsManager::postInviteNotification(NeoChatRoom *room, const QStri notification->close(); RoomManager::instance().enterRoom(room); }); - notification->setActions({i18n("Accept Invitation"), i18n("Reject Invitation")}); + notification->setActions({i18nc("@action:button The thing being accepted is an invitation to chat", "Accept"), i18nc("@action:button The thing being rejected is an invitation to chat", "Reject"), i18nc("@action:button The thing being rejected is an invitation to chat", "Reject and Ignore User")}); connect(notification, &KNotification::action1Activated, this, [room, notification]() { if (!room) { return; @@ -261,6 +261,14 @@ void NotificationsManager::postInviteNotification(NeoChatRoom *room, const QStri RoomManager::instance().leaveRoom(room); notification->close(); }); + connect(notification, &KNotification::action3Activated, this, [room, notification]() { + if (!room) { + return; + } + RoomManager::instance().leaveRoom(room); + room->connection()->addToIgnoredUsers(room->invitingUser()); + notification->close(); + }); connect(notification, &KNotification::closed, this, [this, room]() { if (!room) { return; diff --git a/src/qml/Component/InvitationView.qml b/src/qml/Component/InvitationView.qml index b0e405987..c03b80858 100644 --- a/src/qml/Component/InvitationView.qml +++ b/src/qml/Component/InvitationView.qml @@ -16,6 +16,15 @@ Kirigami.PlaceholderMessage { text: i18n("Accept this invitation?") RowLayout { + QQC2.Button { + Layout.alignment: Qt.AlignHCenter + text: i18nc("@action:button The thing being rejected is an invitation to chat", "Reject and ignore user") + + onClicked: { + RoomManager.leaveRoom(root.currentRoom); + root.currentRoom.connection.addToIgnoredUsers(root.currentRoom.invitingUser()); + } + } QQC2.Button { Layout.alignment : Qt.AlignHCenter text: i18n("Reject")