game_manager_lib/
lib.rs

1//! # Playlite - Game Manager Library
2//!
3//! Fornece funcionalidades para:
4//!
5//! - Importar jogos do Steam
6//! - Gerenciar biblioteca pessoal
7//! - Wishlist com tracking de preços
8//! - Busca de jogos em tendência (RAWG API)
9//! - Busca de jogos grátis (GamerPower API)
10//! - Recomendação de jogos
11
12pub mod commands;
13mod constants;
14mod crypto;
15pub mod database;
16mod errors;
17pub mod initialization;
18pub mod models;
19mod secrets;
20mod security;
21pub mod services;
22pub mod utils;
23
24use crate::initialization::initialize_app;
25use crate::utils::logger;
26use tauri::Manager;
27
28#[cfg_attr(mobile, tauri::mobile_entry_point)]
29pub fn run() {
30    tauri::Builder::default()
31        .plugin(tauri_plugin_shell::init())
32        .plugin(tauri_plugin_opener::init())
33        .plugin(tauri_plugin_store::Builder::default().build())
34        .plugin(tauri_plugin_dialog::init())
35        .plugin(tauri_plugin_machine_uid::init())
36        .plugin(tauri_plugin_updater::Builder::new().build())
37        .setup(|app| {
38            let app_handle = app.handle();
39
40            // === LOGGING ===
41
42            let log_dir = app_handle
43                .path()
44                .app_log_dir()
45                .expect("Falha ao pegar pasta de log");
46
47            std::fs::create_dir_all(&log_dir).expect("Falha ao criar pasta de dev_logs");
48
49            let _guard = logger::init_logging(log_dir.clone());
50            app.manage(_guard);
51
52            // === SEGURANÇA ===
53
54            security::init_security(app_handle).expect("Falha ao inicializar sistema de segurança");
55
56            // === BANCOS DE DADOS ===
57
58            let db_state = database::initialize_databases(app_handle)
59                .expect("Falha ao inicializar bancos de dados");
60
61            app.manage(db_state);
62
63            // === INICIALIZAÇÃO PÓS-UPDATE ===
64
65            // Verifica se houve atualização e faz backup/migração se necessário
66            if let Err(e) = initialize_app(app_handle) {
67                tracing::error!("Erro na inicialização pós-update: {}", e);
68                // Não falha a aplicação, apenas loga o erro
69            }
70
71            // === COLLABORATIVE FILTERING ===
72
73            if let Err(e) = services::cf_aggregator::init_cf_index() {
74                tracing::warn!("CF desativado (fallback CB ativo): {}", e);
75            }
76
77            // Log de inicialização completa
78            tracing::info!("Playlite iniciado com sucesso");
79
80            Ok(())
81        })
82        .invoke_handler(tauri::generate_handler![
83            // Comando de Inicialização do Banco de Dados
84            database::init_db,
85            // Comandos de Backup e Restauração
86            database::backup::export_database,
87            database::backup::import_database,
88            // Comandos de Jogos (CRUD)
89            commands::games::add_game,
90            commands::games::get_games,
91            commands::games::get_library_game_details,
92            commands::games::toggle_favorite,
93            commands::games::delete_game,
94            commands::games::update_game,
95            commands::games::update_game_details,
96            // Comandos da Lista de Desejos
97            commands::wishlist::search_wishlist_game,
98            commands::wishlist::add_to_wishlist,
99            commands::wishlist::get_wishlist,
100            commands::wishlist::remove_from_wishlist,
101            commands::wishlist::check_wishlist_status,
102            commands::wishlist::refresh_prices,
103            commands::wishlist::import_wishlist,
104            commands::wishlist::fetch_wishlist_covers,
105            // Comandos de Importação de Plataformas
106            commands::plataforms::import_steam_library,
107            // Comandos de Metadados (Enriquecimento, Capas, Refresh, Busca)
108            commands::metadata::enrichment::update_metadata,
109            commands::metadata::covers::fetch_missing_covers,
110            commands::metadata::refresh::check_and_refresh_background,
111            commands::metadata::search::get_trending_games,
112            commands::metadata::search::get_upcoming_games,
113            commands::metadata::search::fetch_game_details,
114            commands::metadata::search::get_active_giveaways,
115            // Comandos de Configuração (Secrets)
116            commands::settings::set_secret,
117            commands::settings::get_secret,
118            commands::settings::delete_secret,
119            commands::settings::list_secrets,
120            commands::settings::get_secrets,
121            commands::settings::set_secrets,
122            // Comandos de Recomendação
123            commands::recommendation::get_user_profile,
124            commands::recommendation::recommend_hybrid_library,
125            commands::recommendation::recommend_collaborative_library,
126            commands::recommendation::recommend_from_library,
127            commands::recommendation::generate_recommendation_analysis,
128            // Comandos de Tradução de Descrição
129            commands::ai_translation::translate_description,
130            // Comandos de Conquistas de Jogos
131            commands::achievements::get_recent_achievements,
132            // Comandos de Cache de Metadados
133            commands::caches::cleanup_cache,
134            commands::caches::clear_all_cache,
135            commands::caches::get_detailed_cache_stats,
136            // Comandos de Sistema
137            commands::system::open_folder,
138            commands::system::open_file,
139            // Comandos de Versionamento
140            commands::version::get_app_version_info,
141            // Comandos de Imagem
142            services::images::cache_cover_image,
143            services::images::check_local_cover,
144            services::images::clear_cover_cache,
145        ])
146        .run(tauri::generate_context!())
147        .expect("error while running tauri application");
148}