diff --git a/lib/src/model/json/message.dart b/lib/src/model/json/message.dart index ecb0d20..1f866af 100644 --- a/lib/src/model/json/message.dart +++ b/lib/src/model/json/message.dart @@ -159,11 +159,19 @@ class MediaMessageContent extends MessageContent { class TextMessageContent extends MessageContent { String text; int? responseToMessageId; - TextMessageContent({required this.text, this.responseToMessageId}); + int? responseToOtherMessageId; + TextMessageContent({ + required this.text, + this.responseToMessageId, + this.responseToOtherMessageId, + }); static TextMessageContent fromJson(Map json) { return TextMessageContent( text: json['text'], + responseToOtherMessageId: json.containsKey('responseToOtherMessageId') + ? json['responseToOtherMessageId'] + : null, responseToMessageId: json.containsKey('responseToMessageId') ? json['responseToMessageId'] : null); @@ -174,6 +182,7 @@ class TextMessageContent extends MessageContent { return { 'text': text, 'responseToMessageId': responseToMessageId, + 'responseToOtherMessageId': responseToOtherMessageId, }; } } diff --git a/lib/src/providers/api/api.dart b/lib/src/providers/api/api.dart index e3b8d40..9f3146d 100644 --- a/lib/src/providers/api/api.dart +++ b/lib/src/providers/api/api.dart @@ -158,11 +158,7 @@ Future encryptAndSendMessage( } Future sendTextMessage( - int target, - TextMessageContent content, - PushKind? pushKind, { - int? responseToMessageId, -}) async { + int target, TextMessageContent content, PushKind? pushKind) async { DateTime messageSendAt = DateTime.now(); int? messageId = await twonlyDatabase.messagesDao.insertMessage( @@ -171,7 +167,7 @@ Future sendTextMessage( kind: Value(MessageKind.textMessage), sendAt: Value(messageSendAt), responseToOtherMessageId: Value(content.responseToMessageId), - responseToMessageId: Value(responseToMessageId), + responseToMessageId: Value(content.responseToOtherMessageId), downloadState: Value(DownloadState.downloaded), contentJson: Value( jsonEncode(content.toJson()), diff --git a/lib/src/providers/api/server_messages.dart b/lib/src/providers/api/server_messages.dart index 9e10dbd..6336925 100644 --- a/lib/src/providers/api/server_messages.dart +++ b/lib/src/providers/api/server_messages.dart @@ -179,11 +179,13 @@ Future handleNewMessage(int fromUserId, Uint8List body) async { } int? responseToMessageId; + int? responseToOtherMessageId; int? messageId; final content = message.content!; if (content is TextMessageContent) { responseToMessageId = content.responseToMessageId; + responseToOtherMessageId = content.responseToOtherMessageId; } if (content is ReopenedMediaFileContent) { responseToMessageId = content.messageId; @@ -207,6 +209,7 @@ Future handleNewMessage(int fromUserId, Uint8List body) async { acknowledgeByServer: Value(true), acknowledgeByUser: Value(acknowledgeByUser), responseToMessageId: Value(responseToMessageId), + responseToOtherMessageId: Value(responseToOtherMessageId), openedAt: Value(openedAt), downloadState: Value(message.kind == MessageKind.media ? DownloadState.pending diff --git a/lib/src/views/chats/chat_item_details_view.dart b/lib/src/views/chats/chat_item_details_view.dart index c947814..a3884ae 100644 --- a/lib/src/views/chats/chat_item_details_view.dart +++ b/lib/src/views/chats/chat_item_details_view.dart @@ -103,13 +103,16 @@ class _ChatItemDetailsViewState extends State { tmpReactionsToOtherMessages[msg.responseToOtherMessageId!]! .add(msg); } - } else if (msg.responseToMessageId != null) { + } + if (msg.responseToMessageId != null) { if (!tmpReactionsToMyMessages.containsKey(msg.responseToMessageId!)) { tmpReactionsToMyMessages[msg.responseToMessageId!] = [msg]; } else { tmpReactionsToMyMessages[msg.responseToMessageId!]!.add(msg); } - } else { + } + if (msg.responseToMessageId == null && + msg.responseToOtherMessageId == null) { displayedMessages.add(msg); } } @@ -138,9 +141,9 @@ class _ChatItemDetailsViewState extends State { TextMessageContent( text: newMessageController.text, responseToMessageId: responseToMessage?.messageOtherId, + responseToOtherMessageId: responseToMessage?.messageId, ), PushKind.text, - responseToMessageId: responseToMessage?.messageId, ); newMessageController.clear(); currentInputText = "";