Skip to content

Commit 80306fb

Browse files
committed
refactor: optimize download handling with asynchronous tasks in DownloadsBlock
1 parent b2f8ba9 commit 80306fb

File tree

1 file changed

+15
-7
lines changed

1 file changed

+15
-7
lines changed

src/syntax/blocks/downloads_block.rs

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1+
use tokio::task;
12
use is_url::is_url;
3+
use futures::future::join_all;
24

35
use std::{
46
io::BufRead,
@@ -41,6 +43,7 @@ impl DownloadsBlock {
4143

4244
async fn block(&self, contents: &str, downloads_content: &str, path: &str, flags: &Flags) -> Result<(), Box<dyn Error>> {
4345
let mut seen_urls = HashSet::new();
46+
let mut tasks = Vec::new();
4447

4548
for line in downloads_content.lines() {
4649
let url = line.trim().split_whitespace().next().unwrap_or("");
@@ -55,23 +58,28 @@ impl DownloadsBlock {
5558
if seen_urls.contains(&final_url) {
5659
continue;
5760
}
58-
61+
5962
seen_urls.insert(final_url.to_string());
6063

6164
if !MacroHandler::handle_check_macro_line(&line, "ignore") {
6265
if !final_url.is_empty() && is_url(&final_url) && final_url.starts_with("http") {
63-
Tasks.download(
64-
Some(contents),
65-
&final_url,
66-
&path,
67-
flags,
68-
).await?;
66+
let contents = contents.to_string();
67+
let url = final_url.clone();
68+
let path = path.to_string();
69+
let flags = flags.clone();
70+
71+
let task = task::spawn(async move {
72+
let _ = Tasks.download(Some(&contents), &url, &path, &flags).await;
73+
});
74+
75+
tasks.push(task);
6976
}
7077
} else {
7178
MacrosAlerts::ignore(&final_url);
7279
}
7380
}
7481

82+
join_all(tasks).await;
7583
Ok(())
7684
}
7785

0 commit comments

Comments
 (0)