redgifs fix
This commit is contained in:
@@ -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() {
|
||||||
|
|||||||
Reference in New Issue
Block a user