From 54d63b1a4f133c3fb5acf7bd52e47d82774456ad Mon Sep 17 00:00:00 2001 From: Kelrap Date: Tue, 13 Aug 2024 10:39:30 -0400 Subject: [PATCH] Fix audio errors --- .../controllers/choreographer.dart | 58 +++++++++++-------- lib/pangea/repo/igc_repo.dart | 6 +- 2 files changed, 37 insertions(+), 27 deletions(-) diff --git a/lib/pangea/choreographer/controllers/choreographer.dart b/lib/pangea/choreographer/controllers/choreographer.dart index c462ff3b4..bff53890a 100644 --- a/lib/pangea/choreographer/controllers/choreographer.dart +++ b/lib/pangea/choreographer/controllers/choreographer.dart @@ -19,6 +19,7 @@ import 'package:fluffychat/pangea/utils/any_state_holder.dart'; import 'package:fluffychat/pangea/utils/error_handler.dart'; import 'package:fluffychat/pangea/utils/overlay.dart'; import 'package:fluffychat/pangea/widgets/igc/paywall_card.dart'; +import 'package:fluffychat/utils/matrix_sdk_extensions/filtered_timeline_extension.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:matrix/matrix.dart'; @@ -71,38 +72,47 @@ class Choreographer { List prevMessages() { const int howFarBack = 5; - final List events = chatController.timeline?.events + final List eventList = chatController.timeline?.events .where( (e) => - e.messageType == MessageTypes.Text || - e.messageType == MessageTypes.Audio, + e.isVisibleInGui && + (e.messageType == MessageTypes.Text || + e.messageType == MessageTypes.Audio) && + e.status.isSent && + e.type.equals('m.room.message'), ) .toList() ?? []; - // Sort from most recent to least - events.sort( - (a, b) => b.originServerTs.compareTo(a.originServerTs), - ); final List messages = []; - for (final Event event in events) { - final Map? content = - (event.messageType == MessageTypes.Text) - ? event.content - : (event as PangeaMessageEvent) - .getSpeechToTextLocalOnly(l1LangCode, l2LangCode) - ?.toJson(); - if (content != null) { - messages.add( - PreviousMessage( - content: event.content, - sender: event.senderId, - timestamp: event.originServerTs, - ), - ); - if (messages.length >= howFarBack) { - return messages; + try { + for (final Event event in eventList) { + final String? content = (event.messageType == MessageTypes.Text) + ? event.content.toString() + : PangeaMessageEvent( + event: event, + // eventList will be empty if the timeline is null + timeline: chatController.timeline!, + ownMessage: event.senderId == + pangeaController.matrixState.client.userID, + ) + .getSpeechToTextLocalOnly(l1LangCode, l2LangCode) + ?.transcript + .text; + if (content != null) { + messages.add( + PreviousMessage( + content: content, + sender: event.senderId, + timestamp: event.originServerTs, + ), + ); + if (messages.length >= howFarBack) { + return messages; + } } } + } catch (err, stack) { + ErrorHandler.logError(e: err, s: stack); } return messages; } diff --git a/lib/pangea/repo/igc_repo.dart b/lib/pangea/repo/igc_repo.dart index 50dba9c2a..861932812 100644 --- a/lib/pangea/repo/igc_repo.dart +++ b/lib/pangea/repo/igc_repo.dart @@ -98,7 +98,7 @@ class IgcRepo { /// Previous text/audio message sent in chat /// Contain message content, sender, and timestamp class PreviousMessage { - Map content; + String content; String sender; DateTime timestamp; @@ -110,7 +110,7 @@ class PreviousMessage { factory PreviousMessage.fromJson(Map json) => PreviousMessage( - content: jsonDecode(json[ModelKey.prevContent]) ?? {}, + content: json[ModelKey.prevContent] ?? "", sender: json[ModelKey.prevSender] ?? "", timestamp: json[ModelKey.prevTimestamp] == null ? DateTime.now() @@ -118,7 +118,7 @@ class PreviousMessage { ); Map toJson() => { - ModelKey.prevContent: jsonEncode(content), + ModelKey.prevContent: content, ModelKey.prevSender: sender, ModelKey.prevTimestamp: timestamp.toIso8601String(), };