From f88fa5794cb08a6b83c637448d9e660bf96ff73e Mon Sep 17 00:00:00 2001 From: ddidderr Date: Fri, 14 Nov 2025 11:08:37 +0100 Subject: [PATCH] skip descending into local --- crates/lanspread-peer/src/lib.rs | 39 +++++++++++++++++++------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/crates/lanspread-peer/src/lib.rs b/crates/lanspread-peer/src/lib.rs index 18f7888..a22024e 100644 --- a/crates/lanspread-peer/src/lib.rs +++ b/crates/lanspread-peer/src/lib.rs @@ -2558,6 +2558,16 @@ fn is_virtual_interface(name: &str) -> bool { VIRTUAL_HINTS.iter().any(|hint| lower.contains(hint)) } +#[cfg(target_os = "windows")] +fn is_local_dir_name(name: &str) -> bool { + name.eq_ignore_ascii_case("local") +} + +#[cfg(not(target_os = "windows"))] +fn is_local_dir_name(name: &str) -> bool { + name == "local" +} + async fn get_game_file_descriptions( game_id: &str, game_dir: &str, @@ -2574,27 +2584,24 @@ async fn get_game_file_descriptions( let mut file_descriptions = Vec::new(); - let local_dir = game_path.join("local"); - for entry in walkdir::WalkDir::new(&game_path) .into_iter() .filter_entry(|entry| { - let path = entry.path(); - - // Skip the local install folder; it's not meant to sync. - if path.starts_with(&local_dir) { - return false; - } - - // Root-level exclusions only. - if entry.depth() == 1 - && let Some(name) = path.file_name().and_then(|n| n.to_str()) - { - if entry.file_type().is_dir() && name == ".sync" { + if entry.depth() == 1 { + if entry.file_type().is_dir() + && entry.file_name().to_str().is_some_and(is_local_dir_name) + { + // Skip the local install folder entirely so WalkDir never enters it. return false; } - if entry.file_type().is_file() && name == ".softlan_game_installed" { - return false; + + if let Some(name) = entry.file_name().to_str() { + if entry.file_type().is_dir() && name == ".sync" { + return false; + } + if entry.file_type().is_file() && name == ".softlan_game_installed" { + return false; + } } }