From 742ad51daf341d61183c9ec9352fb1cbc2b5bf84 Mon Sep 17 00:00:00 2001 From: otsmr Date: Tue, 8 Apr 2025 13:42:12 +0200 Subject: [PATCH] fix #94 --- lib/src/providers/api/server_messages.dart | 15 ++++++----- .../share_image_editor_view.dart | 7 +++++- .../views/chats/chat_item_details_view.dart | 25 ++++++++++++++++++- lib/src/views/chats/media_viewer_view.dart | 5 +++- 4 files changed, 43 insertions(+), 9 deletions(-) diff --git a/lib/src/providers/api/server_messages.dart b/lib/src/providers/api/server_messages.dart index a7227f1..8a9fa69 100644 --- a/lib/src/providers/api/server_messages.dart +++ b/lib/src/providers/api/server_messages.dart @@ -256,8 +256,6 @@ Future handleNewMessage(int fromUserId, Uint8List body) async { return client.Response()..ok = ok; } - String content = jsonEncode(message.content!.toJson()); - bool acknowledgeByUser = false; DateTime? openedAt; @@ -267,16 +265,21 @@ Future handleNewMessage(int fromUserId, Uint8List body) async { } int? responseToMessageId; - final textContent = message.content!; - if (textContent is TextMessageContent) { - responseToMessageId = textContent.responseToMessageId; + + final content = message.content!; + if (content is TextMessageContent) { + responseToMessageId = content.responseToMessageId; + } + if (content is StoredMediaFileContent) { + responseToMessageId = content.messageId; } + String contentJson = jsonEncode(content.toJson()); final update = MessagesCompanion( contactId: Value(fromUserId), kind: Value(message.kind), messageOtherId: Value(message.messageId), - contentJson: Value(content), + contentJson: Value(contentJson), acknowledgeByServer: Value(true), acknowledgeByUser: Value(acknowledgeByUser), responseToMessageId: Value(responseToMessageId), diff --git a/lib/src/views/camera_to_share/share_image_editor_view.dart b/lib/src/views/camera_to_share/share_image_editor_view.dart index 94ec9f5..60a6245 100644 --- a/lib/src/views/camera_to_share/share_image_editor_view.dart +++ b/lib/src/views/camera_to_share/share_image_editor_view.dart @@ -414,9 +414,14 @@ class _ShareImageEditorView extends State { onPressed: () async { if (sendNextMediaToUserId != null) { Uint8List? imageBytes = await getMergedImage(); + if (!context.mounted) return; + if (imageBytes == null) { + Navigator.pop(context); + return; + } sendImage( [sendNextMediaToUserId], - imageBytes!, + imageBytes, _isRealTwonly, maxShowTime, ); diff --git a/lib/src/views/chats/chat_item_details_view.dart b/lib/src/views/chats/chat_item_details_view.dart index 09a363b..adfc82a 100644 --- a/lib/src/views/chats/chat_item_details_view.dart +++ b/lib/src/views/chats/chat_item_details_view.dart @@ -34,11 +34,34 @@ class ChatListEntry extends StatelessWidget { Widget getReactionRow() { List children = []; + bool hasOneTextReaction = false; for (final reaction in reactions) { - if (children.isNotEmpty) break; MessageContent? content = MessageContent.fromJson( reaction.kind, jsonDecode(reaction.contentJson!)); + + if (content is StoredMediaFileContent) { + children.add( + Expanded( + child: Align( + alignment: Alignment.bottomRight, + child: Padding( + padding: EdgeInsets.only(right: 3), + child: FaIcon( + FontAwesomeIcons.floppyDisk, + size: 12, + color: Colors.blue, + ), + ), + ), + ), + ); + } + + // only show one reaction + if (hasOneTextReaction) continue; + if (content is TextMessageContent) { + hasOneTextReaction = true; late Widget child; if (EmojiAnimation.animatedIcons.containsKey(content.text)) { child = SizedBox( diff --git a/lib/src/views/chats/media_viewer_view.dart b/lib/src/views/chats/media_viewer_view.dart index 031d408..1540d96 100644 --- a/lib/src/views/chats/media_viewer_view.dart +++ b/lib/src/views/chats/media_viewer_view.dart @@ -392,6 +392,9 @@ class _MediaViewerViewState extends State { : Theme.of(context).colorScheme.primary, ), onPressed: () async { + if (allMediaFiles.first.messageOtherId == null) { + return; // should not be possible + } setState(() { imageSaving = true; }); @@ -402,7 +405,7 @@ class _MediaViewerViewState extends State { kind: MessageKind.storedMediaFile, messageId: allMediaFiles.first.messageId, content: StoredMediaFileContent( - messageId: allMediaFiles.first.messageId, + messageId: allMediaFiles.first.messageOtherId!, ), timestamp: DateTime.now(), ),