show file sizes (basic version)

This commit is contained in:
2025-09-06 15:49:51 +02:00
parent cef77e86b7
commit 8c0d80d7fb
6 changed files with 71 additions and 37 deletions

View File

@@ -20,10 +20,10 @@ use crate::{
models::{
file::{
AbsoluteFilePath, CatError, CatRequest, CpError, CpRequest, CpResponse, File,
FileMimeType, FileName, FilePath, FileStream, FileType, LsError, LsRequest,
LsResponse, MkdirError, MkdirRequest, MvError, MvRequest, RelativeFilePath,
RmError, RmRequest, SaveError, SaveRequest, SaveResponse, StatError, StatRequest,
StatResponse, TouchError, TouchRequest,
FileMimeType, FileName, FilePath, FileSize, FileStream, FileType, LsError,
LsRequest, LsResponse, MkdirError, MkdirRequest, MvError, MvRequest,
RelativeFilePath, RmError, RmRequest, SaveError, SaveRequest, SaveResponse,
StatError, StatRequest, StatResponse, TouchError, TouchRequest,
},
warren::UploadFileStream,
},
@@ -108,28 +108,8 @@ impl FileSystem {
let mut files = Vec::new();
let parent = if include_parent {
let dir_name = FileName::new(
&dir_path
.file_name()
.context("Failed to get directory name")?
.to_owned()
.into_string()
.ok()
.context("Failed to get directory name")?,
)?;
Some(File::new(
dir_name,
FileType::Directory,
None,
get_btime(&dir_path),
))
} else {
None
};
let mut dir = fs::read_dir(&dir_path).await?;
let mut total_size = 0_u64;
while let Ok(Some(entry)) = dir.next_entry().await {
let name = entry
@@ -149,6 +129,8 @@ impl FileSystem {
}
};
let metadata = fs::metadata(entry.path()).await?;
let entry_size = metadata.size();
let created_at = get_btime(entry.path());
let mime_type = match file_type {
@@ -156,14 +138,43 @@ impl FileSystem {
_ => None,
};
total_size += entry_size;
files.push(File::new(
FileName::new(&name)?,
file_type,
mime_type,
FileSize::new(entry_size),
created_at,
));
}
tracing::info!("Parent size: {total_size}");
let parent = if include_parent {
let dir_name = FileName::new(
&dir_path
.file_name()
.context("Failed to get directory name")?
.to_owned()
.into_string()
.ok()
.context("Failed to get directory name")?,
)?;
let parent_size = FileSize::new(total_size);
Some(File::new(
dir_name,
FileType::Directory,
None,
parent_size,
get_btime(&dir_path),
))
} else {
None
};
Ok(LsResponse::new(files, parent))
}
@@ -408,9 +419,10 @@ impl FileSystem {
_ => None,
};
let file_size = FileSize::new(metadata.size());
let created_at = get_btime(&fs_path);
Ok(File::new(name, file_type, mime_type, created_at))
Ok(File::new(name, file_type, mime_type, file_size, created_at))
}
}