redgifs fix

This commit is contained in:
Simon
2026-07-06 16:39:16 +00:00
parent d1a05de50e
commit 4c88ceef0d

View File

@@ -287,9 +287,11 @@ impl RedgifsProvider {
} }
async fn authed_get(&self, url: &str, options: &ServerOptions) -> Result<String> { async fn authed_get(&self, url: &str, options: &ServerOptions) -> Result<String> {
for attempt in 0..2 { const ATTEMPTS: u32 = 3;
let force_refresh = attempt > 0; let mut force_refresh = false;
for attempt in 0..ATTEMPTS {
let token = self.redgifs_token(options, force_refresh).await?; let token = self.redgifs_token(options, force_refresh).await?;
force_refresh = false;
let mut requester = requester_or_default(options, CHANNEL_ID, "authed_get"); let mut requester = requester_or_default(options, CHANNEL_ID, "authed_get");
let response = requester let response = requester
.get_raw_with_headers( .get_raw_with_headers(
@@ -302,7 +304,17 @@ impl RedgifsProvider {
.await .await
.map_err(|error| Error::from(format!("request failed for {url}: {error}")))?; .map_err(|error| Error::from(format!("request failed for {url}: {error}")))?;
if response.status().as_u16() == 401 && attempt == 0 { let status = response.status().as_u16();
let last_attempt = attempt + 1 == ATTEMPTS;
if status == 401 && !last_attempt {
force_refresh = true;
continue;
}
// RedGifs rate-limits bursty search/browse traffic with 429s; retry
// the same token after a short backoff instead of surfacing an
// empty result set to the client.
if status == 429 && !last_attempt {
tokio::time::sleep(std::time::Duration::from_secs(1)).await;
continue; continue;
} }
if !response.status().is_success() { if !response.status().is_success() {