tonhowtf/omniget · error
HTTP
Error message
HTTP {} What it means
fetch in protondb.rs bails with "HTTP {}" when the ProtonDB API (api/v1/reports/summary/{appid}) responds with a non-success status other than 404. A 404 is treated as 'pending' (no reports) and returns Ok(None); any other non-2xx (403, 429, 5xx, etc.) becomes this error. It wraps the raw status code in the message.
Solutions
- Retry the request later or with backoff, especially on 429/5xx (the code already treats 404 as a benign 'pending' result)
- Check ProtonDB API status; if the service is down, fall back to cached summaries
- Rate-limit or batch requests when scanning entire libraries to avoid throttling
- Verify the appid is correct and the request URL is well-formed
Defensive patterns
Strategy: retry
Validate before calling
// No client-side validation prevents server-side HTTP errors; use backoff instead. // Treat appids so that 404 (Ok(None)) is expected 'pending', not an error.
Try / catch
match fetch(app_id, &client).await {
Ok(Some(summary)) => use_summary(summary),
Ok(None) => mark_pending(app_id), // 404: no reports yet
Err(e) if e.to_string().starts_with("HTTP 429") => schedule_retry_with_backoff(app_id),
Err(e) if e.to_string().starts_with("HTTP 5") => schedule_retry_with_backoff(app_id),
Err(e) => mark_failed(app_id, e),
} Prevention
- Add exponential backoff and rate limiting when scanning many appids
- Cache summaries locally so transient ProtonDB outages degrade gracefully
- Monitor ProtonDB service status before bulk scans
- Treat Ok(None) (404/pending) as a normal outcome, not an error
When it happens
Trigger: Calling run (which calls fetch) for an appid where the ProtonDB endpoint returns an unexpected HTTP error status, e.g. rate limiting (429), server errors (500/502/503), or a rejected/blocked request.
Common situations: Hitting ProtonDB too aggressively when scanning a whole Steam library (429); ProtonDB service downtime or maintenance (5xx); network proxies/firewalls returning 403; an invalid appid reaching a different endpoint behavior.
Understand the failure class
Background: "API error: {status}" and "HTTP 401/403/404/429/5xx" errors: non-2xx HTTP responses explained — this error's family across 27 libraries.
Related errors
AI-assisted analysis of tonhowtf/omniget@8600b91f42 (2026-09-12).
Data as JSON: /api/errors/41c624b6e4cc32cf.
Report an issue: GitHub.
Appendix: source
Thrown at src-tauri/omniget-core/src/core/tools/games/protondb.rs:259
if scan_library {
for app in apps {
push(app.app_id, app.name.clone(), &mut targets);
}
}
(targets, unresolved)
}
async fn fetch(client: &reqwest::Client, app_id: u32) -> anyhow::Result<Option<Summary>> {
let resp = client
.get(format!("{}/{}.json", API, app_id))
.send()
.await?;
if resp.status() == reqwest::StatusCode::NOT_FOUND {
// Jogo sem nenhum relato: o ProtonDB chama isso de "pending".
return Ok(None);
}
if !resp.status().is_success() {
anyhow::bail!("HTTP {}", resp.status());
}
let body = resp.text().await?;
Ok(Some(parse_summary(&body)?))
}
fn entry_from(app_id: u32, name: &str, summary: Summary, cached: bool) -> ProtonEntry {
let tier = if summary.tier.is_empty() {
"pending".to_string()
} else {
summary.tier
};
let rank = tier_rank(&tier);
ProtonEntry {
app_id,
name: name.to_string(),
tier,
confidence: summary.confidence,
score: summary.score,View on GitHub (pinned to 8600b91f42)