mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 12:07:45 +00:00
LibArchive: Extract logic for calculating ZIP statistics
This commit is contained in:
parent
60e35f2a97
commit
8d53442187
5 changed files with 63 additions and 25 deletions
|
@ -110,24 +110,14 @@ static ErrorOr<Optional<String>> zip_details(StringView description, StringView
|
|||
{
|
||||
auto mapped_file = TRY(Core::MappedFile::map(path));
|
||||
auto zip_file = Archive::Zip::try_create(mapped_file->bytes());
|
||||
u32 files = 0;
|
||||
u32 directories = 0;
|
||||
u64 total_bytes = 0;
|
||||
TRY(zip_file->for_each_member([&](auto zip_member) -> ErrorOr<IterationDecision> {
|
||||
if (zip_member.is_directory)
|
||||
directories++;
|
||||
else
|
||||
files++;
|
||||
total_bytes += zip_member.uncompressed_size;
|
||||
return IterationDecision::Continue;
|
||||
}));
|
||||
auto statistics = TRY(zip_file->calculate_statistics());
|
||||
return TRY(String::formatted("{}, {} {}, {} {} totaling {} uncompressed",
|
||||
description,
|
||||
directories,
|
||||
directories == 1 ? "directory" : "directories",
|
||||
files,
|
||||
files == 1 ? "file" : "files",
|
||||
AK::human_readable_size(total_bytes)));
|
||||
statistics.directory_count(),
|
||||
statistics.directory_count() == 1 ? "directory" : "directories",
|
||||
statistics.file_count(),
|
||||
statistics.file_count() == 1 ? "file" : "files",
|
||||
AK::human_readable_size(statistics.total_uncompressed_bytes())));
|
||||
}
|
||||
|
||||
static ErrorOr<Optional<String>> elf_details(StringView description, StringView path)
|
||||
|
|
|
@ -146,22 +146,17 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
|||
if (list_files) {
|
||||
outln(" Length Date Time Name");
|
||||
outln("--------- ---------- -------- ----");
|
||||
u32 members_count = 0;
|
||||
u64 total_size = 0;
|
||||
TRY(zip_file->for_each_member([&](auto zip_member) -> ErrorOr<IterationDecision> {
|
||||
members_count++;
|
||||
|
||||
auto time = time_from_packed_dos(zip_member.modification_date, zip_member.modification_time);
|
||||
auto time_str = TRY(Core::DateTime::from_timestamp(time.seconds_since_epoch()).to_string());
|
||||
|
||||
total_size += zip_member.uncompressed_size;
|
||||
|
||||
outln("{:>9} {} {}", zip_member.uncompressed_size, time_str, zip_member.name);
|
||||
|
||||
return IterationDecision::Continue;
|
||||
}));
|
||||
auto statistics = TRY(zip_file->calculate_statistics());
|
||||
outln("--------- ----");
|
||||
outln("{:>9} {} files", total_size, members_count);
|
||||
outln("{:>9} {} files", statistics.total_uncompressed_bytes(), statistics.member_count());
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue