chore: pass lemma meaning results to emoji picket instead of re-fetching, return STT langcode for audio messages (#3507)
This commit is contained in:
parent
473ca66f48
commit
a98aeed5ed
3 changed files with 27 additions and 59 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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<String> 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<LemmaReactionPicker> {
|
||||
List<String> 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<LemmaReactionPicker> {
|
|||
future: () => reactionEvent.redactEvent(),
|
||||
);
|
||||
} else {
|
||||
widget.controller.room.sendReaction(
|
||||
widget.event.eventId,
|
||||
controller.room.sendReaction(
|
||||
event.eventId,
|
||||
emoji,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _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<LemmaReactionPicker> {
|
|||
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(),
|
||||
),
|
||||
);
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
),
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue