From e1e97ef79d93043ab72cc4935e57c5340e5de578 Mon Sep 17 00:00:00 2001 From: 409 <409dev@protonmail.com> Date: Sat, 6 Sep 2025 16:23:42 +0200 Subject: [PATCH] recursively get file size for directories --- backend/src/lib/outbound/file_system.rs | 35 ++++++++++++++++++------- frontend/composables/useWarrenPath.ts | 4 +-- frontend/lib/api/warrens.ts | 1 + frontend/pages/warrens/files.vue | 6 ++--- 4 files changed, 32 insertions(+), 14 deletions(-) diff --git a/backend/src/lib/outbound/file_system.rs b/backend/src/lib/outbound/file_system.rs index 286272d..c4a0f59 100644 --- a/backend/src/lib/outbound/file_system.rs +++ b/backend/src/lib/outbound/file_system.rs @@ -109,7 +109,7 @@ impl FileSystem { let mut files = Vec::new(); let mut dir = fs::read_dir(&dir_path).await?; - let mut total_size = 0_u64; + let parent_size = FileSize::new(file_size_recursive(&dir_path).await?); while let Ok(Some(entry)) = dir.next_entry().await { let name = entry @@ -129,8 +129,8 @@ impl FileSystem { } }; - let metadata = fs::metadata(entry.path()).await?; - let entry_size = metadata.size(); + let file_size = FileSize::new(file_size_recursive(entry.path()).await?); + let created_at = get_btime(entry.path()); let mime_type = match file_type { @@ -138,13 +138,11 @@ impl FileSystem { _ => None, }; - total_size += entry_size; - files.push(File::new( FileName::new(&name)?, file_type, mime_type, - FileSize::new(entry_size), + file_size, created_at, )); } @@ -160,8 +158,6 @@ impl FileSystem { .context("Failed to get directory name")?, )?; - let parent_size = FileSize::new(total_size); - Some(File::new( dir_name, FileType::Directory, @@ -417,7 +413,7 @@ impl FileSystem { _ => None, }; - let file_size = FileSize::new(metadata.size()); + let file_size = FileSize::new(file_size_recursive(target_path).await?); let created_at = get_btime(&fs_path); Ok(File::new(name, file_type, mime_type, file_size, created_at)) @@ -716,3 +712,24 @@ impl PathRequest { }) } } + +async fn file_size_recursive
(path: P) -> io::Result