From 695374ee46be9e7e7478f5923dc3753cac9801f7 Mon Sep 17 00:00:00 2001 From: William Jordan-Cooley Date: Thu, 18 Jan 2024 08:13:10 -0500 Subject: [PATCH] handling no tokens in pangea message event --- .vscode/settings.json | 6 +- lib/pages/chat/chat_view.dart | 33 +++++------ lib/pangea/models/pangea_message_event.dart | 59 ++++++++++++------- .../models/pangea_representation_event.dart | 27 +++++---- lib/pangea/utils/error_handler.dart | 7 +-- 5 files changed, 76 insertions(+), 56 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index dd15e28ee..59cdec5c9 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,9 +1,9 @@ { "dart.previewLsp": true, "editor.codeActionsOnSave": { - "source.fixAll": true, - "source.organizeImports": true, - "source.sortMembers": false + "source.fixAll": "explicit", + "source.organizeImports": "explicit", + "source.sortMembers": "never" }, "editor.formatOnSave": true } \ No newline at end of file diff --git a/lib/pages/chat/chat_view.dart b/lib/pages/chat/chat_view.dart index 149055eb0..f801df69e 100644 --- a/lib/pages/chat/chat_view.dart +++ b/lib/pages/chat/chat_view.dart @@ -1,13 +1,7 @@ // Flutter imports: -import 'package:flutter/material.dart'; - import 'package:badges/badges.dart'; import 'package:desktop_drop/desktop_drop.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:future_loading_dialog/future_loading_dialog.dart'; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/pages/chat/chat.dart'; @@ -26,6 +20,11 @@ import 'package:fluffychat/widgets/chat_settings_popup_menu.dart'; import 'package:fluffychat/widgets/connection_status_header.dart'; import 'package:fluffychat/widgets/matrix.dart'; import 'package:fluffychat/widgets/unread_rooms_badge.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:matrix/matrix.dart'; + import '../../utils/stream_extension.dart'; import 'chat_emoji_picker.dart'; import 'chat_input_row.dart'; @@ -90,17 +89,17 @@ class ChatView extends StatelessWidget { }, itemBuilder: (context) => [ // #Pangea - // PopupMenuItem( - // value: _EventContextAction.info, - // child: Row( - // mainAxisSize: MainAxisSize.min, - // children: [ - // const Icon(Icons.info_outlined), - // const SizedBox(width: 12), - // Text(L10n.of(context)!.messageInfo), - // ], - // ), - // ), + PopupMenuItem( + value: _EventContextAction.info, + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + const Icon(Icons.info_outlined), + const SizedBox(width: 12), + Text(L10n.of(context)!.messageInfo), + ], + ), + ), // Pangea# if (controller.selectedEvents.single.status.isSent) PopupMenuItem( diff --git a/lib/pangea/models/pangea_message_event.dart b/lib/pangea/models/pangea_message_event.dart index d515c046f..9a8a45d44 100644 --- a/lib/pangea/models/pangea_message_event.dart +++ b/lib/pangea/models/pangea_message_event.dart @@ -1,3 +1,5 @@ +import 'dart:developer'; + import 'package:collection/collection.dart'; import 'package:fluffychat/pangea/constants/model_keys.dart'; import 'package:fluffychat/pangea/constants/pangea_message_types.dart'; @@ -6,6 +8,7 @@ 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/foundation.dart'; import 'package:flutter/material.dart'; import 'package:matrix/matrix.dart'; @@ -84,10 +87,7 @@ class PangeaMessageEvent { _representations = []; - final bool latestHasTokens = - _latestEdit.content[ModelKey.tokensSent] != null; - - if (_latestEdit.content[ModelKey.originalSent] != null && latestHasTokens) { + if (_latestEdit.content[ModelKey.originalSent] != null) { try { _representations!.add( RepresentationEvent( @@ -95,9 +95,12 @@ class PangeaMessageEvent { _latestEdit.content[ModelKey.originalSent] as Map, ), - tokens: PangeaMessageTokens.fromJson( - _latestEdit.content[ModelKey.tokensSent] as Map, - ), + tokens: _latestEdit.content[ModelKey.tokensSent] != null + ? PangeaMessageTokens.fromJson( + _latestEdit.content[ModelKey.tokensSent] + as Map, + ) + : null, choreo: _latestEdit.content[ModelKey.choreoRecord] != null ? ChoreoRecord.fromJson( _latestEdit.content[ModelKey.choreoRecord] @@ -109,26 +112,37 @@ class PangeaMessageEvent { ); } catch (err, s) { ErrorHandler.logError( + m: "error parsing originalSent", e: err, s: s, ); } } - if (_latestEdit.content[ModelKey.originalWritten] != null && - latestHasTokens) { - _representations!.add( - RepresentationEvent( - content: PangeaRepresentation.fromJson( - _latestEdit.content[ModelKey.originalWritten] - as Map, - ), - tokens: PangeaMessageTokens.fromJson( - _latestEdit.content[ModelKey.tokensWritten] as Map, + if (_latestEdit.content[ModelKey.originalWritten] != null) { + try { + _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, + timeline: timeline, ), - timeline: timeline, - ), - ); + ); + } catch (err, s) { + ErrorHandler.logError( + m: "error parsing originalWritten", + e: err, + s: s, + ); + } } _representations!.addAll( @@ -174,6 +188,11 @@ class PangeaMessageEvent { RepresentationEvent? rep = representationByLanguage(langCode); + //if event is less than 1 minute old, then print new event + if (isNew) { + debugger(when: kDebugMode); + } + while ((isNew || eventId.contains("web")) && tries < 20) { if (rep != null) return rep; await Future.delayed(const Duration(milliseconds: 500)); diff --git a/lib/pangea/models/pangea_representation_event.dart b/lib/pangea/models/pangea_representation_event.dart index 49e0f9358..b43979c45 100644 --- a/lib/pangea/models/pangea_representation_event.dart +++ b/lib/pangea/models/pangea_representation_event.dart @@ -1,15 +1,14 @@ import 'dart:developer'; +import 'package:fluffychat/pangea/extensions/pangea_event_extension.dart'; +import 'package:fluffychat/pangea/models/pangea_choreo_event.dart'; +import 'package:fluffychat/pangea/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/repo/tokens_repo.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; - import 'package:matrix/matrix.dart'; import 'package:sentry_flutter/sentry_flutter.dart'; -import 'package:fluffychat/pangea/extensions/pangea_event_extension.dart'; -import 'package:fluffychat/pangea/models/pangea_choreo_event.dart'; -import 'package:fluffychat/pangea/models/pangea_token_model.dart'; -import 'package:fluffychat/pangea/repo/tokens_repo.dart'; import '../../widgets/matrix.dart'; import '../constants/language_keys.dart'; import '../constants/pangea_event_types.dart'; @@ -70,8 +69,11 @@ class RepresentationEvent { return null; } - final Set tokenEvents = - _event!.aggregatedEvents(timeline, PangeaEventTypes.tokens); + final Set tokenEvents = _event?.aggregatedEvents( + timeline, + PangeaEventTypes.tokens, + ) ?? + {}; if (tokenEvents.isEmpty) return null; @@ -79,13 +81,13 @@ class RepresentationEvent { debugger(when: kDebugMode); Sentry.addBreadcrumb( Breadcrumb( - message: "Token events for representation ${_event!.eventId}: " + message: "Token events for representation ${_event?.eventId}: " "Content: ${tokenEvents.map((e) => e.content).toString()}" "Type: ${tokenEvents.map((e) => e.type).toString()}", ), ); ErrorHandler.logError( - m: 'should not have more than one tokenEvent per representation ${_event!.eventId}', + m: 'should not have more than one tokenEvent per representation ${_event?.eventId}', s: StackTrace.current, ); } @@ -97,6 +99,7 @@ class RepresentationEvent { Future?> tokensGlobal(BuildContext context) async { if (tokens != null) return tokens!; + if (_event == null) { debugger(when: kDebugMode); ErrorHandler.logError( @@ -141,16 +144,16 @@ class RepresentationEvent { } final Set choreoMatrixEvents = - _event!.aggregatedEvents(timeline, PangeaEventTypes.choreoRecord); + _event?.aggregatedEvents(timeline, PangeaEventTypes.choreoRecord) ?? {}; if (choreoMatrixEvents.isEmpty) return null; if (choreoMatrixEvents.length > 1) { debugger(when: kDebugMode); ErrorHandler.logError( - m: 'should not have more than one choreoEvent per representation ${_event!.eventId}', + m: 'should not have more than one choreoEvent per representation ${_event?.eventId}', s: StackTrace.current, - data: _event!.toJson(), + data: _event?.toJson(), ); } diff --git a/lib/pangea/utils/error_handler.dart b/lib/pangea/utils/error_handler.dart index 7784b1614..874ad4170 100644 --- a/lib/pangea/utils/error_handler.dart +++ b/lib/pangea/utils/error_handler.dart @@ -1,14 +1,12 @@ import 'dart:async'; +import 'package:fluffychat/pangea/config/environment.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; - import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:http/http.dart' as http; import 'package:sentry_flutter/sentry_flutter.dart'; -import 'package:fluffychat/pangea/config/environment.dart'; - class ErrorHandler { ErrorHandler(); @@ -68,7 +66,8 @@ class ErrorHandler { String? m, Map? data, }) async { - if ((e ?? m) != null) debugPrint("error: ${e?.toString() ?? m}"); + if (m != null) debugPrint("error message: $m"); + if ((e ?? m) != null) debugPrint("error to string: ${e?.toString() ?? m}"); if (data != null) { Sentry.addBreadcrumb(Breadcrumb.fromJson(data)); }