From d935f6a5019a5d9c4e77bd7a4ab3a5b7f11271e6 Mon Sep 17 00:00:00 2001 From: ggurdin <46800240+ggurdin@users.noreply.github.com> Date: Tue, 1 Apr 2025 12:56:29 -0400 Subject: [PATCH] chore: send error to sentry on report message (#2302) --- lib/pages/chat/chat.dart | 59 +++------------ lib/pangea/events/utils/report_message.dart | 72 ++++++++++++++++++- .../widgets/message_selection_overlay.dart | 10 +-- .../toolbar/widgets/overlay_header.dart | 7 +- .../word_zoom/morphological_list_item.dart | 6 +- 5 files changed, 97 insertions(+), 57 deletions(-) diff --git a/lib/pages/chat/chat.dart b/lib/pages/chat/chat.dart index 9219ca2d0..b1745461e 100644 --- a/lib/pages/chat/chat.dart +++ b/lib/pages/chat/chat.dart @@ -45,7 +45,6 @@ import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dar import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; import 'package:fluffychat/pangea/events/models/representation_content_model.dart'; import 'package:fluffychat/pangea/events/models/tokens_event_content_model.dart'; -import 'package:fluffychat/pangea/events/utils/report_message.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; import 'package:fluffychat/pangea/instructions/instructions_enum.dart'; import 'package:fluffychat/pangea/learning_settings/widgets/p_language_dialog.dart'; @@ -1119,9 +1118,6 @@ class ChatController extends State void reportEventAction() async { final event = selectedEvents.single; - // #Pangea - clearSelectedEvents(); - // Pangea# final score = await showModalActionPopup( context: context, title: L10n.of(context).reportMessage, @@ -1138,10 +1134,7 @@ class ChatController extends State ), AdaptiveModalAction( value: 0, - // #Pangea - // label: L10n.of(context).inoffensive, - label: L10n.of(context).slightlyOffensive, - // Pangea# + label: L10n.of(context).inoffensive, ), ], ); @@ -1152,50 +1145,18 @@ class ChatController extends State okLabel: L10n.of(context).ok, cancelLabel: L10n.of(context).cancel, hintText: L10n.of(context).reason, - // #Pangea - autoSubmit: true, - // Pangea# ); if (reason == null || reason.isEmpty) return; - // #Pangea - try { - await reportMessage( - context, - roomId, - reason, - event.senderId, - event.content['body'].toString(), - ); - } catch (err) { - ErrorHandler.logError( - e: err, - s: StackTrace.current, - data: { - 'roomId': roomId, - 'reason': reason, - 'senderId': event.senderId, - 'content': event.content['body'].toString(), - }, - ); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text( - L10n.of(context).oopsSomethingWentWrong, + final result = await showFutureLoadingDialog( + context: context, + future: () => Matrix.of(context).client.reportEvent( + event.roomId!, + event.eventId, + reason: reason, + score: score, ), - ), - ); - } - // final result = await showFutureLoadingDialog( - // context: context, - // future: () => Matrix.of(context).client.reportEvent( - // event.roomId!, - // event.eventId, - // reason: reason, - // score: score, - // ), - // ); - // if (result.error != null) return; - // Pangea# + ); + if (result.error != null) return; setState(() { showEmojiPicker = false; selectedEvents.clear(); diff --git a/lib/pangea/events/utils/report_message.dart b/lib/pangea/events/utils/report_message.dart index 0492744f8..f3c5d17c7 100644 --- a/lib/pangea/events/utils/report_message.dart +++ b/lib/pangea/events/utils/report_message.dart @@ -3,8 +3,13 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/pages/chat/chat.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; +import 'package:fluffychat/widgets/adaptive_dialogs/show_modal_action_popup.dart'; +import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart'; +import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; Future getReportsDM(User teacher, Room space) async { @@ -18,7 +23,72 @@ Future getReportsDM(User teacher, Room space) async { return space.client.getRoomById(roomId)!; } -Future reportMessage( +void reportEvent( + Event event, + ChatController controller, + BuildContext context, +) async { + final score = await showModalActionPopup( + context: context, + title: L10n.of(context).reportMessage, + message: "Why do you want to report this message?", + cancelLabel: L10n.of(context).cancel, + actions: [ + AdaptiveModalAction( + value: 1, + label: L10n.of(context).offensive, + ), + AdaptiveModalAction( + value: 2, + label: "Translation problem", + ), + AdaptiveModalAction( + value: 3, + label: "Other", + ), + ], + ); + if (score == null) return; + + final reason = await showTextInputDialog( + context: context, + title: L10n.of(context).whyDoYouWantToReportThis, + okLabel: L10n.of(context).ok, + cancelLabel: L10n.of(context).cancel, + hintText: L10n.of(context).reason, + autoSubmit: true, + ); + if (reason == null || reason.isEmpty) return; + + if (score == 1) { + await showFutureLoadingDialog( + context: context, + future: () async => reportOffensiveMessage( + context, + event.room.id, + reason, + event.senderId, + event.content['body'].toString(), + ), + ); + controller.clearSelectedEvents(); + return; + } + + ErrorHandler.logError( + e: "User reported message", + data: { + "content": event.content['body'], + "eventID": event.eventId, + "roomID": event.room.id, + "userID": event.senderId, + "reason": reason, + }, + ); + controller.clearSelectedEvents(); +} + +Future reportOffensiveMessage( BuildContext context, String roomId, String reason, diff --git a/lib/pangea/toolbar/widgets/message_selection_overlay.dart b/lib/pangea/toolbar/widgets/message_selection_overlay.dart index 83550d70a..3c70104ea 100644 --- a/lib/pangea/toolbar/widgets/message_selection_overlay.dart +++ b/lib/pangea/toolbar/widgets/message_selection_overlay.dart @@ -1,7 +1,13 @@ import 'dart:async'; import 'dart:developer'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/scheduler.dart'; + import 'package:collection/collection.dart'; +import 'package:matrix/matrix.dart'; + import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pages/chat/chat.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; @@ -25,10 +31,6 @@ import 'package:fluffychat/pangea/toolbar/reading_assistance_input_row/morph_sel import 'package:fluffychat/pangea/toolbar/widgets/message_selection_positioner.dart'; import 'package:fluffychat/pangea/toolbar/widgets/reading_assistance_content.dart'; import 'package:fluffychat/widgets/matrix.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/scheduler.dart'; -import 'package:matrix/matrix.dart'; /// Controls data at the top level of the toolbar (mainly token / toolbar mode selection) class MessageSelectionOverlay extends StatefulWidget { diff --git a/lib/pangea/toolbar/widgets/overlay_header.dart b/lib/pangea/toolbar/widgets/overlay_header.dart index 27f701cd2..33edcb0a3 100644 --- a/lib/pangea/toolbar/widgets/overlay_header.dart +++ b/lib/pangea/toolbar/widgets/overlay_header.dart @@ -7,6 +7,7 @@ import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pages/chat/chat.dart'; import 'package:fluffychat/pangea/events/extensions/pangea_event_extension.dart'; +import 'package:fluffychat/pangea/events/utils/report_message.dart'; class OverlayHeader extends StatelessWidget { final ChatController controller; @@ -80,7 +81,11 @@ class OverlayHeader extends StatelessWidget { IconButton( icon: const Icon(Icons.shield_outlined), tooltip: L10n.of(context).reportMessage, - onPressed: controller.reportEventAction, + onPressed: () => reportEvent( + controller.selectedEvents.first, + controller, + context, + ), color: Theme.of(context).colorScheme.primary, ), if (controller.selectedEvents.length == 1) diff --git a/lib/pangea/toolbar/widgets/word_zoom/morphological_list_item.dart b/lib/pangea/toolbar/widgets/word_zoom/morphological_list_item.dart index 721ab83ab..845e14bde 100644 --- a/lib/pangea/toolbar/widgets/word_zoom/morphological_list_item.dart +++ b/lib/pangea/toolbar/widgets/word_zoom/morphological_list_item.dart @@ -1,3 +1,7 @@ +import 'package:flutter/material.dart'; + +import 'package:material_symbols_icons/symbols.dart'; + import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; import 'package:fluffychat/pangea/morphs/get_grammar_copy.dart'; import 'package:fluffychat/pangea/morphs/morph_features_enum.dart'; @@ -7,8 +11,6 @@ import 'package:fluffychat/pangea/toolbar/enums/message_mode_enum.dart'; import 'package:fluffychat/pangea/toolbar/reading_assistance_input_row/morph_selection.dart'; import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; import 'package:fluffychat/pangea/toolbar/widgets/practice_activity/word_zoom_activity_button.dart'; -import 'package:flutter/material.dart'; -import 'package:material_symbols_icons/symbols.dart'; class MorphologicalListItem extends StatelessWidget { final MorphFeaturesEnum morphFeature;