From 1ad304ec2e30c6d6a0a3d719b09c60dedd5a4564 Mon Sep 17 00:00:00 2001 From: otsmr Date: Thu, 21 May 2026 13:33:13 +0200 Subject: [PATCH] improve response viewer --- .../generated/app_localizations.dart | 12 +++++ .../generated/app_localizations_de.dart | 6 +++ .../generated/app_localizations_en.dart | 6 +++ lib/src/localization/translations | 2 +- .../response_container.dart | 44 ++++++++++++------- 5 files changed, 54 insertions(+), 16 deletions(-) diff --git a/lib/src/localization/generated/app_localizations.dart b/lib/src/localization/generated/app_localizations.dart index c0f1e110..4476dafb 100644 --- a/lib/src/localization/generated/app_localizations.dart +++ b/lib/src/localization/generated/app_localizations.dart @@ -3457,6 +3457,18 @@ abstract class AppLocalizations { /// In en, this message translates to: /// **'Maximum anti-phishing defense. Recommended for *journalists & public figures*.'** String get onboardingProfileSelectionStrictDesc; + + /// No description provided for @replyFlameRestored. + /// + /// In en, this message translates to: + /// **'Flames restored'** + String get replyFlameRestored; + + /// No description provided for @replyAskAFriend. + /// + /// In en, this message translates to: + /// **'Ask a friend'** + String get replyAskAFriend; } class _AppLocalizationsDelegate diff --git a/lib/src/localization/generated/app_localizations_de.dart b/lib/src/localization/generated/app_localizations_de.dart index 0b7559fd..fe89b7e6 100644 --- a/lib/src/localization/generated/app_localizations_de.dart +++ b/lib/src/localization/generated/app_localizations_de.dart @@ -1967,4 +1967,10 @@ class AppLocalizationsDe extends AppLocalizations { @override String get onboardingProfileSelectionStrictDesc => 'Maximaler Schutz vor Phishing. Empfohlen für *Journalisten & Personen des öffentlichen Lebens*.'; + + @override + String get replyFlameRestored => 'Flammen wiederhergestellt'; + + @override + String get replyAskAFriend => 'Einen Freund fragen'; } diff --git a/lib/src/localization/generated/app_localizations_en.dart b/lib/src/localization/generated/app_localizations_en.dart index f635110a..2b0122c5 100644 --- a/lib/src/localization/generated/app_localizations_en.dart +++ b/lib/src/localization/generated/app_localizations_en.dart @@ -1952,4 +1952,10 @@ class AppLocalizationsEn extends AppLocalizations { @override String get onboardingProfileSelectionStrictDesc => 'Maximum anti-phishing defense. Recommended for *journalists & public figures*.'; + + @override + String get replyFlameRestored => 'Flames restored'; + + @override + String get replyAskAFriend => 'Ask a friend'; } diff --git a/lib/src/localization/translations b/lib/src/localization/translations index 18aa5e1a..5f60fcc1 160000 --- a/lib/src/localization/translations +++ b/lib/src/localization/translations @@ -1 +1 @@ -Subproject commit 18aa5e1afc76a20ded04e9d2c4321fec1c91183d +Subproject commit 5f60fcc10450b40f75b3c170d27caa4398d84e4a diff --git a/lib/src/visual/views/chats/chat_messages_components/response_container.dart b/lib/src/visual/views/chats/chat_messages_components/response_container.dart index c5029355..d0d8d58d 100644 --- a/lib/src/visual/views/chats/chat_messages_components/response_container.dart +++ b/lib/src/visual/views/chats/chat_messages_components/response_container.dart @@ -4,6 +4,7 @@ import 'package:twonly/src/database/daos/contacts.dao.dart'; import 'package:twonly/src/database/tables/mediafiles.table.dart'; import 'package:twonly/src/database/tables/messages.table.dart'; import 'package:twonly/src/database/twonly.db.dart'; +import 'package:twonly/src/model/protobuf/client/generated/data.pb.dart'; import 'package:twonly/src/services/mediafiles/mediafile.service.dart'; import 'package:twonly/src/utils/misc.dart'; import 'package:twonly/src/visual/views/chats/chat_messages.view.dart'; @@ -39,10 +40,8 @@ class _ResponseContainerState extends State { void didChangeDependencies() { super.didChangeDependencies(); WidgetsBinding.instance.addPostFrameCallback((_) { - final messageBox = - _message.currentContext?.findRenderObject() as RenderBox?; - final previewBox = - _preview.currentContext?.findRenderObject() as RenderBox?; + final messageBox = _message.currentContext?.findRenderObject() as RenderBox?; + final previewBox = _preview.currentContext?.findRenderObject() as RenderBox?; if (messageBox == null || previewBox == null) { return; } @@ -65,9 +64,7 @@ class _ResponseContainerState extends State { return widget.child!; } return GestureDetector( - onTap: widget.scrollToMessage == null - ? null - : () => widget.scrollToMessage!(widget.msg.quotesMessageId!), + onTap: widget.scrollToMessage == null ? null : () => widget.scrollToMessage!(widget.msg.quotesMessageId!), child: Container( constraints: BoxConstraints( maxWidth: MediaQuery.of(context).size.width * 0.8, @@ -143,16 +140,12 @@ class _ResponsePreviewState extends State { } Future initAsync() async { - _message ??= await twonlyDB.messagesDao - .getMessageById(widget.messageId!) - .getSingleOrNull(); + _message ??= await twonlyDB.messagesDao.getMessageById(widget.messageId!).getSingleOrNull(); if (_message?.mediaId != null) { _mediaService = await MediaFileService.fromMediaId(_message!.mediaId!); } if (_message?.senderId != null) { - final contact = await twonlyDB.contactsDao - .getContactByUserId(_message!.senderId!) - .getSingleOrNull(); + final contact = await twonlyDB.contactsDao.getContactByUserId(_message!.senderId!).getSingleOrNull(); if (contact != null) { _username = getContactDisplayName(contact); } @@ -186,6 +179,28 @@ class _ResponsePreviewState extends State { subtitle = 'Audio'; } } + if (_message!.type == MessageType.contacts.name) { + subtitle = context.lang.contacts; + } + if (_message!.type == MessageType.restoreFlameCounter.name) { + if (_message!.additionalMessageData != null) { + try { + final data = AdditionalMessageData.fromBuffer( + _message!.additionalMessageData!, + ); + subtitle = context.lang.chatEntryFlameRestored( + data.restoredFlameCounter.toInt(), + ); + } catch (e) { + subtitle = context.lang.replyFlameRestored; + } + } else { + subtitle = context.lang.replyFlameRestored; + } + } + if (_message!.type == MessageType.askAboutUser.name) { + subtitle = context.lang.replyAskAFriend; + } if (_message!.senderId == null) { _username = context.lang.you; @@ -248,8 +263,7 @@ class _ResponsePreviewState extends State { ], ), ), - if (_mediaService != null && - _mediaService!.mediaFile.type != MediaType.audio) + if (_mediaService != null && _mediaService!.mediaFile.type != MediaType.audio) SizedBox( height: widget.showBorder ? 100 : 210, child: Image.file(