diff options
author | metamuffin <metamuffin@disroot.org> | 2023-08-05 18:40:14 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2023-08-05 18:40:14 +0200 |
commit | 042f41a8750de8c0d2ecf30d147a62f03f758e3e (patch) | |
tree | 0566bb2bba240cc6cb183f1e1bf44782441ae974 /server/src/import.rs | |
parent | dcc3b7a9f3c29df31907af1280b9000ac344458c (diff) | |
download | jellything-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.rs | 18 |
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; |