show file sizes (basic version)
This commit is contained in:
@@ -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))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user