summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLoren Burkholder <computersemiexpert@outlook.com>2023-07-24 19:07:45 -0400
committerLoren Burkholder <computersemiexpert@outlook.com>2023-10-25 22:24:40 -0400
commitbb971b057526c77af47181e2c956cb415c4e4bbc (patch)
tree7e282f765bc00df27a397c1404f7b67d397e8b00
parentbbfbba30b0e27dbd606fa09c0e016e94aacd4858 (diff)
Add report message functionalityissue1410
-rw-r--r--CMakeLists.txt3
-rw-r--r--im.nheko.Nheko.yaml2
-rw-r--r--resources/qml/MessageView.qml16
-rw-r--r--resources/qml/dialogs/ReportMessage.qml85
-rw-r--r--src/timeline/TimelineModel.cpp8
-rw-r--r--src/timeline/TimelineModel.h2
6 files changed, 114 insertions, 2 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 996d3aba..a84f6106 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -595,7 +595,7 @@ if(USE_BUNDLED_MTXCLIENT)
FetchContent_Declare(
MatrixClient
GIT_REPOSITORY https://github.com/Nheko-Reborn/mtxclient.git
- GIT_TAG 8936559c00542528a7776d774fccb7ff674c9c7f
+ GIT_TAG f878e29420c037f45b575fbd29a11cabce3c010a
)
set(BUILD_LIB_EXAMPLES OFF CACHE INTERNAL "")
set(BUILD_LIB_TESTS OFF CACHE INTERNAL "")
@@ -772,6 +772,7 @@ set(QML_SOURCES
resources/qml/dialogs/RawMessageDialog.qml
resources/qml/dialogs/ReadReceipts.qml
resources/qml/dialogs/ReCaptchaDialog.qml
+ resources/qml/dialogs/ReportMessage.qml
resources/qml/dialogs/RoomDirectory.qml
resources/qml/dialogs/RoomMembers.qml
resources/qml/dialogs/AllowedRoomsSettingsDialog.qml
diff --git a/im.nheko.Nheko.yaml b/im.nheko.Nheko.yaml
index 57772a0c..606b76b7 100644
--- a/im.nheko.Nheko.yaml
+++ b/im.nheko.Nheko.yaml
@@ -214,7 +214,7 @@ modules:
buildsystem: cmake-ninja
name: mtxclient
sources:
- - commit: 8936559c00542528a7776d774fccb7ff674c9c7f
+ - commit: 6e01c75fccc2724fcdfe7a7b1a13547522eb8753
#tag: v0.9.2
type: git
url: https://github.com/Nheko-Reborn/mtxclient.git
diff --git a/resources/qml/MessageView.qml b/resources/qml/MessageView.qml
index df39f3d1..80ec87c2 100644
--- a/resources/qml/MessageView.qml
+++ b/resources/qml/MessageView.qml
@@ -415,6 +415,12 @@ Item {
}
}
}
+ Component {
+ id: reportDialog
+
+ ReportMessage {}
+ }
+
Platform.MenuItem {
enabled: visible
text: qsTr("Go to &message")
@@ -522,6 +528,16 @@ Item {
}
}
Platform.MenuItem {
+ text: qsTr("Report message")
+ enabled: visible
+ onTriggered: function () {
+ var dialog = reportDialog.createObject(timelineRoot, {"eventId": messageContextMenu.eventId});
+ dialog.show();
+ dialog.forceActiveFocus();
+ timelineRoot.destroyOnClose(dialog);
+ }
+ }
+ Platform.MenuItem {
enabled: visible
text: qsTr("&Save as")
visible: messageContextMenuC.eventType == MtxEvent.ImageMessage || messageContextMenuC.eventType == MtxEvent.VideoMessage || messageContextMenuC.eventType == MtxEvent.AudioMessage || messageContextMenuC.eventType == MtxEvent.FileMessage || messageContextMenuC.eventType == MtxEvent.Sticker
diff --git a/resources/qml/dialogs/ReportMessage.qml b/resources/qml/dialogs/ReportMessage.qml
new file mode 100644
index 00000000..a0b6325c
--- /dev/null
+++ b/resources/qml/dialogs/ReportMessage.qml
@@ -0,0 +1,85 @@
+// SPDX-FileCopyrightText: Nheko Contributors
+//
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import im.nheko
+
+ApplicationWindow {
+ required property string eventId
+
+ width: 400
+ height: gl.implicitHeight + 2 * Nheko.paddingMedium
+ title: qsTr("Report message")
+
+ GridLayout {
+ id: gl
+
+ columnSpacing: Nheko.paddingMedium
+ rowSpacing: Nheko.paddingMedium
+ columns: 2
+ anchors.fill: parent
+ anchors.margins: Nheko.paddingMedium
+
+ Label {
+ Layout.columnSpan: 2
+ Layout.fillWidth: true
+ wrapMode: Label.WordWrap
+ text: qsTr("This message you are reporting will be sent to your server administrator for review. Please note that not all server administrators review reported content. You should also ask a room moderator to remove the content if necessary.")
+ }
+
+ Label {
+ text: qsTr("Enter your reason for reporting:")
+ }
+
+ TextField {
+ id: reason
+
+ Layout.fillWidth: true
+ }
+
+ Label {
+ text: qsTr("How bad is the message?")
+ }
+
+ Slider {
+ id: score
+
+ from: 0
+ to: -100
+ stepSize: 25
+ snapMode: Slider.SnapAlways
+ Layout.fillWidth: true
+ }
+
+ Item {}
+
+ Label {
+ text: {
+ if (score.value === 0)
+ return qsTr("Not bad")
+ else if (score.value === -25)
+ return qsTr("Mild")
+ else if (score.value === -50)
+ return qsTr("Bad")
+ else if (score.value === -75)
+ return qsTr("Serious")
+ else if (score.value === -100)
+ return qsTr("Extremely serious")
+ }
+ }
+
+ DialogButtonBox {
+ Layout.columnSpan: 2
+ Layout.alignment: Qt.AlignRight
+ standardButtons: DialogButtonBox.Ok | DialogButtonBox.Cancel
+ onAccepted: {
+ room.reportEvent(eventId, reason.text, score.value);
+ close();
+ }
+ onRejected: close()
+ }
+ }
+}
diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp
index e8a0a507..aefdc860 100644
--- a/src/timeline/TimelineModel.cpp
+++ b/src/timeline/TimelineModel.cpp
@@ -1607,6 +1607,14 @@ TimelineModel::redactAllFromUser(const QString &userid, const QString &reason)
std::this_thread::sleep_for(std::chrono::milliseconds(50));
}
}
+
+void
+TimelineModel::reportEvent(const QString &eventId, const QString &reason, const int score)
+{
+ http::client()->report_event(
+ room_id_.toStdString(), eventId.toStdString(), reason.toStdString(), score);
+}
+
void
TimelineModel::redactEvent(const QString &id, const QString &reason)
{
diff --git a/src/timeline/TimelineModel.h b/src/timeline/TimelineModel.h
index 23c3c802..a3933478 100644
--- a/src/timeline/TimelineModel.h
+++ b/src/timeline/TimelineModel.h
@@ -333,6 +333,8 @@ public:
Q_INVOKABLE void showReadReceipts(const QString &id);
Q_INVOKABLE void redactEvent(const QString &id, const QString &reason = "");
Q_INVOKABLE void redactAllFromUser(const QString &userid, const QString &reason = "");
+ Q_INVOKABLE void
+ reportEvent(const QString &eventId, const QString &reason = {}, const int score = -50);
Q_INVOKABLE int idToIndex(const QString &id) const;
Q_INVOKABLE QString indexToId(int index) const;
Q_INVOKABLE void openMedia(const QString &eventId);