From 997c8332fbcfccc128f6ab3d0c1949161d80ef66 Mon Sep 17 00:00:00 2001 From: N-Pex Date: Mon, 3 Nov 2025 16:47:41 +0100 Subject: [PATCH] Support reporting both rooms and individual events --- src/assets/icons/ic_report.vue | 6 ++ src/assets/translations/en.json | 1 + src/components/Chat.vue | 23 +++++- src/components/ReportRoomDialog.vue | 76 ------------------- src/components/ReportRoomOrEventDialog.vue | 67 ++++++++++++++++ src/components/RoomInfo.vue | 6 +- src/components/messages/MessageOperations.vue | 3 + .../messages/messageOperationsMixin.js | 4 + 8 files changed, 105 insertions(+), 81 deletions(-) create mode 100644 src/assets/icons/ic_report.vue delete mode 100644 src/components/ReportRoomDialog.vue create mode 100644 src/components/ReportRoomOrEventDialog.vue diff --git a/src/assets/icons/ic_report.vue b/src/assets/icons/ic_report.vue new file mode 100644 index 0000000..996ae3c --- /dev/null +++ b/src/assets/icons/ic_report.vue @@ -0,0 +1,6 @@ + \ No newline at end of file diff --git a/src/assets/translations/en.json b/src/assets/translations/en.json index f076d63..3f9f80b 100644 --- a/src/assets/translations/en.json +++ b/src/assets/translations/en.json @@ -396,6 +396,7 @@ "message_history_warning": "warning: Full message history will be visible to new participants", "report": "Report", "report_info": "Report this room to service administrators for illegal, abusive or otherwise harmful content", + "report_event_info": "Report this message to service administrators for illegal, abusive or otherwise harmful content", "report_reason": "Reason", "confirm_make_admin": "Do you want to make this user an administrator?", "confirm_revoke_admin": "Do you want to remove administrator rights from this user?", diff --git a/src/components/Chat.vue b/src/components/Chat.vue index 6360d5a..a5f3096 100644 --- a/src/components/Chat.vue +++ b/src/components/Chat.vue @@ -57,6 +57,7 @@ v-on:edit="edit(selectedEvent)" v-on:redact="redact(selectedEvent)" v-on:download="download(selectedEvent)" + v-on:report="reportEvent(selectedEvent)" v-on:more=" isEmojiQuickReaction=true; showMoreMessageOperations({event: selectedEvent, anchor: $event.anchor}) @@ -297,6 +298,7 @@ +
@@ -324,6 +326,7 @@ import UserProfileDialog from "./UserProfileDialog.vue" import RoomUpgradePrompt from "./messages/composition/RoomUpgradePrompt.vue"; import BottomSheet from "./BottomSheet.vue"; import CreatePollDialog from "./CreatePollDialog.vue"; +import ReportRoomOrEventDialog from "./ReportRoomOrEventDialog.vue"; import chatMixin, { ROOM_READ_MARKER_EVENT_PLACEHOLDER } from "./chatMixin"; import AudioLayout from "./AudioLayout.vue"; import SendAttachmentsLayout from "./file_mode/SendAttachmentsLayout.vue"; @@ -394,7 +397,8 @@ export default { MessageOperationsChannel, RoomExport, EmojiPicker, - RoomUpgradePrompt + RoomUpgradePrompt, + ReportRoomOrEventDialog }, data() { @@ -485,7 +489,8 @@ export default { left: 0 }, reverseOrder: false, - downloadingChat: false + downloadingChat: false, + reportingEventId: null, }; }, @@ -801,6 +806,16 @@ export default { '--top': this.heartPosition.top, '--left': this.heartPosition.left }; + }, + reportingEventShown: { + get() { + return this.reportingEventId != null; + }, + set(newValue) { + if (!newValue) { + this.reportingEventId = null; + } + } } }, @@ -1662,6 +1677,10 @@ export default { } }, + reportEvent(event) { + this.reportingEventId = event.getId(); + }, + pin(event) { const eventToPin = event.parentThread ? event.parentThread : event; this.$matrix.setEventPinned(this.room, eventToPin, true); diff --git a/src/components/ReportRoomDialog.vue b/src/components/ReportRoomDialog.vue deleted file mode 100644 index 8c7b88b..0000000 --- a/src/components/ReportRoomDialog.vue +++ /dev/null @@ -1,76 +0,0 @@ - - - - \ No newline at end of file diff --git a/src/components/ReportRoomOrEventDialog.vue b/src/components/ReportRoomOrEventDialog.vue new file mode 100644 index 0000000..7490772 --- /dev/null +++ b/src/components/ReportRoomOrEventDialog.vue @@ -0,0 +1,67 @@ + + + + \ No newline at end of file diff --git a/src/components/RoomInfo.vue b/src/components/RoomInfo.vue index 0f88f23..4f98e80 100644 --- a/src/components/RoomInfo.vue +++ b/src/components/RoomInfo.vue @@ -351,7 +351,7 @@ v-on:message-retention-update="onMessageRetention" /> - @@ -364,7 +364,7 @@ import LeaveRoomDialog from "../components/LeaveRoomDialog"; import PurgeRoomDialog from "../components/PurgeRoomDialog"; import MessageRetentionDialog from "../components/MessageRetentionDialog"; -import ReportRoomDialog from "../components/ReportRoomDialog"; +import ReportRoomOrEventDialog from "../components/ReportRoomOrEventDialog"; import RoomExport from "../components/RoomExport"; import RoomAvatarPicker from "../components/RoomAvatarPicker"; import CopyLink from "../components/CopyLink.vue" @@ -382,7 +382,7 @@ export default { LeaveRoomDialog, PurgeRoomDialog, MessageRetentionDialog, - ReportRoomDialog, + ReportRoomOrEventDialog, UserProfileDialog, RoomExport, RoomAvatarPicker, diff --git a/src/components/messages/MessageOperations.vue b/src/components/messages/MessageOperations.vue index da15ebf..d7c9c88 100644 --- a/src/components/messages/MessageOperations.vue +++ b/src/components/messages/MessageOperations.vue @@ -20,6 +20,9 @@ get_app + + $vuetify.icons.ic_report +
diff --git a/src/components/messages/messageOperationsMixin.js b/src/components/messages/messageOperationsMixin.js index 289c051..0bbd370 100644 --- a/src/components/messages/messageOperationsMixin.js +++ b/src/components/messages/messageOperationsMixin.js @@ -58,5 +58,9 @@ export default { this.$emit("close"); this.$emit("unpin", {event:this.event}); }, + report() { + this.$emit("close"); + this.$emit("report", {event:this.event}); + } } } \ No newline at end of file