handling no tokens in pangea message event

pull/1011/head
William Jordan-Cooley 2 years ago
parent a9e5082bec
commit 695374ee46

@ -1,9 +1,9 @@
{ {
"dart.previewLsp": true, "dart.previewLsp": true,
"editor.codeActionsOnSave": { "editor.codeActionsOnSave": {
"source.fixAll": true, "source.fixAll": "explicit",
"source.organizeImports": true, "source.organizeImports": "explicit",
"source.sortMembers": false "source.sortMembers": "never"
}, },
"editor.formatOnSave": true "editor.formatOnSave": true
} }

@ -1,13 +1,7 @@
// Flutter imports: // Flutter imports:
import 'package:flutter/material.dart';
import 'package:badges/badges.dart'; import 'package:badges/badges.dart';
import 'package:desktop_drop/desktop_drop.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/app_config.dart';
import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/pages/chat/chat.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/connection_status_header.dart';
import 'package:fluffychat/widgets/matrix.dart'; import 'package:fluffychat/widgets/matrix.dart';
import 'package:fluffychat/widgets/unread_rooms_badge.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 '../../utils/stream_extension.dart';
import 'chat_emoji_picker.dart'; import 'chat_emoji_picker.dart';
import 'chat_input_row.dart'; import 'chat_input_row.dart';
@ -90,17 +89,17 @@ class ChatView extends StatelessWidget {
}, },
itemBuilder: (context) => [ itemBuilder: (context) => [
// #Pangea // #Pangea
// PopupMenuItem( PopupMenuItem(
// value: _EventContextAction.info, value: _EventContextAction.info,
// child: Row( child: Row(
// mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
// children: [ children: [
// const Icon(Icons.info_outlined), const Icon(Icons.info_outlined),
// const SizedBox(width: 12), const SizedBox(width: 12),
// Text(L10n.of(context)!.messageInfo), Text(L10n.of(context)!.messageInfo),
// ], ],
// ), ),
// ), ),
// Pangea# // Pangea#
if (controller.selectedEvents.single.status.isSent) if (controller.selectedEvents.single.status.isSent)
PopupMenuItem( PopupMenuItem(

@ -1,3 +1,5 @@
import 'dart:developer';
import 'package:collection/collection.dart'; import 'package:collection/collection.dart';
import 'package:fluffychat/pangea/constants/model_keys.dart'; import 'package:fluffychat/pangea/constants/model_keys.dart';
import 'package:fluffychat/pangea/constants/pangea_message_types.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/message_data_models.dart';
import 'package:fluffychat/pangea/models/pangea_representation_event.dart'; import 'package:fluffychat/pangea/models/pangea_representation_event.dart';
import 'package:fluffychat/pangea/utils/bot_name.dart'; import 'package:fluffychat/pangea/utils/bot_name.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:matrix/matrix.dart'; import 'package:matrix/matrix.dart';
@ -84,10 +87,7 @@ class PangeaMessageEvent {
_representations = []; _representations = [];
final bool latestHasTokens = if (_latestEdit.content[ModelKey.originalSent] != null) {
_latestEdit.content[ModelKey.tokensSent] != null;
if (_latestEdit.content[ModelKey.originalSent] != null && latestHasTokens) {
try { try {
_representations!.add( _representations!.add(
RepresentationEvent( RepresentationEvent(
@ -95,9 +95,12 @@ class PangeaMessageEvent {
_latestEdit.content[ModelKey.originalSent] _latestEdit.content[ModelKey.originalSent]
as Map<String, dynamic>, as Map<String, dynamic>,
), ),
tokens: PangeaMessageTokens.fromJson( tokens: _latestEdit.content[ModelKey.tokensSent] != null
_latestEdit.content[ModelKey.tokensSent] as Map<String, dynamic>, ? PangeaMessageTokens.fromJson(
), _latestEdit.content[ModelKey.tokensSent]
as Map<String, dynamic>,
)
: null,
choreo: _latestEdit.content[ModelKey.choreoRecord] != null choreo: _latestEdit.content[ModelKey.choreoRecord] != null
? ChoreoRecord.fromJson( ? ChoreoRecord.fromJson(
_latestEdit.content[ModelKey.choreoRecord] _latestEdit.content[ModelKey.choreoRecord]
@ -109,26 +112,37 @@ class PangeaMessageEvent {
); );
} catch (err, s) { } catch (err, s) {
ErrorHandler.logError( ErrorHandler.logError(
m: "error parsing originalSent",
e: err, e: err,
s: s, s: s,
); );
} }
} }
if (_latestEdit.content[ModelKey.originalWritten] != null && if (_latestEdit.content[ModelKey.originalWritten] != null) {
latestHasTokens) { try {
_representations!.add( _representations!.add(
RepresentationEvent( RepresentationEvent(
content: PangeaRepresentation.fromJson( content: PangeaRepresentation.fromJson(
_latestEdit.content[ModelKey.originalWritten] _latestEdit.content[ModelKey.originalWritten]
as Map<String, dynamic>, as Map<String, dynamic>,
), ),
tokens: PangeaMessageTokens.fromJson( tokens: _latestEdit.content[ModelKey.tokensWritten] != null
_latestEdit.content[ModelKey.tokensWritten] as Map<String, dynamic>, ? PangeaMessageTokens.fromJson(
_latestEdit.content[ModelKey.tokensWritten]
as Map<String, dynamic>,
)
: null,
timeline: timeline,
), ),
timeline: timeline, );
), } catch (err, s) {
); ErrorHandler.logError(
m: "error parsing originalWritten",
e: err,
s: s,
);
}
} }
_representations!.addAll( _representations!.addAll(
@ -174,6 +188,11 @@ class PangeaMessageEvent {
RepresentationEvent? rep = representationByLanguage(langCode); 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) { while ((isNew || eventId.contains("web")) && tries < 20) {
if (rep != null) return rep; if (rep != null) return rep;
await Future.delayed(const Duration(milliseconds: 500)); await Future.delayed(const Duration(milliseconds: 500));

@ -1,15 +1,14 @@
import 'dart:developer'; 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/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:matrix/matrix.dart'; import 'package:matrix/matrix.dart';
import 'package:sentry_flutter/sentry_flutter.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 '../../widgets/matrix.dart';
import '../constants/language_keys.dart'; import '../constants/language_keys.dart';
import '../constants/pangea_event_types.dart'; import '../constants/pangea_event_types.dart';
@ -70,8 +69,11 @@ class RepresentationEvent {
return null; return null;
} }
final Set<Event> tokenEvents = final Set<Event> tokenEvents = _event?.aggregatedEvents(
_event!.aggregatedEvents(timeline, PangeaEventTypes.tokens); timeline,
PangeaEventTypes.tokens,
) ??
{};
if (tokenEvents.isEmpty) return null; if (tokenEvents.isEmpty) return null;
@ -79,13 +81,13 @@ class RepresentationEvent {
debugger(when: kDebugMode); debugger(when: kDebugMode);
Sentry.addBreadcrumb( Sentry.addBreadcrumb(
Breadcrumb( Breadcrumb(
message: "Token events for representation ${_event!.eventId}: " message: "Token events for representation ${_event?.eventId}: "
"Content: ${tokenEvents.map((e) => e.content).toString()}" "Content: ${tokenEvents.map((e) => e.content).toString()}"
"Type: ${tokenEvents.map((e) => e.type).toString()}", "Type: ${tokenEvents.map((e) => e.type).toString()}",
), ),
); );
ErrorHandler.logError( 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, s: StackTrace.current,
); );
} }
@ -97,6 +99,7 @@ class RepresentationEvent {
Future<List<PangeaToken>?> tokensGlobal(BuildContext context) async { Future<List<PangeaToken>?> tokensGlobal(BuildContext context) async {
if (tokens != null) return tokens!; if (tokens != null) return tokens!;
if (_event == null) { if (_event == null) {
debugger(when: kDebugMode); debugger(when: kDebugMode);
ErrorHandler.logError( ErrorHandler.logError(
@ -141,16 +144,16 @@ class RepresentationEvent {
} }
final Set<Event> choreoMatrixEvents = final Set<Event> choreoMatrixEvents =
_event!.aggregatedEvents(timeline, PangeaEventTypes.choreoRecord); _event?.aggregatedEvents(timeline, PangeaEventTypes.choreoRecord) ?? {};
if (choreoMatrixEvents.isEmpty) return null; if (choreoMatrixEvents.isEmpty) return null;
if (choreoMatrixEvents.length > 1) { if (choreoMatrixEvents.length > 1) {
debugger(when: kDebugMode); debugger(when: kDebugMode);
ErrorHandler.logError( 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, s: StackTrace.current,
data: _event!.toJson(), data: _event?.toJson(),
); );
} }

@ -1,14 +1,12 @@
import 'dart:async'; import 'dart:async';
import 'package:fluffychat/pangea/config/environment.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:http/http.dart' as http; import 'package:http/http.dart' as http;
import 'package:sentry_flutter/sentry_flutter.dart'; import 'package:sentry_flutter/sentry_flutter.dart';
import 'package:fluffychat/pangea/config/environment.dart';
class ErrorHandler { class ErrorHandler {
ErrorHandler(); ErrorHandler();
@ -68,7 +66,8 @@ class ErrorHandler {
String? m, String? m,
Map<String, dynamic>? data, Map<String, dynamic>? data,
}) async { }) 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) { if (data != null) {
Sentry.addBreadcrumb(Breadcrumb.fromJson(data)); Sentry.addBreadcrumb(Breadcrumb.fromJson(data));
} }

Loading…
Cancel
Save