Actually fixed size parsing this time

pull/6/head
Mark McDowall 11 years ago
parent 8921c45a96
commit a9dd2d2f04

@ -26,7 +26,7 @@ namespace NzbDrone.Core.Test.IndexerTests
[TestCase("7,162.1MB", 7510006170)] [TestCase("7,162.1MB", 7510006170)]
[TestCase("162.1MB", 169974170)] [TestCase("162.1MB", 169974170)]
[TestCase("398.62 MB", 417983365)] [TestCase("398.62 MB", 417983365)]
[TestCase("845 MB", 1073741824)] [TestCase("845 MB", 886046720)]
public void parse_size(string sizeString, long expectedSize) public void parse_size(string sizeString, long expectedSize)
{ {
var result = BasicRssParser.GetReportSize(sizeString); var result = BasicRssParser.GetReportSize(sizeString);

@ -26,12 +26,12 @@ namespace NzbDrone.Core
public static Int64 Megabytes(this int megabytes) public static Int64 Megabytes(this int megabytes)
{ {
return megabytes * 1048576L; return Convert.ToInt64(megabytes * 1024L *1024L);
} }
public static Int64 Gigabytes(this int gigabytes) public static Int64 Gigabytes(this int gigabytes)
{ {
return gigabytes * 1073741824L; return Convert.ToInt64(gigabytes * 1024L * 1024L * 1024L);
} }
public static string ToBestDateString(this DateTime dateTime) public static string ToBestDateString(this DateTime dateTime)

@ -133,7 +133,7 @@ namespace NzbDrone.Core.Indexers
return header; return header;
} }
private static readonly Regex ReportSizeRegex = new Regex(@"(?<value>\d+\.\d{1,2}|\d+)\W?(?<unit>GB|MB|GiB|MiB)", private static readonly Regex ReportSizeRegex = new Regex(@"(?<value>\d+\.\d{1,2}|\d+\,\d+\.\d{1,2}|\d+)\W?(?<unit>GB|MB|GiB|MiB)",
RegexOptions.IgnoreCase | RegexOptions.Compiled); RegexOptions.IgnoreCase | RegexOptions.Compiled);
@ -151,16 +151,24 @@ namespace NzbDrone.Core.Indexers
if (unit.Equals("MB", StringComparison.InvariantCultureIgnoreCase) || if (unit.Equals("MB", StringComparison.InvariantCultureIgnoreCase) ||
unit.Equals("MiB", StringComparison.InvariantCultureIgnoreCase)) unit.Equals("MiB", StringComparison.InvariantCultureIgnoreCase))
{ {
return Convert.ToInt32(value).Megabytes(); return ConvertToBytes(Convert.ToDouble(value), 2);
} }
if (unit.Equals("GB", StringComparison.InvariantCultureIgnoreCase) || if (unit.Equals("GB", StringComparison.InvariantCultureIgnoreCase) ||
unit.Equals("GiB", StringComparison.InvariantCultureIgnoreCase)) unit.Equals("GiB", StringComparison.InvariantCultureIgnoreCase))
{ {
return Convert.ToInt32(value).Gigabytes(); return ConvertToBytes(Convert.ToDouble(value), 3);
} }
} }
return 0; return 0;
} }
private static long ConvertToBytes(double value, int power)
{
var multiplier = Math.Pow(1024, power);
var result = value*multiplier;
return Convert.ToInt64(result);
}
} }
} }
Loading…
Cancel
Save