game_manager_lib/commands/platforms/
amazon.rs1use 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 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}