From c9aa68024358263adeacc7f2e7e2182b491ba06d Mon Sep 17 00:00:00 2001 From: otsmr Date: Sun, 26 Apr 2026 10:43:25 +0200 Subject: [PATCH] improve user discovery new message handling --- .../api/client2client/user_discovery.c2c.dart | 7 +++++ .../protocols/src/user_discovery.rs | 27 ++++++++++++++----- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/lib/src/services/api/client2client/user_discovery.c2c.dart b/lib/src/services/api/client2client/user_discovery.c2c.dart index c9ac4850..ba48c29e 100644 --- a/lib/src/services/api/client2client/user_discovery.c2c.dart +++ b/lib/src/services/api/client2client/user_discovery.c2c.dart @@ -6,6 +6,8 @@ import 'package:twonly/src/services/api/messages.api.dart'; import 'package:twonly/src/services/user_discovery.service.dart'; import 'package:twonly/src/utils/log.dart'; +final _requestedUpdates = {}; + Future checkForUserDiscoveryChanges( int fromUserId, List receivedVersion, @@ -16,7 +18,12 @@ Future checkForUserDiscoveryChanges( ); if (currentVersion != null) { + if (_requestedUpdates.contains(fromUserId)) { + /// Only request a new version once per app session + return; + } Log.info('Having old version from contact. Requesting new version.'); + _requestedUpdates.add(fromUserId); await sendCipherText( fromUserId, EncryptedContent( diff --git a/rust_dependencies/protocols/src/user_discovery.rs b/rust_dependencies/protocols/src/user_discovery.rs index b6bf2978..c5c7ff37 100644 --- a/rust_dependencies/protocols/src/user_discovery.rs +++ b/rust_dependencies/protocols/src/user_discovery.rs @@ -216,14 +216,31 @@ impl UserDiscovery> = self + let promoting_messages = self .store .get_own_promotions_after_version(received_version.promotion) - .await? + .await?; + + let size = promoting_messages.len(); + let mut filtered: Vec> = promoting_messages .into_iter() .filter(|x| !x.is_empty()) // filter ignored versions .collect(); - messages.extend_from_slice(&promoting_messages); + + if filtered.len() != size { + // ensure the receiver will get the later version in case the last message was filtered out + filtered.push( + UserDiscoveryMessage { + version: Some(UserDiscoveryVersion { + announcement: config.announcement_version, + promotion: config.promotion_version, + }), + ..Default::default() + } + .encode_to_vec(), + ); + } + messages.extend_from_slice(&filtered); } Ok(messages) } @@ -307,11 +324,9 @@ impl UserDiscovery