From ff0ab7e00b7fea409805a4eda8503a565b4ba7cb Mon Sep 17 00:00:00 2001 From: ggurdin <46800240+ggurdin@users.noreply.github.com> Date: Thu, 21 Nov 2024 09:34:27 -0500 Subject: [PATCH] =?UTF-8?q?call=20async=20version=20of=20teachers=20in=20i?= =?UTF-8?q?nviteSpaceTeachersToAnalyticsRoom=20=E2=80=A6=20(#1082)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * call async version of teachers in inviteSpaceTeachersToAnalyticsRoom to ensure teachers aren't double invited to analytics rooms * log breadcrumb on error getting message offset * better error logging for activity fromJSON method --- .../room_analytics_extension.dart | 2 +- .../models/analytics/construct_list_model.dart | 17 ++++++++++------- .../message_activity_request.dart | 11 +++++++++++ .../widgets/chat/message_selection_overlay.dart | 5 +++-- 4 files changed, 25 insertions(+), 10 deletions(-) diff --git a/lib/pangea/extensions/pangea_room_extension/room_analytics_extension.dart b/lib/pangea/extensions/pangea_room_extension/room_analytics_extension.dart index b0224f929..a9a258903 100644 --- a/lib/pangea/extensions/pangea_room_extension/room_analytics_extension.dart +++ b/lib/pangea/extensions/pangea_room_extension/room_analytics_extension.dart @@ -100,7 +100,7 @@ extension AnalyticsRoomExtension on Room { } final List participants = analyticsRoom.getParticipants(); - final List uninvitedTeachers = teachersLocal + final List uninvitedTeachers = (await teachers) .where((teacher) => !participants.contains(teacher)) .toList(); diff --git a/lib/pangea/models/analytics/construct_list_model.dart b/lib/pangea/models/analytics/construct_list_model.dart index 93277b7be..88e817c5e 100644 --- a/lib/pangea/models/analytics/construct_list_model.dart +++ b/lib/pangea/models/analytics/construct_list_model.dart @@ -6,6 +6,7 @@ import 'package:fluffychat/pangea/models/analytics/construct_use_model.dart'; import 'package:fluffychat/pangea/models/analytics/constructs_model.dart'; import 'package:fluffychat/pangea/models/practice_activities.dart/practice_activity_model.dart'; import 'package:fluffychat/pangea/utils/error_handler.dart'; +import 'package:sentry_flutter/sentry_flutter.dart'; /// A wrapper around a list of [OneConstructUse]s, used to simplify /// the process of filtering / sorting / displaying the events. @@ -145,14 +146,16 @@ class ConstructListModel { level = levelCalculation.floor(); } else { level = 0; - ErrorHandler.logError( - e: "Calculated level in Nan or Infinity", - data: { - "totalXP": totalXP, - "prevXP": prevXP, - "level": levelCalculation, - }, + Sentry.addBreadcrumb( + Breadcrumb( + data: { + "totalXP": totalXP, + "prevXP": prevXP, + "level": levelCalculation, + }, + ), ); + ErrorHandler.logError(e: "Calculated level in Nan or Infinity"); } } diff --git a/lib/pangea/models/practice_activities.dart/message_activity_request.dart b/lib/pangea/models/practice_activities.dart/message_activity_request.dart index c920aba0b..418d7f229 100644 --- a/lib/pangea/models/practice_activities.dart/message_activity_request.dart +++ b/lib/pangea/models/practice_activities.dart/message_activity_request.dart @@ -2,6 +2,7 @@ import 'package:collection/collection.dart'; import 'package:fluffychat/pangea/enum/activity_type_enum.dart'; import 'package:fluffychat/pangea/models/pangea_token_model.dart'; import 'package:fluffychat/pangea/models/practice_activities.dart/practice_activity_model.dart'; +import 'package:sentry_flutter/sentry_flutter.dart'; // includes feedback text and the bad activity model class ActivityQualityFeedback { @@ -118,6 +119,16 @@ class MessageActivityResponse { }); factory MessageActivityResponse.fromJson(Map json) { + if (!json.containsKey('activity')) { + Sentry.addBreadcrumb(Breadcrumb(data: {"json": json})); + throw Exception('Activity not found in message activity response'); + } + + if (json['activity'] is! Map) { + Sentry.addBreadcrumb(Breadcrumb(data: {"json": json})); + throw Exception('Activity is not a map in message activity response'); + } + return MessageActivityResponse( activity: PracticeActivityModel.fromJson( json['activity'] as Map, diff --git a/lib/pangea/widgets/chat/message_selection_overlay.dart b/lib/pangea/widgets/chat/message_selection_overlay.dart index 6de363c7b..46813aa4b 100644 --- a/lib/pangea/widgets/chat/message_selection_overlay.dart +++ b/lib/pangea/widgets/chat/message_selection_overlay.dart @@ -26,6 +26,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; import 'package:matrix/matrix.dart'; +import 'package:sentry_flutter/sentry_flutter.dart'; class MessageSelectionOverlay extends StatefulWidget { final ChatController chatController; @@ -485,8 +486,8 @@ class MessageOverlayController extends State try { return _messageRenderBox?.localToGlobal(Offset.zero); - } catch (e, s) { - ErrorHandler.logError(e: "Error getting message offset: $e", s: s); + } catch (e) { + Sentry.addBreadcrumb(Breadcrumb(message: "Error getting message offset")); return null; } }