diff --git a/src/Orchard.Tests.Modules/Media/Extensions/LongExtensionsTests.cs b/src/Orchard.Tests.Modules/Media/Extensions/LongExtensionsTests.cs new file mode 100644 index 000000000..d9f33c933 --- /dev/null +++ b/src/Orchard.Tests.Modules/Media/Extensions/LongExtensionsTests.cs @@ -0,0 +1,63 @@ +using NUnit.Framework; +using Orchard.Media.Extensions; + +namespace Orchard.Tests.Modules.Media.Extensions { + [TestFixture] + public class LongExtensionsTests { + [Test] + public void BytesAreFriendly() { + long size = 123; + string friendly = size.ToFriendlySizeString(); + Assert.That(friendly, Is.EqualTo("123 B")); + } + + [Test] + public void KilobytesAreFriendly() { + long size = 93845; + string friendly = size.ToFriendlySizeString(); + Assert.That(friendly, Is.EqualTo("92 KB")); + } + + [Test] + public void MegabytesAreFriendly() { + long size = 6593528; + string friendly = size.ToFriendlySizeString(); + Assert.That(friendly, Is.EqualTo("6.3 MB")); + } + + [Test] + public void GigabytesAreFriendly() { + long size = 46896534657; + string friendly = size.ToFriendlySizeString(); + Assert.That(friendly, Is.EqualTo("43.68 GB")); + } + + [Test] + public void TerabytesAreFriendly() { + long size = 386594723458690; + string friendly = size.ToFriendlySizeString(); + Assert.That(friendly, Is.EqualTo("351.606 TB")); + } + + [Test] + public void PetabytesAreSlightlyFriendlyAsTerabytes() { + long size = 56794738495678965; + string friendly = size.ToFriendlySizeString(); + Assert.That(friendly, Is.EqualTo("51654.514 TB")); + } + + [Test] + public void VeryLargeSizeDoesNotCauseFailure() { + long size = 5679473849567896593; + string friendly = size.ToFriendlySizeString(); + Assert.That(friendly, Is.EqualTo("5165451.375 TB")); + } + + [Test] + public void NegativeSizeDoesNotCauseFailure(){ + long size = -2598; + string friendly = size.ToFriendlySizeString(); + Assert.That(friendly, Is.EqualTo("-2598 B")); + } + } +} \ No newline at end of file diff --git a/src/Orchard.Tests.Modules/Orchard.Tests.Modules.csproj b/src/Orchard.Tests.Modules/Orchard.Tests.Modules.csproj index e1cc5dee3..b2fd7b910 100644 --- a/src/Orchard.Tests.Modules/Orchard.Tests.Modules.csproj +++ b/src/Orchard.Tests.Modules/Orchard.Tests.Modules.csproj @@ -126,6 +126,7 @@ + @@ -155,6 +156,10 @@ {C0C45321-B51D-4D8D-9B7B-AA4C2E0B2962} Orchard.CodeGeneration + + {D9A7B330-CD22-4DA1-A95A-8DE1982AD8EB} + Orchard.Media + {17F86780-9A1F-4AA1-86F1-875EEC2730C7} Orchard.Modules diff --git a/src/Orchard.Web/Modules/Orchard.Media/Extensions/LongExtensions.cs b/src/Orchard.Web/Modules/Orchard.Media/Extensions/LongExtensions.cs new file mode 100644 index 000000000..3e5adc860 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Media/Extensions/LongExtensions.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; + +namespace Orchard.Media.Extensions { + public static class LongExtensions { + private static List units = new List(5) {"B", "KB", "MB", "GB", "TB"}; // Not going further. Anything beyond MB is probably overkill anyway. + + public static string ToFriendlySizeString(this long bytes) { + var somethingMoreFriendly = TryForTheNextUnit(bytes, units[0]); + var roundingPlaces = units[0] == somethingMoreFriendly.Item2 ? 0 : units.IndexOf(somethingMoreFriendly.Item2) - 1; + return string.Format("{0} {1}", Math.Round(somethingMoreFriendly.Item1, roundingPlaces), somethingMoreFriendly.Item2); + } + + private static Tuple TryForTheNextUnit(double size, string unit) { + var indexOfUnit = units.IndexOf(unit); + + if (size > 1024 && indexOfUnit < units.Count - 1) { + size = size/1024; + unit = units[indexOfUnit + 1]; + return TryForTheNextUnit(size, unit); + } + + return new Tuple(size, unit); + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Media/Orchard.Media.csproj b/src/Orchard.Web/Modules/Orchard.Media/Orchard.Media.csproj index 5c165af9b..0b80dcc5e 100644 --- a/src/Orchard.Web/Modules/Orchard.Media/Orchard.Media.csproj +++ b/src/Orchard.Web/Modules/Orchard.Media/Orchard.Media.csproj @@ -71,6 +71,7 @@ + diff --git a/src/Orchard.Web/Modules/Orchard.Media/Views/Admin/Edit.cshtml b/src/Orchard.Web/Modules/Orchard.Media/Views/Admin/Edit.cshtml index 87307bc67..f12523648 100644 --- a/src/Orchard.Web/Modules/Orchard.Media/Views/Admin/Edit.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Media/Views/Admin/Edit.cshtml @@ -1,4 +1,5 @@ @model Orchard.Media.ViewModels.MediaFolderEditViewModel +@using Orchard.Media.Extensions; @using Orchard.Media.Helpers; @using Orchard.Media.Models; @{ Style.Require("MediaAdmin"); } @@ -70,7 +71,7 @@ @mediaFile.User @mediaFile.LastUpdated @mediaFile.Type - @mediaFile.Size + @mediaFile.Size.ToFriendlySizeString() } @@ -87,7 +88,7 @@ @mediaFolder.User @mediaFolder.LastUpdated @T("Folder") - @mediaFolder.Size + @mediaFolder.Size.ToFriendlySizeString() } diff --git a/src/Orchard.Web/Modules/Orchard.Media/Views/Admin/EditMedia.cshtml b/src/Orchard.Web/Modules/Orchard.Media/Views/Admin/EditMedia.cshtml index 5837d24bd..311ccac8d 100644 --- a/src/Orchard.Web/Modules/Orchard.Media/Views/Admin/EditMedia.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Media/Views/Admin/EditMedia.cshtml @@ -1,4 +1,5 @@ @model Orchard.Media.ViewModels.MediaItemEditViewModel +@using Orchard.Media.Extensions; @using Orchard.Media.Helpers; @using Orchard.Media.Models; @{ Style.Require("MediaAdmin"); } @@ -26,7 +27,7 @@
@* *@ - +
diff --git a/src/Orchard.Web/Modules/Orchard.Media/Views/Admin/Index.cshtml b/src/Orchard.Web/Modules/Orchard.Media/Views/Admin/Index.cshtml index 213389acd..564bd58ff 100644 --- a/src/Orchard.Web/Modules/Orchard.Media/Views/Admin/Index.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Media/Views/Admin/Index.cshtml @@ -1,4 +1,5 @@ @model Orchard.Media.ViewModels.MediaFolderIndexViewModel +@using Orchard.Media.Extensions;

@Html.TitleForPage(T("Manage Media Folders").ToString())

@Html.ValidationSummary() @@ -44,7 +45,7 @@ @mediaFolder.User @mediaFolder.LastUpdated @T("Folder") - @mediaFolder.Size + @mediaFolder.Size.ToFriendlySizeString() }