fix(handle invalid database): use set_file_name instead of pushing to

strings
This commit is contained in:
DecDuck
2025-01-09 12:27:32 +11:00
parent 7ab53f3357
commit 60d0a48a1a

View File

@ -1,10 +1,13 @@
use std::{ use std::{
collections::HashMap, fs::{self, create_dir_all}, path::{Path, PathBuf}, sync::{LazyLock, Mutex, RwLockWriteGuard} collections::HashMap,
fs::{self, create_dir_all},
path::{Path, PathBuf},
sync::{LazyLock, Mutex, RwLockWriteGuard},
}; };
use chrono::Utc; use chrono::Utc;
use directories::BaseDirs; use directories::BaseDirs;
use log::debug; use log::{debug, info};
use rustbreak::{DeSerError, DeSerializer, PathDatabase, RustbreakError}; use rustbreak::{DeSerError, DeSerializer, PathDatabase, RustbreakError};
use serde::{de::DeserializeOwned, Deserialize, Serialize}; use serde::{de::DeserializeOwned, Deserialize, Serialize};
use serde_with::serde_as; use serde_with::serde_as;
@ -12,7 +15,11 @@ use tauri::AppHandle;
use url::Url; use url::Url;
use crate::{ use crate::{
download_manager::downloadable_metadata::DownloadableMetadata, games::{library::push_game_update, state::GameStatusManager}, process::process_manager::Platform, settings::Settings, DB download_manager::downloadable_metadata::DownloadableMetadata,
games::{library::push_game_update, state::GameStatusManager},
process::process_manager::Platform,
settings::Settings,
DB,
}; };
#[derive(serde::Serialize, Clone, Deserialize)] #[derive(serde::Serialize, Clone, Deserialize)]
@ -70,7 +77,6 @@ pub struct DatabaseApplications {
pub transient_statuses: HashMap<DownloadableMetadata, ApplicationTransientStatus>, pub transient_statuses: HashMap<DownloadableMetadata, ApplicationTransientStatus>,
} }
#[derive(Serialize, Deserialize, Clone, Default)] #[derive(Serialize, Deserialize, Clone, Default)]
pub struct Database { pub struct Database {
#[serde(default)] #[serde(default)]
@ -237,13 +243,16 @@ fn handle_invalid_database(
let new_path = { let new_path = {
let time = Utc::now().timestamp(); let time = Utc::now().timestamp();
let mut base = db_path.clone(); let mut base = db_path.clone();
base.push("."); base.set_file_name(format!("drop.db.backup-{}", time.to_string()));
base.push(time.to_string());
base base
}; };
info!("{:?}", new_path);
fs::rename(&db_path, &new_path).unwrap(); fs::rename(&db_path, &new_path).unwrap();
let db = Database ::new(games_base_dir.into_os_string().into_string().unwrap(), Some(new_path.into())); let db = Database::new(
games_base_dir.into_os_string().into_string().unwrap(),
Some(new_path.into()),
);
PathDatabase::create_at_path(db_path, db).expect("Database could not be created") PathDatabase::create_at_path(db_path, db).expect("Database could not be created")
} }