game_manager_lib/
initialization.rs1use crate::database;
10use crate::errors::AppError;
11use chrono::Utc;
12use tauri::{AppHandle, Emitter, Manager};
13
14pub fn initialize_app(app: &AppHandle) -> Result<(), AppError> {
23 let current_version = app.package_info().version.to_string();
24 let previous_version = database::configs::get_stored_app_version(app)?;
25
26 let state: tauri::State<database::AppState> = app.state();
28 let metadata_conn = state.metadata_db.lock().map_err(|_| AppError::MutexError)?;
29
30 if database::configs::get_config(&metadata_conn, "install_date")?.is_none() {
32 let now = Utc::now().to_rfc3339();
33 database::configs::set_config(&metadata_conn, "install_date", &now)?;
34 tracing::info!("Primeira execução detectada. Data salva: {}", now);
35 }
36
37 drop(metadata_conn);
38
39 tracing::info!(
40 "Inicializando app - Versão anterior: {}, Atual: {}",
41 previous_version,
42 current_version
43 );
44
45 if previous_version != current_version {
47 handle_version_update(app, &previous_version, ¤t_version)?;
48 } else {
49 tracing::info!("Nenhuma atualização detectada");
50 }
51
52 Ok(())
53}
54
55fn handle_version_update(
57 app: &AppHandle,
58 previous_version: &str,
59 current_version: &str,
60) -> Result<(), AppError> {
61 if let Some(backup_path) =
63 database::backup::backup_if_major_update(app, previous_version, current_version)?
64 {
65 tracing::info!("Backup automático criado em: {:?}", backup_path);
66
67 let backup_path_str = backup_path.to_string_lossy().to_string();
69 let _ = app.emit("backup-created", backup_path_str);
70 }
71
72 let state: tauri::State<database::AppState> = app.state();
74 let lib_conn = state.library_db.lock().map_err(|_| AppError::MutexError)?;
75 database::migrations::run_migrations(app, &lib_conn)?;
76 drop(lib_conn);
77
78 database::configs::store_app_version(app, current_version)?;
80
81 let schema_version = app.package_info().version.major as u32;
83 database::configs::store_schema_version(app, schema_version)?;
84
85 update_last_updated_timestamp(app)?;
87
88 tracing::info!("App inicializado com sucesso na versão {}", current_version);
89
90 Ok(())
91}
92
93fn update_last_updated_timestamp(app: &AppHandle) -> Result<(), AppError> {
95 let state: tauri::State<database::AppState> = app.state();
96 let metadata_conn = state.metadata_db.lock().map_err(|_| AppError::MutexError)?;
97 let now = Utc::now().to_rfc3339();
98 database::configs::set_config(&metadata_conn, "last_updated_at", &now)?;
99 Ok(())
100}