BililiveRecorder/BililiveRecorder.WPF/Converters/ByteUnitsConverter.cs
2021-02-23 18:03:37 +08:00

36 lines
1.2 KiB
C#

using System;
using System.Globalization;
using System.Windows.Data;
namespace BililiveRecorder.WPF.Converters
{
public class ByteUnitsConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
const long Bytes = 1;
const long KiB = Bytes * 1024;
const long MiB = KiB * 1024;
const long GiB = MiB * 1024;
const long TiB = GiB * 1024;
const double d_KiB = KiB;
const double d_MiB = MiB;
const double d_GiB = GiB;
const double d_TiB = TiB;
var input = (long)value;
return input switch
{
< KiB => $"{input} {nameof(Bytes)}",
< MiB => $"{input / d_KiB:F2} {nameof(KiB)}",
< GiB => $"{input / d_MiB:F2} {nameof(MiB)}",
< TiB => $"{input / d_GiB:F2} {nameof(GiB)}",
_ => $"{input / d_TiB:F2} {nameof(TiB)}"
};
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => throw new NotImplementedException();
}
}