From ee7ac8b28bebceec3071ecd680cd6d6bcc1b4962 Mon Sep 17 00:00:00 2001 From: TheXamlGuy Date: Wed, 24 Jul 2024 22:11:36 +0100 Subject: [PATCH] Added FileSizeNameConverter --- .../BooleanToPasswordCharConverter.cs | 2 +- Toolkit.UI.Avalonia/FileSizeNameConverter.cs | 37 +++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 Toolkit.UI.Avalonia/FileSizeNameConverter.cs diff --git a/Toolkit.UI.Avalonia/BooleanToPasswordCharConverter.cs b/Toolkit.UI.Avalonia/BooleanToPasswordCharConverter.cs index e875801..4aa88c7 100644 --- a/Toolkit.UI.Avalonia/BooleanToPasswordCharConverter.cs +++ b/Toolkit.UI.Avalonia/BooleanToPasswordCharConverter.cs @@ -18,4 +18,4 @@ public class BooleanToPasswordCharConverter : public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) => throw new NotImplementedException(); -} \ No newline at end of file +} diff --git a/Toolkit.UI.Avalonia/FileSizeNameConverter.cs b/Toolkit.UI.Avalonia/FileSizeNameConverter.cs new file mode 100644 index 0000000..b4743ba --- /dev/null +++ b/Toolkit.UI.Avalonia/FileSizeNameConverter.cs @@ -0,0 +1,37 @@ +using Avalonia.Data.Converters; +using Avalonia.Markup.Xaml; +using System.Globalization; + +namespace Toolkit.UI.Avalonia; + +public class FileSizeNameConverter : + MarkupExtension, + IValueConverter +{ + public override object ProvideValue(IServiceProvider serviceProvider) => + this; + + public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture) + { + if (value is long fileSize) + { + string[] sizeSuffixes = ["bytes", "KB", "MB", "GB", "TB", "PB"]; + + int order = 0; + double adjustedSize = fileSize; + + while (adjustedSize >= 1024 && order < sizeSuffixes.Length - 1) + { + order++; + adjustedSize /= 1024; + } + + return $"{adjustedSize:0.##} {sizeSuffixes[order]}"; + } + + return "0 bytes"; + } + + public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) => + throw new NotImplementedException(); +}