diff --git a/lib/src/database/daos/messages_dao.dart b/lib/src/database/daos/messages_dao.dart index f947edc..84084ef 100644 --- a/lib/src/database/daos/messages_dao.dart +++ b/lib/src/database/daos/messages_dao.dart @@ -144,6 +144,13 @@ class MessagesDao extends DatabaseAccessor return (delete(messages)..where((t) => t.messageId.equals(messageId))).go(); } + Future containsOtherMessageId(int messageOtherId) async { + final query = select(messages) + ..where((t) => t.messageOtherId.equals(messageOtherId)); + final entry = await query.getSingleOrNull(); + return entry == null; + } + SingleOrNullSelectable getMessageByMessageId(int messageId) { return select(messages)..where((t) => t.messageId.equals(messageId)); } diff --git a/lib/src/providers/api/server_messages.dart b/lib/src/providers/api/server_messages.dart index f0c1e17..b04d948 100644 --- a/lib/src/providers/api/server_messages.dart +++ b/lib/src/providers/api/server_messages.dart @@ -225,7 +225,7 @@ Future handleNewMessage(int fromUserId, Uint8List body) async { message.kind != MessageKind.storedMediaFile) { Logger("handleServerMessages") .shout("Got unknown MessageKind $message"); - } else if (message.content != null) { + } else if (message.content != null && message.messageId != null) { String content = jsonEncode(message.content!.toJson()); bool acknowledgeByUser = false; @@ -241,6 +241,13 @@ Future handleNewMessage(int fromUserId, Uint8List body) async { responseToMessageId = textContent.responseToMessageId; } + // when a message is received doubled ignore it... + if ((await twonlyDatabase.messagesDao + .containsOtherMessageId(message.messageId!))) { + var ok = client.Response_Ok()..none = true; + return client.Response()..ok = ok; + } + final update = MessagesCompanion( contactId: Value(fromUserId), kind: Value(message.kind),