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

  1. Retry the request later or with backoff, especially on 429/5xx (the code already treats 404 as a benign 'pending' result)
  2. Check ProtonDB API status; if the service is down, fall back to cached summaries
  3. Rate-limit or batch requests when scanning entire libraries to avoid throttling
  4. 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

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)