{"record":{"id":"383665d45a304c05","repo":"tonhowtf/omniget","slug":"informe-um-appid-um-link-da-loja-ou-marque-a-biblioteca","errorCode":null,"errorMessage":"informe um appid, um link da loja ou marque a biblioteca inteira","messagePattern":"informe um appid, um link da loja ou marque a biblioteca inteira","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src-tauri/omniget-core/src/core/tools/games/protondb.rs","lineNumber":312,"sourceCode":"        confidence: String::new(),\n        score: 0.0,\n        total: 0,\n        trending_tier: String::new(),\n        best_tier: String::new(),\n        rank: tier_rank(\"pending\"),\n        url: store_url(app_id),\n        cached: false,\n        ok: true,\n        error: None,\n    }\n}\n\npub async fn run(opts: ProtonOptions, progress: ProgressFn) -> anyhow::Result<ProtonResult> {\n    let apps = steam::scan_apps(&steam::steam_libraries(&opts.steam_dirs));\n    let (targets, unresolved) = resolve_targets(&opts.inputs, &apps, opts.scan_library);\n    if targets.is_empty() {\n        if unresolved.is_empty() {\n            anyhow::bail!(\"informe um appid, um link da loja ou marque a biblioteca inteira\");\n        }\n        anyhow::bail!(\n            \"não achei appid para: {} — cole o link da loja ou o número\",\n            unresolved.join(\", \")\n        );\n    }\n\n    let client = crate::core::tools::client()?;\n    let total = targets.len() as u64;\n    let mut entries: Vec<ProtonEntry> = Vec::new();\n    let mut from_cache = 0u64;\n\n    for (i, (app_id, name)) in targets.iter().enumerate() {\n        report(\n            &progress,\n            ID,\n            \"progress\",\n            i as u64,","sourceCodeStart":294,"sourceCodeEnd":330,"githubUrl":"https://github.com/tonhowtf/omniget/blob/8600b91f4246848bac346874daa9e61c1fc5677a/src-tauri/omniget-core/src/core/tools/games/protondb.rs#L294-L330","documentation":"run in protondb.rs bails with this message when the request is empty: after resolving the user inputs against scanned Steam apps, targets is empty AND unresolved is also empty. That means the caller gave no appids, no store links, and did not set scan_library, so there is nothing to look up. Message in Portuguese: 'provide an appid, a store link, or check the whole library'.","triggerScenarios":"Calling run with ProtonOptions where opts.inputs is empty/whitespace-only and opts.scan_library is false, and every input (if any) resolved cleanly but matched nothing that produced targets while leaving no unresolved entries.","commonSituations":"Invoking the protondb tool from a frontend with an empty search box and library scan unchecked; default-constructed ProtonOptions passed to run; inputs containing only whitespace strings that resolve_targets drops.","solutions":["Provide at least one valid input in opts.inputs (a Steam appid number or a store page link)","Set opts.scan_library = true to scan the entire Steam library instead of specific targets","Guard in the caller: bail/return early when inputs is empty and scan_library is false"],"exampleFix":"// before\nrun(ProtonOptions { inputs: vec![], scan_library: false, .. }).await?;\n// after\nrun(ProtonOptions { inputs: vec![\"570\".into()], scan_library: false, .. }).await?;\n// or\nrun(ProtonOptions { inputs: vec![], scan_library: true, .. }).await?;","handlingStrategy":"validation","validationCode":"if opts.inputs.iter().all(|i| i.trim().is_empty()) && !opts.scan_library {\n    return Err(anyhow::anyhow!(\"provide an appid, a store link, or enable library scan\"));\n}","typeGuard":null,"tryCatchPattern":"match run(opts, progress).await {\n    Ok(result) => handle(result),\n    Err(e) if e.to_string().contains(\"informe um appid\") => show_input_prompt_to_user(),\n    Err(e) => eprintln!(\"protondb lookup failed: {e}\"),\n}","preventionTips":["Disable the 'lookup' button in the UI until inputs are non-empty or scan_library is checked","Trim inputs before passing them to ProtonOptions","Default scan_library = true for whole-library workflows"],"tags":["rust","validation","empty-input","tauri"],"backgroundTag":"missing-required-argument","analyzedSha":"8600b91f4246848bac346874daa9e61c1fc5677a","analyzedAt":"2026-09-12T14:29:19.317Z","contentChangedAt":"2026-09-12T14:29:19.317Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}