From b2426a9ec5216a85db4d7dd7b156e5bffabd1811 Mon Sep 17 00:00:00 2001 From: otsmr Date: Mon, 23 Jun 2025 21:01:40 +0200 Subject: [PATCH] delete faulty messages --- lib/src/database/daos/message_retransmissions.dao.dart | 10 +++++++++- lib/src/services/api/server_messages.dart | 2 +- .../services/notifications/pushkeys.notifications.dart | 7 +++++-- lib/src/views/chats/add_new_user.view.dart | 4 +++- 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/lib/src/database/daos/message_retransmissions.dao.dart b/lib/src/database/daos/message_retransmissions.dao.dart index 766984e..caf61c8 100644 --- a/lib/src/database/daos/message_retransmissions.dao.dart +++ b/lib/src/database/daos/message_retransmissions.dao.dart @@ -45,7 +45,15 @@ class MessageRetransmissionDao extends DatabaseAccessor .write(updatedValues); } - Future resetAckStatusForAllMessages() { + Future resetAckStatusForAllMessages() async { + final deletedCount = await (delete(messageRetransmissions) + ..where((m) => + m.willNotGetACKByUser.equals(true) & + m.acknowledgeByServerAt.isNotNull())) + .go(); + if (deletedCount > 0) { + Log.info('$deletedCount faulty retransmission messages where deleted.'); + } return ((update(messageRetransmissions)) ..where((m) => m.willNotGetACKByUser.equals(false))) .write( diff --git a/lib/src/services/api/server_messages.dart b/lib/src/services/api/server_messages.dart index 726d199..c2668a2 100644 --- a/lib/src/services/api/server_messages.dart +++ b/lib/src/services/api/server_messages.dart @@ -222,7 +222,7 @@ Future handleNewMessage(int fromUserId, Uint8List body) async { if (lastPushKeyRequest .isBefore(DateTime.now().subtract(Duration(seconds: 60)))) { lastPushKeyRequest = DateTime.now(); - setupNotificationWithUsers(force: true); + setupNotificationWithUsers(forceContact: fromUserId); } case MessageKind.pushKey: diff --git a/lib/src/services/notifications/pushkeys.notifications.dart b/lib/src/services/notifications/pushkeys.notifications.dart index 489d090..c3215e9 100644 --- a/lib/src/services/notifications/pushkeys.notifications.dart +++ b/lib/src/services/notifications/pushkeys.notifications.dart @@ -17,7 +17,8 @@ import 'package:twonly/src/services/api/messages.dart'; import 'package:twonly/src/utils/log.dart'; /// This function must be called after the database is setup -Future setupNotificationWithUsers({bool force = false}) async { +Future setupNotificationWithUsers( + {bool force = false, int? forceContact}) async { var pushUsers = await getPushKeys(SecureStorageKeys.receivingPushKeys); // HotFIX: Search for user with id 0 if not there remove all @@ -51,7 +52,9 @@ Future setupNotificationWithUsers({bool force = false}) async { final createdAt = DateTime.fromMillisecondsSinceEpoch( lastKey.createdAtUnixTimestamp.toInt()); - if (force || createdAt.isBefore(timeBefore)) { + if (force || + (forceContact == contact.userId) || + createdAt.isBefore(timeBefore)) { final pushKey = PushKey( id: lastKey.id + random.nextInt(5), key: List.generate(32, (index) => random.nextInt(256)), diff --git a/lib/src/views/chats/add_new_user.view.dart b/lib/src/views/chats/add_new_user.view.dart index 77e2292..965878f 100644 --- a/lib/src/views/chats/add_new_user.view.dart +++ b/lib/src/views/chats/add_new_user.view.dart @@ -95,7 +95,9 @@ class _SearchUsernameView extends State { if (added > 0) { if (await createNewSignalSession(res.value.userdata)) { // before notifying the other party, add - await setupNotificationWithUsers(); + await setupNotificationWithUsers( + forceContact: res.value.userdata.userId.toInt(), + ); await encryptAndSendMessageAsync( null, res.value.userdata.userId.toInt(),