1pub 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 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 security::init_security(app_handle).expect("Falha ao inicializar sistema de segurança");
55
56 let db_state = database::initialize_databases(app_handle)
59 .expect("Falha ao inicializar bancos de dados");
60
61 app.manage(db_state);
62
63 if let Err(e) = initialize_app(app_handle) {
67 tracing::error!("Erro na inicialização pós-update: {}", e);
68 }
70
71 if let Err(e) = services::cf_aggregator::init_cf_index() {
74 tracing::warn!("CF desativado (fallback CB ativo): {}", e);
75 }
76
77 tracing::info!("Playlite iniciado com sucesso");
79
80 Ok(())
81 })
82 .invoke_handler(tauri::generate_handler![
83 database::init_db,
85 database::backup::export_database,
87 database::backup::import_database,
88 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 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 commands::plataforms::import_steam_library,
107 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 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 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 commands::ai_translation::translate_description,
130 commands::achievements::get_recent_achievements,
132 commands::caches::cleanup_cache,
134 commands::caches::clear_all_cache,
135 commands::caches::get_detailed_cache_stats,
136 commands::system::open_folder,
138 commands::system::open_file,
139 commands::version::get_app_version_info,
141 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}