mirror of
https://github.com/SerenityOS/serenity.git
synced 2025-01-22 17:31:58 -05:00
AK+Userland: Return String from human_readable_size() functions
This commit is contained in:
parent
7e8cfb60eb
commit
388856dc7e
7 changed files with 23 additions and 23 deletions
|
@ -11,7 +11,7 @@
|
||||||
namespace AK {
|
namespace AK {
|
||||||
|
|
||||||
// FIXME: Remove this hackery once printf() supports floats.
|
// FIXME: Remove this hackery once printf() supports floats.
|
||||||
static ByteString number_string_with_one_decimal(u64 number, u64 unit, StringView suffix, UseThousandsSeparator use_thousands_separator)
|
static String number_string_with_one_decimal(u64 number, u64 unit, StringView suffix, UseThousandsSeparator use_thousands_separator)
|
||||||
{
|
{
|
||||||
constexpr auto max_unit_size = NumericLimits<u64>::max() / 10;
|
constexpr auto max_unit_size = NumericLimits<u64>::max() / 10;
|
||||||
VERIFY(unit < max_unit_size);
|
VERIFY(unit < max_unit_size);
|
||||||
|
@ -19,25 +19,25 @@ static ByteString number_string_with_one_decimal(u64 number, u64 unit, StringVie
|
||||||
auto integer_part = number / unit;
|
auto integer_part = number / unit;
|
||||||
auto decimal_part = (number % unit) * 10 / unit;
|
auto decimal_part = (number % unit) * 10 / unit;
|
||||||
if (use_thousands_separator == UseThousandsSeparator::Yes)
|
if (use_thousands_separator == UseThousandsSeparator::Yes)
|
||||||
return ByteString::formatted("{:'d}.{} {}", integer_part, decimal_part, suffix);
|
return MUST(String::formatted("{:'d}.{} {}", integer_part, decimal_part, suffix));
|
||||||
|
|
||||||
return ByteString::formatted("{}.{} {}", integer_part, decimal_part, suffix);
|
return MUST(String::formatted("{}.{} {}", integer_part, decimal_part, suffix));
|
||||||
}
|
}
|
||||||
|
|
||||||
ByteString human_readable_quantity(u64 quantity, HumanReadableBasedOn based_on, StringView unit, UseThousandsSeparator use_thousands_separator)
|
String human_readable_quantity(u64 quantity, HumanReadableBasedOn based_on, StringView unit, UseThousandsSeparator use_thousands_separator)
|
||||||
{
|
{
|
||||||
u64 size_of_unit = based_on == HumanReadableBasedOn::Base2 ? 1024 : 1000;
|
u64 size_of_unit = based_on == HumanReadableBasedOn::Base2 ? 1024 : 1000;
|
||||||
constexpr auto unit_prefixes = AK::Array { "", "K", "M", "G", "T", "P", "E" };
|
constexpr auto unit_prefixes = AK::Array { "", "K", "M", "G", "T", "P", "E" };
|
||||||
auto full_unit_suffix = [&](int index) {
|
auto full_unit_suffix = [&](int index) {
|
||||||
auto binary_infix = (based_on == HumanReadableBasedOn::Base2 && index != 0) ? "i"sv : ""sv;
|
auto binary_infix = (based_on == HumanReadableBasedOn::Base2 && index != 0) ? "i"sv : ""sv;
|
||||||
return ByteString::formatted("{}{}{}",
|
return MUST(String::formatted("{}{}{}",
|
||||||
unit_prefixes[index], binary_infix, unit);
|
unit_prefixes[index], binary_infix, unit));
|
||||||
};
|
};
|
||||||
|
|
||||||
auto size_of_current_unit = size_of_unit;
|
auto size_of_current_unit = size_of_unit;
|
||||||
|
|
||||||
if (quantity < size_of_unit)
|
if (quantity < size_of_unit)
|
||||||
return ByteString::formatted("{} {}", quantity, full_unit_suffix(0));
|
return MUST(String::formatted("{} {}", quantity, full_unit_suffix(0)));
|
||||||
|
|
||||||
for (size_t i = 1; i < unit_prefixes.size() - 1; i++) {
|
for (size_t i = 1; i < unit_prefixes.size() - 1; i++) {
|
||||||
auto suffix = full_unit_suffix(i);
|
auto suffix = full_unit_suffix(i);
|
||||||
|
@ -52,25 +52,25 @@ ByteString human_readable_quantity(u64 quantity, HumanReadableBasedOn based_on,
|
||||||
size_of_current_unit, full_unit_suffix(unit_prefixes.size() - 1), use_thousands_separator);
|
size_of_current_unit, full_unit_suffix(unit_prefixes.size() - 1), use_thousands_separator);
|
||||||
}
|
}
|
||||||
|
|
||||||
ByteString human_readable_size(u64 size, HumanReadableBasedOn based_on, UseThousandsSeparator use_thousands_separator)
|
String human_readable_size(u64 size, HumanReadableBasedOn based_on, UseThousandsSeparator use_thousands_separator)
|
||||||
{
|
{
|
||||||
return human_readable_quantity(size, based_on, "B"sv, use_thousands_separator);
|
return human_readable_quantity(size, based_on, "B"sv, use_thousands_separator);
|
||||||
}
|
}
|
||||||
|
|
||||||
ByteString human_readable_size_long(u64 size, UseThousandsSeparator use_thousands_separator)
|
String human_readable_size_long(u64 size, UseThousandsSeparator use_thousands_separator)
|
||||||
{
|
{
|
||||||
if (size < 1 * KiB) {
|
if (size < 1 * KiB) {
|
||||||
if (use_thousands_separator == UseThousandsSeparator::Yes)
|
if (use_thousands_separator == UseThousandsSeparator::Yes)
|
||||||
return ByteString::formatted("{:'d} bytes", size);
|
return MUST(String::formatted("{:'d} bytes", size));
|
||||||
|
|
||||||
return ByteString::formatted("{} bytes", size);
|
return MUST(String::formatted("{} bytes", size));
|
||||||
}
|
}
|
||||||
|
|
||||||
auto human_readable_size_string = human_readable_size(size, HumanReadableBasedOn::Base2, use_thousands_separator);
|
auto human_readable_size_string = human_readable_size(size, HumanReadableBasedOn::Base2, use_thousands_separator);
|
||||||
if (use_thousands_separator == UseThousandsSeparator::Yes)
|
if (use_thousands_separator == UseThousandsSeparator::Yes)
|
||||||
return ByteString::formatted("{} ({:'d} bytes)", human_readable_size_string, size);
|
return MUST(String::formatted("{} ({:'d} bytes)", human_readable_size_string, size));
|
||||||
|
|
||||||
return ByteString::formatted("{} ({} bytes)", human_readable_size_string, size);
|
return MUST(String::formatted("{} ({} bytes)", human_readable_size_string, size));
|
||||||
}
|
}
|
||||||
|
|
||||||
String human_readable_time(i64 time_in_seconds)
|
String human_readable_time(i64 time_in_seconds)
|
||||||
|
|
|
@ -20,10 +20,10 @@ enum class UseThousandsSeparator {
|
||||||
No
|
No
|
||||||
};
|
};
|
||||||
|
|
||||||
ByteString human_readable_size(u64 size, HumanReadableBasedOn based_on = HumanReadableBasedOn::Base2, UseThousandsSeparator use_thousands_separator = UseThousandsSeparator::No);
|
String human_readable_size(u64 size, HumanReadableBasedOn based_on = HumanReadableBasedOn::Base2, UseThousandsSeparator use_thousands_separator = UseThousandsSeparator::No);
|
||||||
ByteString human_readable_quantity(u64 quantity, HumanReadableBasedOn based_on = HumanReadableBasedOn::Base2, StringView unit = "B"sv, UseThousandsSeparator use_thousands_separator = UseThousandsSeparator::No);
|
String human_readable_quantity(u64 quantity, HumanReadableBasedOn based_on = HumanReadableBasedOn::Base2, StringView unit = "B"sv, UseThousandsSeparator use_thousands_separator = UseThousandsSeparator::No);
|
||||||
|
|
||||||
ByteString human_readable_size_long(u64 size, UseThousandsSeparator use_thousands_separator = UseThousandsSeparator::No);
|
String human_readable_size_long(u64 size, UseThousandsSeparator use_thousands_separator = UseThousandsSeparator::No);
|
||||||
String human_readable_time(i64 time_in_seconds);
|
String human_readable_time(i64 time_in_seconds);
|
||||||
String human_readable_digital_time(i64 time_in_seconds);
|
String human_readable_digital_time(i64 time_in_seconds);
|
||||||
|
|
||||||
|
|
|
@ -186,7 +186,7 @@ ErrorOr<void> PropertiesWindow::create_general_tab(GUI::TabWidget& tab_widget, b
|
||||||
m_size_label = general_tab.find_descendant_of_type_named<GUI::Label>("size");
|
m_size_label = general_tab.find_descendant_of_type_named<GUI::Label>("size");
|
||||||
m_size_label->set_text(S_ISDIR(st.st_mode)
|
m_size_label->set_text(S_ISDIR(st.st_mode)
|
||||||
? "Calculating..."_string
|
? "Calculating..."_string
|
||||||
: TRY(String::from_byte_string(human_readable_size_long(st.st_size, UseThousandsSeparator::Yes))));
|
: human_readable_size_long(st.st_size, UseThousandsSeparator::Yes));
|
||||||
|
|
||||||
auto* owner = general_tab.find_descendant_of_type_named<GUI::Label>("owner");
|
auto* owner = general_tab.find_descendant_of_type_named<GUI::Label>("owner");
|
||||||
owner->set_text(String::formatted("{} ({})", owner_name, st.st_uid).release_value_but_fixme_should_propagate_errors());
|
owner->set_text(String::formatted("{} ({})", owner_name, st.st_uid).release_value_but_fixme_should_propagate_errors());
|
||||||
|
@ -266,7 +266,7 @@ ErrorOr<void> PropertiesWindow::create_archive_tab(GUI::TabWidget& tab_widget, N
|
||||||
tab.find_descendant_of_type_named<GUI::Label>("archive_file_count")->set_text(TRY(String::number(statistics.file_count())));
|
tab.find_descendant_of_type_named<GUI::Label>("archive_file_count")->set_text(TRY(String::number(statistics.file_count())));
|
||||||
tab.find_descendant_of_type_named<GUI::Label>("archive_format")->set_text("ZIP"_string);
|
tab.find_descendant_of_type_named<GUI::Label>("archive_format")->set_text("ZIP"_string);
|
||||||
tab.find_descendant_of_type_named<GUI::Label>("archive_directory_count")->set_text(TRY(String::number(statistics.directory_count())));
|
tab.find_descendant_of_type_named<GUI::Label>("archive_directory_count")->set_text(TRY(String::number(statistics.directory_count())));
|
||||||
tab.find_descendant_of_type_named<GUI::Label>("archive_uncompressed_size")->set_text(TRY(String::from_byte_string(AK::human_readable_size(statistics.total_uncompressed_bytes()))));
|
tab.find_descendant_of_type_named<GUI::Label>("archive_uncompressed_size")->set_text(human_readable_size(statistics.total_uncompressed_bytes()));
|
||||||
|
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,7 +60,7 @@ ErrorOr<String> load_file_directory_page(AK::URL const& url)
|
||||||
contents.append("<tr>"sv);
|
contents.append("<tr>"sv);
|
||||||
contents.appendff("<td><span class=\"{}\"></span></td>", is_directory ? "folder" : "file");
|
contents.appendff("<td><span class=\"{}\"></span></td>", is_directory ? "folder" : "file");
|
||||||
contents.appendff("<td><a href=\"file://{}\">{}</a></td><td> </td>"sv, path, name);
|
contents.appendff("<td><a href=\"file://{}\">{}</a></td><td> </td>"sv, path, name);
|
||||||
contents.appendff("<td>{:10}</td><td> </td>", is_directory ? "-" : human_readable_size(st.st_size));
|
contents.appendff("<td>{:10}</td><td> </td>", is_directory ? "-"_string : human_readable_size(st.st_size));
|
||||||
contents.appendff("<td>{}</td>"sv, Core::DateTime::from_timestamp(st.st_mtime).to_byte_string());
|
contents.appendff("<td>{}</td>"sv, Core::DateTime::from_timestamp(st.st_mtime).to_byte_string());
|
||||||
contents.append("</tr>\n"sv);
|
contents.append("</tr>\n"sv);
|
||||||
}
|
}
|
||||||
|
|
|
@ -324,7 +324,7 @@ ErrorOr<void> Client::handle_directory_listing(String const& requested_path, Str
|
||||||
TRY(builder.try_append(escape_html_entities(name)));
|
TRY(builder.try_append(escape_html_entities(name)));
|
||||||
TRY(builder.try_append("</a></td><td> </td>"sv));
|
TRY(builder.try_append("</a></td><td> </td>"sv));
|
||||||
|
|
||||||
TRY(builder.try_appendff("<td>{:10}</td><td> </td>", is_directory ? "-" : human_readable_size(st.st_size)));
|
TRY(builder.try_appendff("<td>{:10}</td><td> </td>", is_directory ? "-"_string : human_readable_size(st.st_size)));
|
||||||
TRY(builder.try_append("<td>"sv));
|
TRY(builder.try_append("<td>"sv));
|
||||||
TRY(builder.try_append(TRY(Core::DateTime::from_timestamp(st.st_mtime).to_string())));
|
TRY(builder.try_append(TRY(Core::DateTime::from_timestamp(st.st_mtime).to_string())));
|
||||||
TRY(builder.try_append("</td>"sv));
|
TRY(builder.try_append("</td>"sv));
|
||||||
|
|
|
@ -56,7 +56,7 @@ static void closing_statistics()
|
||||||
warnln("{}+{} blocks out", statistics.total_blocks_out, statistics.partial_blocks_out);
|
warnln("{}+{} blocks out", statistics.total_blocks_out, statistics.partial_blocks_out);
|
||||||
if (statistics.status != Noxfer) {
|
if (statistics.status != Noxfer) {
|
||||||
auto elapsed_time = statistics.timer.elapsed_time();
|
auto elapsed_time = statistics.timer.elapsed_time();
|
||||||
ByteString copy_speed = "INF B/s";
|
String copy_speed = "INF B/s"_string;
|
||||||
if (!elapsed_time.is_zero()) {
|
if (!elapsed_time.is_zero()) {
|
||||||
auto speed = statistics.total_bytes_copied * 1000 / elapsed_time.to_milliseconds();
|
auto speed = statistics.total_bytes_copied * 1000 / elapsed_time.to_milliseconds();
|
||||||
copy_speed = human_readable_quantity(speed, AK::HumanReadableBasedOn::Base2, "B/s"sv);
|
copy_speed = human_readable_quantity(speed, AK::HumanReadableBasedOn::Base2, "B/s"sv);
|
||||||
|
|
|
@ -405,9 +405,9 @@ static bool print_filesystem_object(ByteString const& path, ByteString const& na
|
||||||
printf(" %4u,%4u ", major(st.st_rdev), minor(st.st_rdev));
|
printf(" %4u,%4u ", major(st.st_rdev), minor(st.st_rdev));
|
||||||
} else {
|
} else {
|
||||||
if (flag_human_readable) {
|
if (flag_human_readable) {
|
||||||
printf(" %10s ", human_readable_size(st.st_size).characters());
|
printf(" %10s ", human_readable_size(st.st_size).to_byte_string().characters());
|
||||||
} else if (flag_human_readable_si) {
|
} else if (flag_human_readable_si) {
|
||||||
printf(" %10s ", human_readable_size(st.st_size, AK::HumanReadableBasedOn::Base10).characters());
|
printf(" %10s ", human_readable_size(st.st_size, AK::HumanReadableBasedOn::Base10).to_byte_string().characters());
|
||||||
} else {
|
} else {
|
||||||
printf(" %10" PRIu64 " ", (uint64_t)st.st_size);
|
printf(" %10" PRIu64 " ", (uint64_t)st.st_size);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue