Skip to main content

game_manager_lib/commands/platforms/
amazon.rs

1//! Amazon Games - Login (registro de dispositivo) e importação de biblioteca completa
2
3use crate::commands::platforms::core::{
4    format_import_empty, format_import_summary, format_login_success, persist_source_games,
5};
6use crate::database::AppState;
7use crate::errors::AppError;
8use crate::sources::amazon::AmazonSource;
9use tauri::{AppHandle, Emitter, State};
10use tracing::info;
11
12#[tauri::command]
13pub async fn amazon_login(app: AppHandle) -> Result<String, AppError> {
14    let source = AmazonSource::new(app);
15    source.login().await?;
16    Ok(format_login_success("Amazon"))
17}
18
19#[tauri::command]
20pub async fn amazon_logout(app: AppHandle) -> Result<(), AppError> {
21    let source = AmazonSource::new(app);
22    source.logout().await
23}
24
25#[tauri::command]
26pub fn amazon_is_authenticated(app: AppHandle) -> Result<bool, AppError> {
27    let source = AmazonSource::new(app);
28    source.is_authenticated()
29}
30
31#[tauri::command]
32pub async fn import_amazon_games(
33    app: AppHandle,
34    state: State<'_, AppState>,
35) -> Result<String, AppError> {
36    let source = AmazonSource::new(app.clone());
37
38    let local_games = crate::sources::amazon::import_installed()?;
39
40    // Sem login, mantém graceful degradation: só jogos instalados localmente.
41    let mut games = if source.is_authenticated().unwrap_or(false) {
42        source.fetch_library_detailed().await?
43    } else {
44        Vec::new()
45    };
46
47    crate::sources::amazon::merge_local_install_status(&mut games, local_games);
48
49    if games.is_empty() {
50        return Ok(format_import_empty("Amazon"));
51    }
52
53    let (inserted, updated, _newly_imported) = persist_source_games(&state, games).await?;
54    let message = format_import_summary("Amazon", inserted, updated);
55    info!("{}", message);
56
57    let _ = app.emit("library_updated", ());
58
59    Ok(message)
60}