From 84eeebb633c3c02aa97687e40381dc424a24dc39 Mon Sep 17 00:00:00 2001 From: ddidderr Date: Tue, 18 Nov 2025 19:47:41 +0100 Subject: [PATCH] feat: Exclude `.sync`, `.softlan_first_start_done`, and local directories from root size calculation. --- crates/lanspread-peer/src/lib.rs | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/crates/lanspread-peer/src/lib.rs b/crates/lanspread-peer/src/lib.rs index eb34dab..089ce6a 100644 --- a/crates/lanspread-peer/src/lib.rs +++ b/crates/lanspread-peer/src/lib.rs @@ -1240,7 +1240,7 @@ async fn load_local_game_db(game_dir: &str) -> eyre::Result { None }; - let size = calculate_directory_size(&path).await?; + let size = calculate_directory_size(&path, true).await?; let game = Game { id: game_id.to_string(), name: game_id.to_string(), @@ -1288,16 +1288,28 @@ async fn local_dir_has_content(path: &Path) -> bool { } } -async fn calculate_directory_size(dir: &Path) -> eyre::Result { +async fn calculate_directory_size(dir: &Path, is_root: bool) -> eyre::Result { let mut total_size = 0u64; let mut entries = tokio::fs::read_dir(dir).await?; while let Some(entry) = entries.next_entry().await? { let path = entry.path(); + let name = entry.file_name(); + let name_str = name.to_string_lossy(); + + if is_root { + if name_str == ".sync" || name_str == ".softlan_first_start_done" { + continue; + } + if entry.file_type().await?.is_dir() && is_local_dir_name(&name_str) { + continue; + } + } + let metadata = tokio::fs::metadata(&path).await?; if metadata.is_dir() { - total_size += Box::pin(calculate_directory_size(&path)).await?; + total_size += Box::pin(calculate_directory_size(&path, false)).await?; } else { total_size += metadata.len(); }