mirror of
https://github.com/twonlyapp/twonly-app.git
synced 2026-05-25 03:42: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/services/user_discovery.service.dart';
|
||||||
import 'package:twonly/src/utils/log.dart';
|
import 'package:twonly/src/utils/log.dart';
|
||||||
|
|
||||||
|
final _requestedUpdates = <int>{};
|
||||||
|
|
||||||
Future<void> checkForUserDiscoveryChanges(
|
Future<void> checkForUserDiscoveryChanges(
|
||||||
int fromUserId,
|
int fromUserId,
|
||||||
List<int> receivedVersion,
|
List<int> receivedVersion,
|
||||||
|
|
@ -16,7 +18,12 @@ Future<void> checkForUserDiscoveryChanges(
|
||||||
);
|
);
|
||||||
|
|
||||||
if (currentVersion != null) {
|
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.');
|
Log.info('Having old version from contact. Requesting new version.');
|
||||||
|
_requestedUpdates.add(fromUserId);
|
||||||
await sendCipherText(
|
await sendCipherText(
|
||||||
fromUserId,
|
fromUserId,
|
||||||
EncryptedContent(
|
EncryptedContent(
|
||||||
|
|
|
||||||
|
|
@ -216,14 +216,31 @@ impl<Store: UserDiscoveryStore, Utils: UserDiscoveryUtils> UserDiscovery<Store,
|
||||||
}
|
}
|
||||||
if received_version.promotion < config.promotion_version {
|
if received_version.promotion < config.promotion_version {
|
||||||
tracing::info!("New promotion message available for user {}", contact_id);
|
tracing::info!("New promotion message available for user {}", contact_id);
|
||||||
let promoting_messages: Vec<Vec<u8>> = self
|
let promoting_messages = self
|
||||||
.store
|
.store
|
||||||
.get_own_promotions_after_version(received_version.promotion)
|
.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()
|
.into_iter()
|
||||||
.filter(|x| !x.is_empty()) // filter ignored versions
|
.filter(|x| !x.is_empty()) // filter ignored versions
|
||||||
.collect();
|
.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)
|
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 {
|
if let Err(err) = self.handle_user_discovery_promotion(contact_id, udp).await {
|
||||||
tracing::warn!("Ignoring: {err}");
|
tracing::warn!("Ignoring: {err}");
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
tracing::info!("Got unknown user discovery messaging. Ignoring it.");
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Always update the version...
|
||||||
self.store
|
self.store
|
||||||
.set_contact_version(contact_id, version.encode_to_vec())
|
.set_contact_version(contact_id, version.encode_to_vec())
|
||||||
.await?;
|
.await?;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue