From a98aeed5ed0dfd994ed788d36aa2366fe0b8ae91 Mon Sep 17 00:00:00 2001 From: ggurdin <46800240+ggurdin@users.noreply.github.com> Date: Mon, 21 Jul 2025 12:18:39 -0400 Subject: [PATCH] chore: pass lemma meaning results to emoji picket instead of re-fetching, return STT langcode for audio messages (#3507) --- .../event_wrappers/pangea_message_event.dart | 6 ++ lib/pangea/lemmas/lemma_reaction_picker.dart | 77 +++++-------------- .../widgets/word_zoom/word_zoom_widget.dart | 3 +- 3 files changed, 27 insertions(+), 59 deletions(-) diff --git a/lib/pangea/events/event_wrappers/pangea_message_event.dart b/lib/pangea/events/event_wrappers/pangea_message_event.dart index 122c93e55..f065060a2 100644 --- a/lib/pangea/events/event_wrappers/pangea_message_event.dart +++ b/lib/pangea/events/event_wrappers/pangea_message_event.dart @@ -675,6 +675,12 @@ class PangeaMessageEvent { messageDisplayLangCode.split("-")[0] == l2Code?.split("-")[0]; String get messageDisplayLangCode { + if (isAudioMessage) { + final stt = getSpeechToTextLocal(); + if (stt == null) return LanguageKeys.unknownLanguage; + return stt.langCode; + } + final bool immersionMode = MatrixState .pangeaController.permissionsController .isToolEnabled(ToolSetting.immersionMode, room); diff --git a/lib/pangea/lemmas/lemma_reaction_picker.dart b/lib/pangea/lemmas/lemma_reaction_picker.dart index ab491e952..ece6095b2 100644 --- a/lib/pangea/lemmas/lemma_reaction_picker.dart +++ b/lib/pangea/lemmas/lemma_reaction_picker.dart @@ -4,51 +4,28 @@ import 'package:collection/collection.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/pages/chat/chat.dart'; -import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; import 'package:fluffychat/pangea/toolbar/reading_assistance_input_row/lemma_emoji_choice_item.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; -class LemmaReactionPicker extends StatefulWidget { - final ConstructIdentifier cId; +class LemmaReactionPicker extends StatelessWidget { + final List emojis; + final bool loading; + final Event event; final ChatController controller; - final double? iconSize; const LemmaReactionPicker({ super.key, - required this.cId, + required this.emojis, + required this.loading, required this.event, required this.controller, - this.iconSize, }); - @override - LemmaReactionPickerState createState() => LemmaReactionPickerState(); -} - -class LemmaReactionPickerState extends State { - List displayEmoji = []; - bool loading = true; - - @override - void initState() { - super.initState(); - _refresh(); - } - - @override - void didUpdateWidget(LemmaReactionPicker oldWidget) { - super.didUpdateWidget(oldWidget); - if (oldWidget.cId != widget.cId) { - _refresh(); - } - } - - void setEmoji(String emoji) { - final allReactionEvents = widget.event.aggregatedEvents( - widget.controller.timeline!, + void setEmoji(String emoji, BuildContext context) { + final allReactionEvents = event.aggregatedEvents( + controller.timeline!, RelationshipTypes.reaction, ); @@ -65,29 +42,13 @@ class LemmaReactionPickerState extends State { future: () => reactionEvent.redactEvent(), ); } else { - widget.controller.room.sendReaction( - widget.event.eventId, + controller.room.sendReaction( + event.eventId, emoji, ); } } - Future _refresh() async { - setState(() { - loading = true; - displayEmoji = []; - }); - - try { - final info = await widget.cId.getLemmaInfo(); - displayEmoji = info.emoji; - } catch (e, s) { - ErrorHandler.logError(data: widget.cId.toJson(), e: e, s: s); - } finally { - if (mounted) setState(() => loading = false); - } - } - @override Widget build(BuildContext context) { return Container( @@ -96,19 +57,19 @@ class LemmaReactionPickerState extends State { child: Row( mainAxisAlignment: MainAxisAlignment.center, spacing: 4.0, - children: loading == false - ? displayEmoji + children: loading + ? [1, 2, 3, 4, 5] + .map( + (e) => const LemmaEmojiChoicePlaceholder(), + ) + .toList() + : emojis .map( (emoji) => LemmaEmojiChoiceItem( content: emoji, - onTap: () => setEmoji(emoji), + onTap: () => setEmoji(emoji, context), ), ) - .toList() - : [1, 2, 3, 4, 5] - .map( - (e) => const LemmaEmojiChoicePlaceholder(), - ) .toList(), ), ); diff --git a/lib/pangea/toolbar/widgets/word_zoom/word_zoom_widget.dart b/lib/pangea/toolbar/widgets/word_zoom/word_zoom_widget.dart index feef01251..584883949 100644 --- a/lib/pangea/toolbar/widgets/word_zoom/word_zoom_widget.dart +++ b/lib/pangea/toolbar/widgets/word_zoom/word_zoom_widget.dart @@ -208,7 +208,8 @@ class WordZoomWidget extends StatelessWidget { iconSize: 24.0, ), LemmaReactionPicker( - cId: _selectedToken.vocabConstructID, + emojis: controller.lemmaInfo?.emoji ?? [], + loading: controller.isLoading, event: messageEvent.event, controller: overlayController.widget.chatController, ),