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> {
for attempt in 0..2 {
let force_refresh = attempt > 0;
const ATTEMPTS: u32 = 3;
let mut force_refresh = false;
for attempt in 0..ATTEMPTS {
let token = self.redgifs_token(options, force_refresh).await?;
force_refresh = false;
let mut requester = requester_or_default(options, CHANNEL_ID, "authed_get");
let response = requester
.get_raw_with_headers(
@@ -302,7 +304,17 @@ impl RedgifsProvider {
.await
.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;
}
if !response.status().is_success() {