mirror of
https://github.com/twonlyapp/twonly-app.git
synced 2026-05-25 00:32:13 +00:00
improve user discovery new message handling
This commit is contained in:
parent
ce60f4e2f1
commit
c9aa680243
2 changed files with 28 additions and 6 deletions
|
|
@ -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 = <int>{};
|
||||
|
||||
Future<void> checkForUserDiscoveryChanges(
|
||||
int fromUserId,
|
||||
List<int> receivedVersion,
|
||||
|
|
@ -16,7 +18,12 @@ Future<void> 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(
|
||||
|
|
|
|||
|
|
@ -216,14 +216,31 @@ impl<Store: UserDiscoveryStore, Utils: UserDiscoveryUtils> UserDiscovery<Store,
|
|||
}
|
||||
if received_version.promotion < config.promotion_version {
|
||||
tracing::info!("New promotion message available for user {}", contact_id);
|
||||
let promoting_messages: Vec<Vec<u8>> = 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<Vec<u8>> = 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<Store: UserDiscoveryStore, Utils: UserDiscoveryUtils> UserDiscovery<Store,
|
|||
if let Err(err) = self.handle_user_discovery_promotion(contact_id, udp).await {
|
||||
tracing::warn!("Ignoring: {err}");
|
||||
}
|
||||
} else {
|
||||
tracing::info!("Got unknown user discovery messaging. Ignoring it.");
|
||||
continue;
|
||||
}
|
||||
|
||||
// Always update the version...
|
||||
self.store
|
||||
.set_contact_version(contact_id, version.encode_to_vec())
|
||||
.await?;
|
||||
|
|
|
|||
Loading…
Reference in a new issue