refactor: Convert some things from static to const and refactor into drop-consts

Signed-off-by: quexeky <git@quexeky.dev>
This commit is contained in:
quexeky
2025-10-13 08:59:00 +11:00
parent ef9f8caa54
commit f0e46c4a46
22 changed files with 76 additions and 47 deletions

13
Cargo.lock generated
View File

@ -821,6 +821,7 @@ version = "0.1.0"
dependencies = [
"database",
"dirs 6.0.0",
"drop-consts",
"log",
"regex",
"rustix 1.1.2",
@ -1091,6 +1092,7 @@ version = "0.1.0"
dependencies = [
"chrono",
"dirs 6.0.0",
"drop-consts",
"log",
"native_model",
"rustbreak",
@ -1376,6 +1378,7 @@ dependencies = [
"deranged 0.4.0",
"dirs 6.0.0",
"download_manager",
"drop-consts",
"droplet-rs",
"dynfmt",
"filetime",
@ -1438,6 +1441,13 @@ dependencies = [
"zstd",
]
[[package]]
name = "drop-consts"
version = "0.1.0"
dependencies = [
"dirs 6.0.0",
]
[[package]]
name = "droplet-rs"
version = "0.7.3"
@ -1865,6 +1875,7 @@ dependencies = [
"boxcar",
"database",
"download_manager",
"drop-consts",
"hex 0.4.3",
"log",
"md5 0.8.0",
@ -4281,6 +4292,7 @@ dependencies = [
"chrono",
"client",
"database",
"drop-consts",
"dynfmt",
"games",
"log",
@ -4640,6 +4652,7 @@ dependencies = [
"chrono",
"client",
"database",
"drop-consts",
"droplet-rs",
"gethostname",
"hex 0.4.3",

View File

@ -8,7 +8,7 @@ members = [
"utils",
"cloud_saves",
"download_manager",
"games",
"games", "drop-consts",
]
resolver = "3"

View File

@ -1,15 +1,12 @@
use std::{
ffi::OsStr,
path::PathBuf,
process::{Command, Stdio},
sync::LazyLock,
cell::LazyCell, ffi::OsStr, path::PathBuf, process::{Command, Stdio}
};
use log::info;
pub static COMPAT_INFO: LazyLock<Option<CompatInfo>> = LazyLock::new(create_new_compat_info);
pub const COMPAT_INFO: LazyCell<Option<CompatInfo>> = LazyCell::new(create_new_compat_info);
pub static UMU_LAUNCHER_EXECUTABLE: LazyLock<Option<PathBuf>> = LazyLock::new(|| {
pub const UMU_LAUNCHER_EXECUTABLE: LazyCell<Option<PathBuf>> = LazyCell::new(|| {
let x = get_umu_executable();
info!("{:?}", &x);
x

View File

@ -6,6 +6,7 @@ edition = "2024"
[dependencies]
database = { version = "0.1.0", path = "../database" }
dirs = "6.0.0"
drop-consts = { version = "0.1.0", path = "../drop-consts" }
log = "0.4.28"
regex = "1.11.3"
rustix = "1.1.2"

View File

@ -2,7 +2,8 @@ use std::{collections::HashMap, path::PathBuf, str::FromStr};
#[cfg(target_os = "linux")]
use database::platform::Platform;
use database::{GameVersion, db::DATA_ROOT_DIR};
use database::GameVersion;
use drop_consts::DATA_ROOT_DIR;
use log::warn;
use crate::error::BackupError;

View File

@ -6,6 +6,7 @@ edition = "2024"
[dependencies]
chrono = "0.4.42"
dirs = "6.0.0"
drop-consts = { version = "0.1.0", path = "../drop-consts" }
log = "0.4.28"
native_model = { version = "0.6.4", features = ["rmp_serde_1_3"], git = "https://github.com/Drop-OSS/native_model.git"}
rustbreak = "2.0.0"

View File

@ -1,6 +1,5 @@
use std::{
path::PathBuf,
sync::{Arc, LazyLock},
sync::LazyLock,
};
use rustbreak::{DeSerError, DeSerializer};
@ -10,19 +9,6 @@ use crate::interface::{DatabaseImpls, DatabaseInterface};
pub static DB: LazyLock<DatabaseInterface> = LazyLock::new(DatabaseInterface::set_up_database);
#[cfg(not(debug_assertions))]
static DATA_ROOT_PREFIX: &str = "drop";
#[cfg(debug_assertions)]
static DATA_ROOT_PREFIX: &str = "drop-debug";
pub static DATA_ROOT_DIR: LazyLock<Arc<PathBuf>> = LazyLock::new(|| {
Arc::new(
dirs::data_dir()
.expect("Failed to get data dir")
.join(DATA_ROOT_PREFIX),
)
});
// Custom JSON serializer to support everything we need
#[derive(Debug, Default, Clone)]
pub struct DropDatabaseSerializer;
@ -39,7 +25,7 @@ impl<T: native_model::Model + Serialize + DeserializeOwned> DeSerializer<T>
s.read_to_end(&mut buf)
.map_err(|e| rustbreak::error::DeSerError::Other(e.into()))?;
let (val, _version) =
native_model::decode(buf).map_err(|e| DeSerError::Internal(e.to_string()))?;
native_model::decode(buf).map_err(|e| rustbreak::error::DeSerError::Internal(e.to_string()))?;
Ok(val)
}
}

View File

@ -7,12 +7,13 @@ use std::{
};
use chrono::Utc;
use drop_consts::DATA_ROOT_DIR;
use log::{debug, error, info, warn};
use rustbreak::{PathDatabase, RustbreakError};
use url::Url;
use crate::{
db::{DATA_ROOT_DIR, DB, DropDatabaseSerializer},
db::{DB, DropDatabaseSerializer},
models::data::Database,
};

7
drop-consts/Cargo.toml Normal file
View File

@ -0,0 +1,7 @@
[package]
name = "drop-consts"
version = "0.1.0"
edition = "2024"
[dependencies]
dirs = "6.0.0"

23
drop-consts/src/lib.rs Normal file
View File

@ -0,0 +1,23 @@
use std::{cell::LazyCell, path::PathBuf};
#[cfg(not(debug_assertions))]
pub const DATA_ROOT_PREFIX: &str = "drop";
#[cfg(debug_assertions)]
pub const DATA_ROOT_PREFIX: &str = "drop-debug";
pub const DATA_ROOT_DIR: LazyCell<PathBuf> = LazyCell::new(|| {
dirs::data_dir()
.expect("Failed to get data dir")
.join(DATA_ROOT_PREFIX)
});
pub const DROP_DATA_PATH: &str = ".dropdata";
// Downloads
pub const MAX_PACKET_LENGTH: usize = 4096 * 4;
pub const BUMP_SIZE: usize = 4096 * 16;
pub const RETRY_COUNT: usize = 3;
pub const TARGET_BUCKET_SIZE: usize = 63 * 1000 * 1000;
pub const MAX_FILES_PER_BUCKET: usize = (1024 / 4) - 1;

View File

@ -24,3 +24,4 @@ throttle_my_fn = "0.2.6"
utils = { version = "0.1.0", path = "../utils" }
native_model = { version = "0.6.4", features = ["rmp_serde_1_3"], git = "https://github.com/Drop-OSS/native_model.git"}
serde_json = "1.0.145"
drop-consts = { version = "0.1.0", path = "../drop-consts" }

View File

@ -9,6 +9,7 @@ use download_manager::util::download_thread_control_flag::{
DownloadThreadControl, DownloadThreadControlFlag,
};
use download_manager::util::progress_object::{ProgressHandle, ProgressObject};
use drop_consts::{MAX_FILES_PER_BUCKET, RETRY_COUNT, TARGET_BUCKET_SIZE};
use log::{debug, error, info, warn};
use rayon::ThreadPoolBuilder;
use remote::auth::generate_authorization_header;
@ -39,11 +40,6 @@ use crate::state::GameStatusManager;
use super::download_logic::download_game_bucket;
use super::drop_data::DropData;
static RETRY_COUNT: usize = 3;
const TARGET_BUCKET_SIZE: usize = 63 * 1000 * 1000;
const MAX_FILES_PER_BUCKET: usize = (1024 / 4) - 1;
pub struct GameDownloadAgent {
pub id: String,
pub version: String,

View File

@ -15,6 +15,7 @@ use download_manager::util::download_thread_control_flag::{
DownloadThreadControl, DownloadThreadControlFlag,
};
use download_manager::util::progress_object::ProgressHandle;
use drop_consts::{BUMP_SIZE, MAX_PACKET_LENGTH};
use log::{debug, info, warn};
use md5::{Context, Digest};
use remote::auth::generate_authorization_header;
@ -25,9 +26,6 @@ use reqwest::blocking::Response;
use crate::downloads::manifest::{ChunkBody, DownloadBucket, DownloadContext, DownloadDrop};
static MAX_PACKET_LENGTH: usize = 4096 * 4;
static BUMP_SIZE: usize = 4096 * 16;
pub struct DropWriter<W: Write> {
hasher: Context,
destination: BufWriter<W>,

View File

@ -5,14 +5,13 @@ use std::{
path::{Path, PathBuf},
};
use drop_consts::DROP_DATA_PATH;
use log::error;
use native_model::{Decode, Encode};
use utils::lock;
pub type DropData = v1::DropData;
pub static DROP_DATA_PATH: &str = ".dropdata";
pub mod v1 {
use std::{collections::HashMap, path::PathBuf, sync::Mutex};

View File

@ -1,10 +1,11 @@
use std::fs;
use database::{DownloadType, DownloadableMetadata, borrow_db_mut_checked};
use drop_consts::DROP_DATA_PATH;
use log::warn;
use crate::{
downloads::drop_data::{DROP_DATA_PATH, DropData},
downloads::drop_data::DropData,
library::set_partially_installed_db,
};

View File

@ -7,6 +7,7 @@ edition = "2024"
chrono = "0.4.42"
client = { version = "0.1.0", path = "../client" }
database = { version = "0.1.0", path = "../database" }
drop-consts = { version = "0.1.0", path = "../drop-consts" }
dynfmt = "0.1.5"
games = { version = "0.1.0", path = "../games" }
log = "0.4.28"

View File

@ -12,8 +12,9 @@ use std::{
use database::{
ApplicationTransientStatus, Database, DownloadType, DownloadableMetadata, GameDownloadStatus,
GameVersion, borrow_db_checked, borrow_db_mut_checked, db::DATA_ROOT_DIR, platform::Platform,
GameVersion, borrow_db_checked, borrow_db_mut_checked, platform::Platform,
};
use drop_consts::DATA_ROOT_DIR;
use dynfmt::Format;
use dynfmt::SimpleCurlyFormat;
use games::{library::push_game_update, state::GameStatusManager};

View File

@ -8,6 +8,7 @@ bitcode = "0.6.7"
chrono = "0.4.42"
client = { version = "0.1.0", path = "../client" }
database = { version = "0.1.0", path = "../database" }
drop-consts = { version = "0.1.0", path = "../drop-consts" }
droplet-rs = "0.7.3"
gethostname = "1.0.2"
hex = "0.4.3"

View File

@ -1,10 +1,8 @@
use std::{
fs::{self, File},
io::Read,
sync::LazyLock,
cell::LazyCell, fs::{self, File}, io::Read
};
use database::db::DATA_ROOT_DIR;
use drop_consts::DATA_ROOT_DIR;
use log::{debug, info, warn};
use reqwest::Certificate;
use serde::Deserialize;
@ -19,10 +17,10 @@ impl DropHealthcheck {
&self.app_name
}
}
static DROP_CERT_BUNDLE: LazyLock<Vec<Certificate>> = LazyLock::new(fetch_certificates);
pub static DROP_CLIENT_SYNC: LazyLock<reqwest::blocking::Client> = LazyLock::new(get_client_sync);
pub static DROP_CLIENT_ASYNC: LazyLock<reqwest::Client> = LazyLock::new(get_client_async);
pub static DROP_CLIENT_WS_CLIENT: LazyLock<reqwest::Client> = LazyLock::new(get_client_ws);
const DROP_CERT_BUNDLE: LazyCell<Vec<Certificate>> = LazyCell::new(fetch_certificates);
pub const DROP_CLIENT_SYNC: LazyCell<reqwest::blocking::Client> = LazyCell::new(get_client_sync);
pub const DROP_CLIENT_ASYNC: LazyCell<reqwest::Client> = LazyCell::new(get_client_async);
pub const DROP_CLIENT_WS_CLIENT: LazyCell<reqwest::Client> = LazyCell::new(get_client_ws);
fn fetch_certificates() -> Vec<Certificate> {
let certificate_dir = DATA_ROOT_DIR.join("certificates");

View File

@ -87,6 +87,7 @@ remote = { version = "0.1.0", path = "../remote" }
utils = { path = "../utils" }
games = { version = "0.1.0", path = "../games" }
download_manager = { version = "0.1.0", path = "../download_manager" }
drop-consts = { version = "0.1.0", path = "../drop-consts" }
[dependencies.dynfmt]
version = "0.1.5"

View File

@ -14,6 +14,7 @@ use std::{
use ::client::{app_status::AppStatus, autostart::sync_autostart_on_startup, user::User};
use ::download_manager::DownloadManagerWrapper;
use drop_consts::DATA_ROOT_DIR;
use ::games::{library::Game, scan::scan_install_dirs};
use ::process::ProcessManagerWrapper;
use ::remote::{
@ -26,7 +27,7 @@ use ::remote::{
utils::DROP_CLIENT_ASYNC,
};
use database::{
DB, GameDownloadStatus, borrow_db_checked, borrow_db_mut_checked, db::DATA_ROOT_DIR,
DB, GameDownloadStatus, borrow_db_checked, borrow_db_mut_checked,
interface::DatabaseImpls,
};
use log::{LevelFilter, debug, info, warn};

View File

@ -5,9 +5,10 @@ use std::{
};
use database::{
Settings, borrow_db_checked, borrow_db_mut_checked, db::DATA_ROOT_DIR, debug::SystemData,
Settings, borrow_db_checked, borrow_db_mut_checked, debug::SystemData,
};
use download_manager::error::DownloadManagerError;
use drop_consts::DATA_ROOT_DIR;
use games::scan::scan_install_dirs;
use log::error;
use serde_json::Value;