diff --git a/NzbDrone.Core.Test/IndexerTests/BasicRssParserFixture.cs b/NzbDrone.Core.Test/IndexerTests/BasicRssParserFixture.cs index 1c9db1b22..4ac080e2a 100644 --- a/NzbDrone.Core.Test/IndexerTests/BasicRssParserFixture.cs +++ b/NzbDrone.Core.Test/IndexerTests/BasicRssParserFixture.cs @@ -26,7 +26,7 @@ namespace NzbDrone.Core.Test.IndexerTests [TestCase("7,162.1MB", 7510006170)] [TestCase("162.1MB", 169974170)] [TestCase("398.62 MB", 417983365)] - [TestCase("845 MB", 1073741824)] + [TestCase("845 MB", 886046720)] public void parse_size(string sizeString, long expectedSize) { var result = BasicRssParser.GetReportSize(sizeString); diff --git a/NzbDrone.Core/Fluent.cs b/NzbDrone.Core/Fluent.cs index 07ada240b..fde05a8f5 100644 --- a/NzbDrone.Core/Fluent.cs +++ b/NzbDrone.Core/Fluent.cs @@ -26,12 +26,12 @@ namespace NzbDrone.Core public static Int64 Megabytes(this int megabytes) { - return megabytes * 1048576L; + return Convert.ToInt64(megabytes * 1024L *1024L); } public static Int64 Gigabytes(this int gigabytes) { - return gigabytes * 1073741824L; + return Convert.ToInt64(gigabytes * 1024L * 1024L * 1024L); } public static string ToBestDateString(this DateTime dateTime) diff --git a/NzbDrone.Core/Indexers/BasicRssParser.cs b/NzbDrone.Core/Indexers/BasicRssParser.cs index e9dc56bb8..1b18c7a25 100644 --- a/NzbDrone.Core/Indexers/BasicRssParser.cs +++ b/NzbDrone.Core/Indexers/BasicRssParser.cs @@ -133,7 +133,7 @@ namespace NzbDrone.Core.Indexers return header; } - private static readonly Regex ReportSizeRegex = new Regex(@"(?\d+\.\d{1,2}|\d+)\W?(?GB|MB|GiB|MiB)", + private static readonly Regex ReportSizeRegex = new Regex(@"(?\d+\.\d{1,2}|\d+\,\d+\.\d{1,2}|\d+)\W?(?GB|MB|GiB|MiB)", RegexOptions.IgnoreCase | RegexOptions.Compiled); @@ -151,16 +151,24 @@ namespace NzbDrone.Core.Indexers if (unit.Equals("MB", StringComparison.InvariantCultureIgnoreCase) || unit.Equals("MiB", StringComparison.InvariantCultureIgnoreCase)) { - return Convert.ToInt32(value).Megabytes(); + return ConvertToBytes(Convert.ToDouble(value), 2); } if (unit.Equals("GB", StringComparison.InvariantCultureIgnoreCase) || unit.Equals("GiB", StringComparison.InvariantCultureIgnoreCase)) { - return Convert.ToInt32(value).Gigabytes(); + return ConvertToBytes(Convert.ToDouble(value), 3); } } return 0; } + + private static long ConvertToBytes(double value, int power) + { + var multiplier = Math.Pow(1024, power); + var result = value*multiplier; + + return Convert.ToInt64(result); + } } } \ No newline at end of file