summaryrefslogtreecommitdiffstats
path: root/src/state.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/state.rs')
-rw-r--r--src/state.rs28
1 files changed, 20 insertions, 8 deletions
diff --git a/src/state.rs b/src/state.rs
index 0f30732..1ea5aae 100644
--- a/src/state.rs
+++ b/src/state.rs
@@ -640,6 +640,17 @@ impl AppState {
self.transport.local_id()
}
+ /// Peers that are active and last said they are on our epoch.
+ pub(crate) async fn active_peers_on_local_epoch(&self) -> Vec<String> {
+ let epoch = self.local_epoch();
+ self.peer_summaries()
+ .await
+ .into_iter()
+ .filter(|peer| peer.active && peer.epoch == Some(epoch))
+ .map(|peer| peer.id)
+ .collect()
+ }
+
pub(crate) fn lock_rtt(&self) -> std::sync::MutexGuard<'_, crate::swarm::rtt::RttTable> {
self.rtt
.lock()
@@ -1037,18 +1048,19 @@ impl Host for AppState {
) -> impl Future<Output = Result<automerge::Change>> + Send {
let state = self.clone();
async move {
- let epoch = state.local_epoch();
- let peers: Vec<String> = state
- .peer_summaries()
- .await
- .into_iter()
- .filter(|peer| peer.active && peer.epoch == Some(epoch))
- .map(|peer| peer.id)
- .collect();
+ let peers = state.active_peers_on_local_epoch().await;
crate::swarm::blob::fetch_change(&state, hash, peers).await
}
}
+ fn fetch_content(&self, hash: [u8; 32]) -> impl Future<Output = Result<Vec<u8>>> + Send {
+ let state = self.clone();
+ async move {
+ let peers = state.active_peers_on_local_epoch().await;
+ crate::swarm::blob::fetch_content(&state, hash, peers).await
+ }
+ }
+
fn request_sync(&self) {
crate::swarm::source::resync_everyone(self);
}