aboutsummaryrefslogtreecommitdiff
path: root/server/src/import.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2023-08-05 18:40:14 +0200
committermetamuffin <metamuffin@disroot.org>2023-08-05 18:40:14 +0200
commit042f41a8750de8c0d2ecf30d147a62f03f758e3e (patch)
tree0566bb2bba240cc6cb183f1e1bf44782441ae974 /server/src/import.rs
parentdcc3b7a9f3c29df31907af1280b9000ac344458c (diff)
downloadjellything-042f41a8750de8c0d2ecf30d147a62f03f758e3e.tar
jellything-042f41a8750de8c0d2ecf30d147a62f03f758e3e.tar.bz2
jellything-042f41a8750de8c0d2ecf30d147a62f03f758e3e.tar.zst
poll many fututes with FuturesUnordered
Diffstat (limited to 'server/src/import.rs')
-rw-r--r--server/src/import.rs18
1 files changed, 10 insertions, 8 deletions
diff --git a/server/src/import.rs b/server/src/import.rs
index d72690c..872681f 100644
--- a/server/src/import.rs
+++ b/server/src/import.rs
@@ -7,7 +7,11 @@ use crate::{database::Database, federation::Federation, CONF};
use anyhow::{anyhow, bail, Context, Ok};
use async_recursion::async_recursion;
use base64::Engine;
-use futures::future::join_all;
+use futures::{
+ future::join_all,
+ stream::{FuturesOrdered, FuturesUnordered},
+ StreamExt,
+};
use jellyclient::Session;
use jellycommon::{AssetLocation, MediaSource, Node, NodePrivate, RemoteImportOptions};
use log::{debug, error, info};
@@ -63,16 +67,14 @@ pub async fn import_path(
.ok_or(anyhow!("non-root node requires parent"))?
};
- let all = join_all(
- children_paths
- .into_iter()
- .map(|p| import_path(p, db, fed, Some(identifier.clone()))),
- )
- .await;
+ let mut all: FuturesUnordered<_> = children_paths
+ .into_iter()
+ .map(|p| import_path(p, db, fed, Some(identifier.clone())))
+ .collect();
let mut children_ids = Vec::new();
let mut errs = 0;
- for k in all {
+ while let Some(k) = all.next().await {
match k {
core::result::Result::Ok((els, errs2)) => {
errs += errs2;