Simplify FileSize

This commit is contained in:
Alexey Golub 2020-04-21 14:36:38 +03:00
parent 6f1c944cb3
commit f153aad3f1
2 changed files with 34 additions and 55 deletions

View file

@ -4,79 +4,58 @@ namespace DiscordChatExporter.Core.Models
{ {
// Loosely based on https://github.com/omar/ByteSize (MIT license) // Loosely based on https://github.com/omar/ByteSize (MIT license)
public struct FileSize public readonly struct FileSize
{ {
public const long BytesInKiloByte = 1024; public long TotalBytes { get; }
public const long BytesInMegaByte = 1024 * BytesInKiloByte;
public const long BytesInGigaByte = 1024 * BytesInMegaByte;
public const long BytesInTeraByte = 1024 * BytesInGigaByte;
public const long BytesInPetaByte = 1024 * BytesInTeraByte;
public const string ByteSymbol = "B"; public double TotalKiloBytes => TotalBytes / 1024.0;
public const string KiloByteSymbol = "KB"; public double TotalMegaBytes => TotalKiloBytes / 1024.0;
public const string MegaByteSymbol = "MB"; public double TotalGigaBytes => TotalMegaBytes / 1024.0;
public const string GigaByteSymbol = "GB"; public double TotalTeraBytes => TotalGigaBytes / 1024.0;
public const string TeraByteSymbol = "TB"; public double TotalPetaBytes => TotalTeraBytes / 1024.0;
public const string PetaByteSymbol = "PB";
public double Bytes { get; } public FileSize(long bytes) => TotalBytes = bytes;
public double KiloBytes => Bytes / BytesInKiloByte;
public double MegaBytes => Bytes / BytesInMegaByte;
public double GigaBytes => Bytes / BytesInGigaByte;
public double TeraBytes => Bytes / BytesInTeraByte;
public double PetaBytes => Bytes / BytesInPetaByte;
public string LargestWholeNumberSymbol private double GetLargestWholeNumberValue()
{ {
get if (Math.Abs(TotalPetaBytes) >= 1)
{ return TotalPetaBytes;
if (Math.Abs(PetaBytes) >= 1)
return PetaByteSymbol;
if (Math.Abs(TeraBytes) >= 1) if (Math.Abs(TotalTeraBytes) >= 1)
return TeraByteSymbol; return TotalTeraBytes;
if (Math.Abs(GigaBytes) >= 1) if (Math.Abs(TotalGigaBytes) >= 1)
return GigaByteSymbol; return TotalGigaBytes;
if (Math.Abs(MegaBytes) >= 1) if (Math.Abs(TotalMegaBytes) >= 1)
return MegaByteSymbol; return TotalMegaBytes;
if (Math.Abs(KiloBytes) >= 1) if (Math.Abs(TotalKiloBytes) >= 1)
return KiloByteSymbol; return TotalKiloBytes;
return ByteSymbol; return TotalBytes;
}
} }
public double LargestWholeNumberValue private string GetLargestWholeNumberSymbol()
{ {
get if (Math.Abs(TotalPetaBytes) >= 1)
{ return "PB";
if (Math.Abs(PetaBytes) >= 1)
return PetaBytes;
if (Math.Abs(TeraBytes) >= 1) if (Math.Abs(TotalTeraBytes) >= 1)
return TeraBytes; return "TB";
if (Math.Abs(GigaBytes) >= 1) if (Math.Abs(TotalGigaBytes) >= 1)
return GigaBytes; return "GB";
if (Math.Abs(MegaBytes) >= 1) if (Math.Abs(TotalMegaBytes) >= 1)
return MegaBytes; return "MB";
if (Math.Abs(KiloBytes) >= 1) if (Math.Abs(TotalKiloBytes) >= 1)
return KiloBytes; return "KB";
return Bytes; return "B";
}
} }
public FileSize(double bytes) public override string ToString() => $"{GetLargestWholeNumberValue():0.##} {GetLargestWholeNumberSymbol()}";
{
Bytes = bytes;
}
public override string ToString() => $"{LargestWholeNumberValue:0.##} {LargestWholeNumberSymbol}";
} }
} }

View file

@ -88,7 +88,7 @@ namespace DiscordChatExporter.Core.Rendering.Formatters
_writer.WriteString("id", attachment.Id); _writer.WriteString("id", attachment.Id);
_writer.WriteString("url", attachment.Url); _writer.WriteString("url", attachment.Url);
_writer.WriteString("fileName", attachment.FileName); _writer.WriteString("fileName", attachment.FileName);
_writer.WriteNumber("fileSizeBytes", (long) attachment.FileSize.Bytes); _writer.WriteNumber("fileSizeBytes", attachment.FileSize.TotalBytes);
_writer.WriteEndObject(); _writer.WriteEndObject();
} }