From 4597ac29b85226f74974c5a4e3f2b2485b1fb8a7 Mon Sep 17 00:00:00 2001 From: ggurdin Date: Tue, 5 Dec 2023 14:04:18 -0500 Subject: [PATCH 1/6] ensure that all events in representation list have either a non-null event or non-null tokens --- lib/pangea/models/pangea_message_event.dart | 35 ++++++++++----------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/lib/pangea/models/pangea_message_event.dart b/lib/pangea/models/pangea_message_event.dart index b56402c08..d515c046f 100644 --- a/lib/pangea/models/pangea_message_event.dart +++ b/lib/pangea/models/pangea_message_event.dart @@ -1,17 +1,16 @@ -import 'package:flutter/material.dart'; - import 'package:collection/collection.dart'; -import 'package:matrix/matrix.dart'; - +import 'package:fluffychat/pangea/constants/model_keys.dart'; import 'package:fluffychat/pangea/constants/pangea_message_types.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; import 'package:fluffychat/pangea/models/choreo_record.dart'; import 'package:fluffychat/pangea/models/message_data_models.dart'; import 'package:fluffychat/pangea/models/pangea_representation_event.dart'; import 'package:fluffychat/pangea/utils/bot_name.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; + import '../../widgets/matrix.dart'; import '../constants/language_keys.dart'; -import '../constants/model_keys.dart'; import '../constants/pangea_event_types.dart'; import '../enum/use_type.dart'; import '../utils/error_handler.dart'; @@ -85,7 +84,10 @@ class PangeaMessageEvent { _representations = []; - if (_latestEdit.content[ModelKey.originalSent] != null) { + final bool latestHasTokens = + _latestEdit.content[ModelKey.tokensSent] != null; + + if (_latestEdit.content[ModelKey.originalSent] != null && latestHasTokens) { try { _representations!.add( RepresentationEvent( @@ -93,12 +95,9 @@ class PangeaMessageEvent { _latestEdit.content[ModelKey.originalSent] as Map, ), - tokens: _latestEdit.content[ModelKey.tokensSent] != null - ? PangeaMessageTokens.fromJson( - _latestEdit.content[ModelKey.tokensSent] - as Map, - ) - : null, + tokens: PangeaMessageTokens.fromJson( + _latestEdit.content[ModelKey.tokensSent] as Map, + ), choreo: _latestEdit.content[ModelKey.choreoRecord] != null ? ChoreoRecord.fromJson( _latestEdit.content[ModelKey.choreoRecord] @@ -116,19 +115,17 @@ class PangeaMessageEvent { } } - if (_latestEdit.content[ModelKey.originalWritten] != null) { + if (_latestEdit.content[ModelKey.originalWritten] != null && + latestHasTokens) { _representations!.add( RepresentationEvent( content: PangeaRepresentation.fromJson( _latestEdit.content[ModelKey.originalWritten] as Map, ), - tokens: _latestEdit.content[ModelKey.tokensWritten] != null - ? PangeaMessageTokens.fromJson( - _latestEdit.content[ModelKey.tokensWritten] - as Map, - ) - : null, + tokens: PangeaMessageTokens.fromJson( + _latestEdit.content[ModelKey.tokensWritten] as Map, + ), timeline: timeline, ), ); From fac1c385de4359978188dc088efd30a322f6a744 Mon Sep 17 00:00:00 2001 From: ggurdin Date: Tue, 19 Dec 2023 12:37:25 -0500 Subject: [PATCH 2/6] small fixes for sentry errors --- lib/config/routes.dart | 19 +++++++++---- lib/pages/chat_list/chat_list_body.dart | 38 +++++++++---------------- lib/pages/chat_list/start_chat_fab.dart | 12 ++++---- lib/widgets/matrix.dart | 24 +++++++++------- 4 files changed, 45 insertions(+), 48 deletions(-) diff --git a/lib/config/routes.dart b/lib/config/routes.dart index ff2b0b55e..3f7a39d9d 100644 --- a/lib/config/routes.dart +++ b/lib/config/routes.dart @@ -1,9 +1,5 @@ import 'dart:async'; -import 'package:flutter/cupertino.dart'; - -import 'package:go_router/go_router.dart'; - import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/pages/archive/archive.dart'; import 'package:fluffychat/pages/chat/chat.dart'; @@ -42,6 +38,9 @@ import 'package:fluffychat/widgets/layouts/empty_page.dart'; import 'package:fluffychat/widgets/layouts/two_column_layout.dart'; import 'package:fluffychat/widgets/log_view.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:go_router/go_router.dart'; + import '../pangea/pages/analytics/class_analytics/class_analytics.dart'; import '../pangea/pages/analytics/class_list/class_list.dart'; @@ -252,13 +251,23 @@ abstract class AppRoutes { GoRoute( // #Pangea // path: 'newgroup', - path: 'newgroup/:spaceid', + path: 'newgroup', // Pangea# pageBuilder: (context, state) => defaultPageBuilder( context, const NewGroup(), ), redirect: loggedOutRedirect, + routes: [ + GoRoute( + path: ':spaceid', + pageBuilder: (context, state) => defaultPageBuilder( + context, + const NewGroup(), + ), + redirect: loggedOutRedirect, + ), + ], ), GoRoute( path: 'newspace', diff --git a/lib/pages/chat_list/chat_list_body.dart b/lib/pages/chat_list/chat_list_body.dart index 7a47424a9..531049b90 100644 --- a/lib/pages/chat_list/chat_list_body.dart +++ b/lib/pages/chat_list/chat_list_body.dart @@ -1,9 +1,4 @@ -import 'package:flutter/material.dart'; - import 'package:animations/animations.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/pages/chat_list/chat_list.dart'; import 'package:fluffychat/pages/chat_list/chat_list_item.dart'; import 'package:fluffychat/pages/chat_list/search_title.dart'; @@ -15,6 +10,10 @@ import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import 'package:fluffychat/utils/stream_extension.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/public_room_bottom_sheet.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_gen/gen_l10n/l10n.dart'; +import 'package:matrix/matrix.dart'; + import '../../config/themes.dart'; import '../../widgets/connection_status_header.dart'; import '../../widgets/matrix.dart'; @@ -196,27 +195,16 @@ class ChatListViewBody extends StatelessWidget { if (client.prevBatch != null && rooms.isEmpty && !controller.isSearchMode) ...[ - Padding( - padding: const EdgeInsets.all(32.0), - // #Pangea - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Image.asset( - 'private_chat_wallpaper.png', - height: 256, - ), - ], - ), - // child: Icon( - // CupertinoIcons.chat_bubble_2, - // size: 128, - // color: - // Theme.of(context).colorScheme.onInverseSurface, - // ), - // Pangea# - ), // #Pangea + // Padding( + // padding: const EdgeInsets.all(32.0), + // child: Icon( + // CupertinoIcons.chat_bubble_2, + // size: 128, + // color: + // Theme.of(context).colorScheme.onInverseSurface, + // ), + // ), Center( child: ChatListBodyStartText( controller: controller, diff --git a/lib/pages/chat_list/start_chat_fab.dart b/lib/pages/chat_list/start_chat_fab.dart index 01f0d4165..9daa4c4d7 100644 --- a/lib/pages/chat_list/start_chat_fab.dart +++ b/lib/pages/chat_list/start_chat_fab.dart @@ -1,12 +1,10 @@ import 'dart:core'; -import 'package:flutter/material.dart'; - -import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:go_router/go_router.dart'; - import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/pages/chat_list/chat_list.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_gen/gen_l10n/l10n.dart'; +import 'package:go_router/go_router.dart'; class StartChatFloatingActionButton extends StatelessWidget { final ActiveFilter activeFilter; @@ -29,7 +27,7 @@ class StartChatFloatingActionButton extends StatelessWidget { void _onPressed(BuildContext context) { //#Pangea if (controller.activeSpaceId != null) { - context.go('/rooms/newgroup/${controller.activeSpaceId}'); + context.go('/rooms/newgroup/${controller.activeSpaceId ?? ''}'); return; } //Pangea# @@ -43,7 +41,7 @@ class StartChatFloatingActionButton extends StatelessWidget { case ActiveFilter.groups: // #Pangea // context.go('/rooms/newgroup'); - context.go('/rooms/newgroup/${controller.activeSpaceId}'); + context.go('/rooms/newgroup/${controller.activeSpaceId ?? ''}'); // Pangea# break; case ActiveFilter.spaces: diff --git a/lib/widgets/matrix.dart b/lib/widgets/matrix.dart index eb80a052f..aba254349 100644 --- a/lib/widgets/matrix.dart +++ b/lib/widgets/matrix.dart @@ -2,12 +2,19 @@ import 'dart:async'; import 'dart:convert'; import 'dart:io'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - import 'package:adaptive_dialog/adaptive_dialog.dart'; import 'package:collection/collection.dart'; import 'package:desktop_notifications/desktop_notifications.dart'; +import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/utils/any_state_holder.dart'; +import 'package:fluffychat/utils/client_manager.dart'; +import 'package:fluffychat/utils/localized_exception_extension.dart'; +import 'package:fluffychat/utils/platform_infos.dart'; +import 'package:fluffychat/utils/uia_request_manager.dart'; +import 'package:fluffychat/utils/voip_plugin.dart'; +import 'package:fluffychat/widgets/fluffy_chat_app.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:http/http.dart' as http; @@ -19,14 +26,6 @@ import 'package:shared_preferences/shared_preferences.dart'; import 'package:universal_html/html.dart' as html; import 'package:url_launcher/url_launcher_string.dart'; -import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/utils/any_state_holder.dart'; -import 'package:fluffychat/utils/client_manager.dart'; -import 'package:fluffychat/utils/localized_exception_extension.dart'; -import 'package:fluffychat/utils/platform_infos.dart'; -import 'package:fluffychat/utils/uia_request_manager.dart'; -import 'package:fluffychat/utils/voip_plugin.dart'; -import 'package:fluffychat/widgets/fluffy_chat_app.dart'; import '../config/app_config.dart'; import '../config/setting_keys.dart'; import '../pages/key_verification/key_verification_dialog.dart'; @@ -409,6 +408,9 @@ class MatrixState extends State with WidgetsBindingObserver { this, onFcmError: (errorMsg, {Uri? link}) async { final result = await showOkCancelAlertDialog( + // #Pangea + useRootNavigator: false, + // Pangea# barrierDismissible: true, context: context, title: L10n.of(context)!.pushNotificationsNotAvailable, From bc631b68c98aa8f0afaa552432f572df6d9320a7 Mon Sep 17 00:00:00 2001 From: ggurdin Date: Wed, 20 Dec 2023 14:14:45 -0500 Subject: [PATCH 3/6] fix for int is not a subtype of double error --- lib/pangea/models/it_response_model.dart | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/lib/pangea/models/it_response_model.dart b/lib/pangea/models/it_response_model.dart index 86a9c7a4c..c730a90e8 100644 --- a/lib/pangea/models/it_response_model.dart +++ b/lib/pangea/models/it_response_model.dart @@ -1,11 +1,10 @@ -import 'package:flutter/material.dart'; - import 'package:collection/collection.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; - import 'package:fluffychat/pangea/constants/choreo_constants.dart'; import 'package:fluffychat/pangea/constants/model_keys.dart'; import 'package:fluffychat/pangea/extensions/my_list_extionsion.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_gen/gen_l10n/l10n.dart'; + import 'lemma.dart'; class ITResponseModel { @@ -114,7 +113,7 @@ class Continuance { .cast() : []; return Continuance( - probability: json['probability'], + probability: json['probability'] as double, level: json['level'], text: json['text'], description: json['description'] ?? "", From d703fea331ead386904cf054cf7b8bd347a18b16 Mon Sep 17 00:00:00 2001 From: ggurdin Date: Wed, 20 Dec 2023 16:50:34 -0500 Subject: [PATCH 4/6] fix for room is not a space error --- .../extensions/pangea_room_extension.dart | 40 +++++++++---------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/lib/pangea/extensions/pangea_room_extension.dart b/lib/pangea/extensions/pangea_room_extension.dart index f599a5c64..ec22d4246 100644 --- a/lib/pangea/extensions/pangea_room_extension.dart +++ b/lib/pangea/extensions/pangea_room_extension.dart @@ -1,13 +1,6 @@ import 'dart:async'; import 'dart:developer'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; -import 'package:matrix/src/utils/space_child.dart'; -import 'package:sentry_flutter/sentry_flutter.dart'; - import 'package:fluffychat/pangea/constants/class_default_values.dart'; import 'package:fluffychat/pangea/constants/model_keys.dart'; import 'package:fluffychat/pangea/constants/pangea_room_types.dart'; @@ -15,6 +8,12 @@ import 'package:fluffychat/pangea/models/class_model.dart'; import 'package:fluffychat/pangea/models/pangea_message_event.dart'; import 'package:fluffychat/pangea/utils/bot_name.dart'; import 'package:fluffychat/pangea/utils/error_handler.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; +import 'package:matrix/src/utils/space_child.dart'; +import 'package:sentry_flutter/sentry_flutter.dart'; + import '../../config/app_config.dart'; import '../constants/pangea_event_types.dart'; import '../enum/construct_type_enum.dart'; @@ -150,20 +149,19 @@ extension PangeaRoom on Room { bool isChild(String roomId) => isSpace && spaceChildren.any((room) => room.roomId == roomId); - bool isFirstOrSecondChild(String roomId) => - isSpace && spaceChildren.any((room) => room.roomId == roomId) || - spaceChildren - .where( - (sc) => sc.roomId != null, - ) - .map( - (sc) => client.getRoomById(sc.roomId!), - ) - .any( - (room) => - room != null && - room.spaceChildren.any((room) => room.roomId == roomId), - ); + bool isFirstOrSecondChild(String roomId) { + return isSpace && + (spaceChildren.any((room) => room.roomId == roomId) || + spaceChildren + .where((sc) => sc.roomId != null) + .map((sc) => client.getRoomById(sc.roomId!)) + .any( + (room) => + room != null && + room.isSpace && + room.spaceChildren.any((room) => room.roomId == roomId), + )); + } //note this only will return rooms that the user has joined or been invited to List get childrenAndGrandChildren { From 14803aced642f9a7854aa092fdc18b8657bd9f46 Mon Sep 17 00:00:00 2001 From: ggurdin Date: Fri, 29 Dec 2023 11:46:12 -0500 Subject: [PATCH 5/6] removed error logging for chat list longer then spacechildren --- lib/pangea/extensions/pangea_room_extension.dart | 7 ------- 1 file changed, 7 deletions(-) diff --git a/lib/pangea/extensions/pangea_room_extension.dart b/lib/pangea/extensions/pangea_room_extension.dart index ec22d4246..b0d2d1bc2 100644 --- a/lib/pangea/extensions/pangea_room_extension.dart +++ b/lib/pangea/extensions/pangea_room_extension.dart @@ -511,13 +511,6 @@ extension PangeaRoom on Room { .where((element) => !element.isSpace) .toList(); - if (spaceChildren.length != spaceChats.length) { - // debugger(when: kDebugMode); - ErrorHandler.logError( - m: "spaceChildren.length > chats.length in updateMyLearningAnalyticsForClass", - ); - } - final List>> msgListFutures = []; for (final chat in spaceChats) { msgListFutures.add(chat._messageListForChat); From 700fc836762a13bb03c9a1a7448e8c0ccf87a075 Mon Sep 17 00:00:00 2001 From: ggurdin Date: Fri, 29 Dec 2023 12:20:15 -0500 Subject: [PATCH 6/6] removed error logging for cancelled purchases, added more descriptive logging for other purchase errors --- .../controllers/subscription_controller.dart | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/lib/pangea/controllers/subscription_controller.dart b/lib/pangea/controllers/subscription_controller.dart index f53a34e1b..106333880 100644 --- a/lib/pangea/controllers/subscription_controller.dart +++ b/lib/pangea/controllers/subscription_controller.dart @@ -1,15 +1,7 @@ import 'dart:async'; import 'dart:convert'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - import 'package:adaptive_dialog/adaptive_dialog.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:http/http.dart'; -import 'package:purchases_flutter/purchases_flutter.dart'; -import 'package:url_launcher/url_launcher_string.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pangea/constants/local.key.dart'; import 'package:fluffychat/pangea/controllers/base_controller.dart'; @@ -23,6 +15,13 @@ import 'package:fluffychat/pangea/utils/error_handler.dart'; import 'package:fluffychat/pangea/utils/firebase_analytics.dart'; import 'package:fluffychat/pangea/widgets/subscription/subscription_paywall.dart'; import 'package:fluffychat/utils/platform_infos.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_gen/gen_l10n/l10n.dart'; +import 'package:http/http.dart'; +import 'package:purchases_flutter/purchases_flutter.dart'; +import 'package:url_launcher/url_launcher_string.dart'; class SubscriptionController extends BaseController { late PangeaController _pangeaController; @@ -242,8 +241,15 @@ class SubscriptionController extends BaseController { await Purchases.purchasePackage(selectedSubscription.package!); GoogleAnalytics.updateUserSubscriptionStatus(true); } catch (err) { + final errCode = PurchasesErrorHelper.getErrorCode( + err as PlatformException, + ); + if (errCode == PurchasesErrorCode.purchaseCancelledError) { + debugPrint("User cancelled purchase"); + return; + } ErrorHandler.logError( - m: "Failed to purchase revenuecat package for user ${_pangeaController.matrixState.client.userID}", + m: "Failed to purchase revenuecat package for user ${_pangeaController.matrixState.client.userID} with error code $errCode", s: StackTrace.current, ); return;