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/pangea/models/pangea_message_event.dart b/lib/pangea/models/pangea_message_event.dart index d515c046f..aa4b745cd 100644 --- a/lib/pangea/models/pangea_message_event.dart +++ b/lib/pangea/models/pangea_message_event.dart @@ -84,10 +84,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 +92,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 +109,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 +185,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..64b16fa79 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'; @@ -62,16 +61,19 @@ class RepresentationEvent { if (_tokens != null) return _tokens!.tokens; if (_event == null) { - debugger(when: kDebugMode); - ErrorHandler.logError( - m: '_event and _tokens both null', - s: StackTrace.current, - ); + // debugger(when: kDebugMode); + // ErrorHandler.logError( + // m: '_event and _tokens both null', + // s: StackTrace.current, + // ); 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,12 +99,13 @@ class RepresentationEvent { Future?> tokensGlobal(BuildContext context) async { if (tokens != null) return tokens!; + if (_event == null) { - debugger(when: kDebugMode); - ErrorHandler.logError( - m: '_event and _tokens both null', - s: StackTrace.current, - ); + // debugger(when: kDebugMode); + // ErrorHandler.logError( + // m: '_event and _tokens both null', + // s: StackTrace.current, + // ); return null; } @@ -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)); }