Skip to main content

game_manager_lib/commands/platforms/
steam.rs

1//! Importa a biblioteca completa de jogos Steam do usuário.
2//!
3//! Obtém jogos de múltiplas fontes: instalados via arquivos VDF locais do Steam, não instalados
4//! via librarycache do Steam e usa como fallback a API para jogos não encontrados localmente.
5
6use crate::commands::platforms::core::{
7    format_import_empty, format_import_summary, persist_source_games,
8};
9use crate::database::AppState;
10use crate::errors::AppError;
11use crate::sources::steam;
12use tauri::{AppHandle, Emitter, State};
13use tracing::info;
14
15#[tauri::command]
16pub async fn import_steam_library(
17    app: AppHandle,
18    state: State<'_, AppState>,
19    api_key: String,
20    steam_id: String,
21    steam_root: String,
22) -> Result<String, AppError> {
23    use crate::sources::providers::GameSource; // Importa o Trait
24
25    // 1. Instancia o provedor baseado no novo modelo de Trait
26    let source = steam::SteamSource {
27        steam_root,
28        api_key,
29        steam_id,
30    };
31
32    // 2. Busca os jogos (VDF + Cache + API)
33    let games = source.fetch_games().await?;
34
35    if games.is_empty() {
36        return Ok(format_import_empty("Steam"));
37    }
38
39    // 3. Persiste usando a função genérica otimizada
40    let (inserted, updated, _newly_imported) = persist_source_games(&state, games).await?;
41    let message = format_import_summary("Steam", inserted, updated);
42    info!("{}", message);
43
44    // Notifica o frontend
45    let _ = app.emit("library_updated", ());
46
47    Ok(message)
48}