Skip to main content

game_manager_lib/commands/platforms/
amazon.rs

1use crate::commands::platforms::core::{format_login_success, spawn_import};
2use crate::errors::AppError;
3use crate::sources::amazon::AmazonSource;
4use tauri::AppHandle;
5
6#[tauri::command]
7pub async fn amazon_login(app: AppHandle) -> Result<String, AppError> {
8    let source = AmazonSource::new(app);
9    source.login().await?;
10    Ok(format_login_success("Amazon"))
11}
12
13#[tauri::command]
14pub async fn amazon_logout(app: AppHandle) -> Result<(), AppError> {
15    let source = AmazonSource::new(app);
16    source.logout().await
17}
18
19#[tauri::command]
20pub fn amazon_is_authenticated(app: AppHandle) -> Result<bool, AppError> {
21    let source = AmazonSource::new(app);
22    source.is_authenticated()
23}
24
25#[tauri::command]
26pub async fn import_amazon_games(app: AppHandle) -> Result<(), AppError> {
27    spawn_import(app, "Amazon", |app| async move {
28        let source = AmazonSource::new(app.clone());
29        let local_games = crate::sources::amazon::import_installed()?;
30
31        let mut games = if source.is_authenticated().unwrap_or(false) {
32            source.fetch_library_detailed().await?
33        } else {
34            Vec::new()
35        };
36
37        crate::sources::amazon::merge_local_install_status(&mut games, local_games);
38        Ok(games)
39    });
40    Ok(())
41}