summary refs log tree commit diff
path: root/resources
diff options
context:
space:
mode:
Diffstat (limited to 'resources')
-rw-r--r--resources/qml/dialogs/IgnoredUsers.qml65
-rw-r--r--resources/qml/dialogs/UserProfile.qml32
2 files changed, 97 insertions, 0 deletions
diff --git a/resources/qml/dialogs/IgnoredUsers.qml b/resources/qml/dialogs/IgnoredUsers.qml
new file mode 100644
index 00000000..714cb67e
--- /dev/null
+++ b/resources/qml/dialogs/IgnoredUsers.qml
@@ -0,0 +1,65 @@
+// SPDX-FileCopyrightText: Nheko Contributors
+//
+// SPDX-License-Identifier: GPL-3.0-or-later
+import QtQml 2.15
+import QtQuick 2.15
+import QtQuick.Controls 2.15
+import QtQuick.Layouts 2.15
+import QtQuick.Window 2.15
+import im.nheko 1.0
+
+Window {
+    id: ignoredUsers
+    required property list<string> users
+    required property var profile
+
+    title: qsTr("Ignored users")
+    flags: Qt.WindowCloseButtonHint | Qt.WindowTitleHint
+    height: 650
+    width: 420
+    minimumHeight: 420
+    color: palette.window
+
+    Connections {
+        target: profile
+        function onUnignoredUser(id, err) {
+            if (err) {
+                const text = qsTr("Failed to unignore \"%1\": %2").arg(id).arg(err)
+                MainWindow.showNotification(text)
+            } else {
+                users = Array.from(users).filter(user => user !== id)
+            }
+        }
+    }
+
+    ListView {
+        id: view
+        width: ignoredUsers.width
+        height: ignoredUsers.height
+        Layout.leftMargin: Nheko.paddingMedium
+        Layout.rightMargin: Nheko.paddingMedium
+        spacing: Nheko.paddingMedium
+
+        model: users
+        delegate: RowLayout {
+            width: view.width
+            Text {
+                Layout.fillWidth: true
+                Layout.alignment: Qt.AlignLeft
+                elide: Text.ElideRight
+                color: palette.text
+                text: modelData
+            }
+
+            ImageButton {
+                Layout.preferredHeight: 24
+                Layout.preferredWidth: 24
+                image: ":/icons/icons/ui/delete.svg"
+                hoverEnabled: true
+                ToolTip.visible: hovered
+                ToolTip.text: qsTr("Stop Ignoring.")
+                onClicked: profile.ignoredStatus(modelData, false)
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/resources/qml/dialogs/UserProfile.qml b/resources/qml/dialogs/UserProfile.qml
index b54b52a4..4df27a3f 100644
--- a/resources/qml/dialogs/UserProfile.qml
+++ b/resources/qml/dialogs/UserProfile.qml
@@ -292,6 +292,19 @@ ApplicationWindow {
                 ImageButton {
                     Layout.preferredHeight: 24
                     Layout.preferredWidth: 24
+                    image: ":/icons/icons/ui/volume-off-indicator.svg"
+                    hoverEnabled: true
+                    ToolTip.visible: hovered
+                    ToolTip.text: qsTr("Ignore the user.")
+                    onClicked: {
+                        profile.ignoredStatus(profile.userid, true)
+                    }
+                    visible: !profile.isSelf && !profile.isGlobalUserProfile
+                }
+
+                ImageButton {
+                    Layout.preferredHeight: 24
+                    Layout.preferredWidth: 24
                     image: ":/icons/icons/ui/refresh.svg"
                     hoverEnabled: true
                     ToolTip.visible: hovered
@@ -299,6 +312,25 @@ ApplicationWindow {
                     onClicked: profile.refreshDevices()
                 }
 
+                ImageButton {
+                    Layout.preferredHeight: 24
+                    Layout.preferredWidth: 24
+                    image: ":/icons/icons/ui/volume-off-indicator.svg"
+                    hoverEnabled: true
+                    ToolTip.visible: hovered
+                    ToolTip.text: qsTr("Ignored users.")
+                    onClicked: {
+                        var component = Qt.createComponent("IgnoredUsers.qml")
+                        if (component.status == Component.Ready) {
+                            var window = component.createObject(userProfileDialog, {users: profile.getIgnoredUsers(), profile: profile})
+                            window.show()
+                            timelineRoot.destroyOnClose(window)
+                        } else {
+                            console.error("Failed to create component: " + component.errorString());
+                        }
+                    }
+                    visible: profile.isSelf && profile.isGlobalUserProfile
+                }
             }
 
             TabBar {