From 6a87583cc059d6e95e3af92cfed6cef97de13788 Mon Sep 17 00:00:00 2001 From: YoursFunny Date: Thu, 24 Sep 2026 21:01:36 +0800 Subject: [PATCH] fix: honor bsky HLS retry-after --- crates/x-media/src/site/bsky/interface.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/crates/x-media/src/site/bsky/interface.rs b/crates/x-media/src/site/bsky/interface.rs index a268cef..051787a 100644 --- a/crates/x-media/src/site/bsky/interface.rs +++ b/crates/x-media/src/site/bsky/interface.rs @@ -132,7 +132,15 @@ fn concat_list(files: &mut [(usize, std::path::PathBuf)]) -> String { /// more, so the second attempt belongs on the request that actually failed. async fn fetch_hls(url: &str, cap: u64) -> Result { match crate::site::download_media_limited(url, cap, crate::site::DOWNLOAD_TOTAL_TIMEOUT).await { - Err(FetchError::Http(_) | FetchError::Transient(_) | FetchError::RateLimited { .. }) => { + Err(FetchError::RateLimited { + retry_after_secs, .. + }) => { + tokio::time::sleep(std::time::Duration::from_secs(retry_after_secs)).await; + crate::site::download_media_limited(url, cap, crate::site::DOWNLOAD_TOTAL_TIMEOUT) + .await + .map_err(|e| e.to_string()) + } + Err(FetchError::Http(_) | FetchError::Transient(_)) => { tokio::time::sleep(std::time::Duration::from_secs(1)).await; crate::site::download_media_limited(url, cap, crate::site::DOWNLOAD_TOTAL_TIMEOUT) .await