From 1368dd6a539a1295da22930a218d0d0358930494 Mon Sep 17 00:00:00 2001 From: Tynan CR Date: Wed, 27 Dec 2017 21:41:11 -0500 Subject: [PATCH] Fix: Quality range definitions in kbps (#157) * Quality range uses kbits per second. Quality ranges updated for each format * Changed vorbis q10 weight * Fixed element name * Added migration to keep existing MB/min quality constraints valid * Fixed migration SQL * Slider step now 1 * Fix: using kbps for min size as well * Added tooltip for quality-size * Updated AcceptableSizeSpecification test * Small magic number fix --- .../Quality/Definition/QualityDefinition.css | 2 +- .../Quality/Definition/QualityDefinition.js | 31 +++++----- .../Quality/Definition/QualityDefinitions.css | 2 +- .../Quality/Definition/QualityDefinitions.js | 2 +- .../AcceptableSizeSpecificationFixture.cs | 61 +++++++++--------- .../008_change_quality_size_mb_to_kb.cs | 18 ++++++ .../AcceptableSizeSpecification.cs | 14 ++--- src/NzbDrone.Core/Fluent.cs | 10 +++ src/NzbDrone.Core/NzbDrone.Core.csproj | 1 + src/NzbDrone.Core/Qualities/Quality.cs | 62 +++++++++---------- 10 files changed, 119 insertions(+), 84 deletions(-) create mode 100644 src/NzbDrone.Core/Datastore/Migration/008_change_quality_size_mb_to_kb.cs diff --git a/frontend/src/Settings/Quality/Definition/QualityDefinition.css b/frontend/src/Settings/Quality/Definition/QualityDefinition.css index 69e8018f5..089dd16b9 100644 --- a/frontend/src/Settings/Quality/Definition/QualityDefinition.css +++ b/frontend/src/Settings/Quality/Definition/QualityDefinition.css @@ -53,7 +53,7 @@ justify-content: space-between; } -.megabytesPerMinute { +.kilobitsPerSecond { display: flex; justify-content: space-between; flex: 0 0 250px; diff --git a/frontend/src/Settings/Quality/Definition/QualityDefinition.js b/frontend/src/Settings/Quality/Definition/QualityDefinition.js index b1c715d8c..08bb192f1 100644 --- a/frontend/src/Settings/Quality/Definition/QualityDefinition.js +++ b/frontend/src/Settings/Quality/Definition/QualityDefinition.js @@ -10,8 +10,8 @@ import styles from './QualityDefinition.css'; const slider = { min: 0, - max: 200, - step: 0.1 + max: 1500, + step: 1 }; function getValue(value) { @@ -69,13 +69,16 @@ class QualityDefinition extends Component { onTitleChange } = this.props; - const minBytes = minSize * 1024 * 1024; - const minThirty = formatBytes(minBytes * 30, 2); - const minSixty = formatBytes(minBytes * 60, 2); + const minBytes = minSize * 128; + const maxBytes = maxSize && maxSize * 128; - const maxBytes = maxSize && maxSize * 1024 * 1024; - const maxThirty = maxBytes ? formatBytes(maxBytes * 30, 2) : 'Unlimited'; - const maxSixty = maxBytes ? formatBytes(maxBytes * 60, 2) : 'Unlimited'; + // Calculates the bytes used by a twenty minute EP + const minTwenty = formatBytes(minBytes * 20 * 60, 2); + const maxTwenty = maxBytes ? formatBytes(maxBytes * 20 * 60, 2) : 'Unlimited'; + + // Calculates the bytes used by a forty-five minute LP + const minFortyFive = formatBytes(minBytes * 45 * 60, 2); + const maxFortyFive = maxBytes ? formatBytes(maxBytes * 45 * 60, 2) : 'Unlimited'; return (
@@ -108,20 +111,20 @@ class QualityDefinition extends Component {
- - + +
- - + +
{ advancedSettings && -
+
Min @@ -139,7 +142,7 @@ class QualityDefinition extends Component { Quality
Title
Size Limit
-
Megabytes Per Minute
+
Kilobits Per Second
diff --git a/src/NzbDrone.Core.Test/DecisionEngineTests/AcceptableSizeSpecificationFixture.cs b/src/NzbDrone.Core.Test/DecisionEngineTests/AcceptableSizeSpecificationFixture.cs index 9a87c710f..72106c4e8 100644 --- a/src/NzbDrone.Core.Test/DecisionEngineTests/AcceptableSizeSpecificationFixture.cs +++ b/src/NzbDrone.Core.Test/DecisionEngineTests/AcceptableSizeSpecificationFixture.cs @@ -16,6 +16,9 @@ namespace NzbDrone.Core.Test.DecisionEngineTests public class AcceptableSizeSpecificationFixture : CoreTest { + private const int HIGH_KBPS_BITRATE = 1600; + private const int TWENTY_MINUTE_EP_MILLIS = 20 * 60 * 1000; + private const int FORTY_FIVE_MINUTE_LP_MILLIS = 45 * 60 * 1000; private RemoteAlbum parseResultMultiSet; private RemoteAlbum parseResultMulti; private RemoteAlbum parseResultSingle; @@ -58,8 +61,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests .Returns(v => Quality.DefaultQualityDefinitions.First(c => c.Quality == v)); qualityType = Builder.CreateNew() - .With(q => q.MinSize = 2) - .With(q => q.MaxSize = 6) + .With(q => q.MinSize = 150) + .With(q => q.MaxSize = 210) .With(q => q.Quality = Quality.MP3_192) .Build(); @@ -81,12 +84,12 @@ namespace NzbDrone.Core.Test.DecisionEngineTests new Album(), new Album(), new Album(), new Album(), new Album { Id = 2 } }); } - [TestCase(1800000, 50, false)] - [TestCase(1800000, 150, true)] - [TestCase(1800000, 300, false)] - [TestCase(3600000, 100, false)] - [TestCase(3600000, 300, true)] - [TestCase(3600000, 600, false)] + [TestCase(TWENTY_MINUTE_EP_MILLIS, 20, false)] + [TestCase(TWENTY_MINUTE_EP_MILLIS, 25, true)] + [TestCase(TWENTY_MINUTE_EP_MILLIS, 35, false)] + [TestCase(FORTY_FIVE_MINUTE_LP_MILLIS, 45, false)] + [TestCase(FORTY_FIVE_MINUTE_LP_MILLIS, 55, true)] + [TestCase(FORTY_FIVE_MINUTE_LP_MILLIS, 75, false)] public void single_album(int runtime, int sizeInMegaBytes, bool expectedResult) { parseResultSingle.Albums.Select(c => { c.Duration = runtime; return c; }).ToList(); @@ -96,12 +99,12 @@ namespace NzbDrone.Core.Test.DecisionEngineTests Subject.IsSatisfiedBy(parseResultSingle, null).Accepted.Should().Be(expectedResult); } - [TestCase(1800000, 50 * 2, false)] - [TestCase(1800000, 150 * 2, true)] - [TestCase(1800000, 300 * 2, false)] - [TestCase(3600000, 100 * 2, false)] - [TestCase(3600000, 300 * 2, true)] - [TestCase(3600000, 600 * 2, false)] + [TestCase(TWENTY_MINUTE_EP_MILLIS, 20 * 2, false)] + [TestCase(TWENTY_MINUTE_EP_MILLIS, 25 * 2, true)] + [TestCase(TWENTY_MINUTE_EP_MILLIS, 35 * 2, false)] + [TestCase(FORTY_FIVE_MINUTE_LP_MILLIS, 45 * 2, false)] + [TestCase(FORTY_FIVE_MINUTE_LP_MILLIS, 55 * 2, true)] + [TestCase(FORTY_FIVE_MINUTE_LP_MILLIS, 75 * 2, false)] public void multi_album(int runtime, int sizeInMegaBytes, bool expectedResult) { parseResultMulti.Albums.Select(c => { c.Duration = runtime; return c; }).ToList(); @@ -111,12 +114,12 @@ namespace NzbDrone.Core.Test.DecisionEngineTests Subject.IsSatisfiedBy(parseResultMulti, null).Accepted.Should().Be(expectedResult); } - [TestCase(1800000, 50 * 6, false)] - [TestCase(1800000, 150 * 6, true)] - [TestCase(1800000, 300 * 6, false)] - [TestCase(3600000, 100 * 6, false)] - [TestCase(3600000, 300 * 6, true)] - [TestCase(3600000, 600 * 6, false)] + [TestCase(TWENTY_MINUTE_EP_MILLIS, 20 * 6, false)] + [TestCase(TWENTY_MINUTE_EP_MILLIS, 25 * 6, true)] + [TestCase(TWENTY_MINUTE_EP_MILLIS, 35 * 6, false)] + [TestCase(FORTY_FIVE_MINUTE_LP_MILLIS, 45 * 6, false)] + [TestCase(FORTY_FIVE_MINUTE_LP_MILLIS, 55 * 6, true)] + [TestCase(FORTY_FIVE_MINUTE_LP_MILLIS, 75 * 6, false)] public void multiset_album(int runtime, int sizeInMegaBytes, bool expectedResult) { parseResultMultiSet.Albums.Select(c => { c.Duration = runtime; return c; }).ToList(); @@ -130,34 +133,34 @@ namespace NzbDrone.Core.Test.DecisionEngineTests public void should_return_true_if_size_is_zero() { GivenLastAlbum(); - parseResultSingle.Albums.Select(c => { c.Duration = 1800000; return c; }).ToList(); + parseResultSingle.Albums.Select(c => { c.Duration = TWENTY_MINUTE_EP_MILLIS; return c; }).ToList(); parseResultSingle.Artist = artist; parseResultSingle.Release.Size = 0; - qualityType.MinSize = 10; - qualityType.MaxSize = 20; + qualityType.MinSize = 150; + qualityType.MaxSize = 210; Subject.IsSatisfiedBy(parseResultSingle, null).Accepted.Should().BeTrue(); } [Test] - public void should_return_true_if_unlimited_30_minute() + public void should_return_true_if_unlimited_20_minute() { GivenLastAlbum(); - parseResultSingle.Albums.Select(c => { c.Duration = 1800000; return c; }).ToList(); + parseResultSingle.Albums.Select(c => { c.Duration = TWENTY_MINUTE_EP_MILLIS; return c; }).ToList(); parseResultSingle.Artist = artist; - parseResultSingle.Release.Size = 18457280000; + parseResultSingle.Release.Size = (HIGH_KBPS_BITRATE * 128) * (TWENTY_MINUTE_EP_MILLIS / 1000); qualityType.MaxSize = null; Subject.IsSatisfiedBy(parseResultSingle, null).Accepted.Should().BeTrue(); } [Test] - public void should_return_true_if_unlimited_60_minute() + public void should_return_true_if_unlimited_45_minute() { GivenLastAlbum(); - parseResultSingle.Albums.Select(c => { c.Duration = 3600000; return c; }).ToList(); + parseResultSingle.Albums.Select(c => { c.Duration = FORTY_FIVE_MINUTE_LP_MILLIS; return c; }).ToList(); parseResultSingle.Artist = artist; - parseResultSingle.Release.Size = 36857280000; + parseResultSingle.Release.Size = (HIGH_KBPS_BITRATE * 128) * (FORTY_FIVE_MINUTE_LP_MILLIS / 1000); qualityType.MaxSize = null; Subject.IsSatisfiedBy(parseResultSingle, null).Accepted.Should().BeTrue(); diff --git a/src/NzbDrone.Core/Datastore/Migration/008_change_quality_size_mb_to_kb.cs b/src/NzbDrone.Core/Datastore/Migration/008_change_quality_size_mb_to_kb.cs new file mode 100644 index 000000000..07cb91c3d --- /dev/null +++ b/src/NzbDrone.Core/Datastore/Migration/008_change_quality_size_mb_to_kb.cs @@ -0,0 +1,18 @@ +using FluentMigrator; +using NzbDrone.Core.Datastore.Migration.Framework; + +namespace NzbDrone.Core.Datastore.Migration +{ + [Migration(8)] + public class change_quality_size_mb_to_kb : NzbDroneMigrationBase + { + protected override void MainDbUpgrade() + { + Execute.Sql("UPDATE QualityDefinitions SET MaxSize = CASE " + + "WHEN (CAST(MaxSize AS FLOAT) / 60) * 8 * 1024 < 1500 THEN " + + "ROUND((CAST(MaxSize AS FLOAT) / 60) * 8 * 1024, 0) " + + "ELSE NULL " + + "END"); + } + } +} diff --git a/src/NzbDrone.Core/DecisionEngine/Specifications/AcceptableSizeSpecification.cs b/src/NzbDrone.Core/DecisionEngine/Specifications/AcceptableSizeSpecification.cs index 62a7738f8..bcdde336d 100644 --- a/src/NzbDrone.Core/DecisionEngine/Specifications/AcceptableSizeSpecification.cs +++ b/src/NzbDrone.Core/DecisionEngine/Specifications/AcceptableSizeSpecification.cs @@ -35,11 +35,11 @@ namespace NzbDrone.Core.DecisionEngine.Specifications } var qualityDefinition = _qualityDefinitionService.Get(quality); - var albumsDuration = subject.Albums.Sum(album => album.Duration) / 60000; + var albumsDuration = subject.Albums.Sum(album => album.Duration) / 1000; if (qualityDefinition.MinSize.HasValue) { - var minSize = qualityDefinition.MinSize.Value.Megabytes(); + var minSize = qualityDefinition.MinSize.Value.Kilobits(); //Multiply minSize by Album.Duration minSize = minSize * albumsDuration; @@ -47,9 +47,9 @@ namespace NzbDrone.Core.DecisionEngine.Specifications //If the parsed size is smaller than minSize we don't want it if (subject.Release.Size < minSize) { - var runtimeMessage = $"{albumsDuration}min"; + var runtimeMessage = $"{albumsDuration}sec"; - _logger.Debug("Item: {0}, Size: {1} is smaller than minimum allowed size ({2} bytes), rejecting.", subject, subject.Release.Size, minSize); + _logger.Debug("Item: {0}, Size: {1} is smaller than minimum allowed size ({2} bytes for {3}), rejecting.", subject, subject.Release.Size, minSize, runtimeMessage); return Decision.Reject("{0} is smaller than minimum allowed {1}", subject.Release.Size.SizeSuffix(), minSize.SizeSuffix()); } } @@ -59,7 +59,7 @@ namespace NzbDrone.Core.DecisionEngine.Specifications } else { - var maxSize = qualityDefinition.MaxSize.Value.Megabytes(); + var maxSize = qualityDefinition.MaxSize.Value.Kilobits(); //Multiply maxSize by Album.Duration maxSize = maxSize * albumsDuration; @@ -67,9 +67,9 @@ namespace NzbDrone.Core.DecisionEngine.Specifications //If the parsed size is greater than maxSize we don't want it if (subject.Release.Size > maxSize) { - var runtimeMessage = $"{albumsDuration}min"; + var runtimeMessage = $"{albumsDuration}sec"; - _logger.Debug("Item: {0}, Size: {1} is greater than maximum allowed size ({2}), rejecting.", subject, subject.Release.Size, maxSize); + _logger.Debug("Item: {0}, Size: {1} is greater than maximum allowed size ({2} bytes for {3}), rejecting.", subject, subject.Release.Size, maxSize, runtimeMessage); return Decision.Reject("{0} is larger than maximum allowed {1}", subject.Release.Size.SizeSuffix(), maxSize.SizeSuffix()); } } diff --git a/src/NzbDrone.Core/Fluent.cs b/src/NzbDrone.Core/Fluent.cs index 6e2e3d2b2..98e38a1d3 100644 --- a/src/NzbDrone.Core/Fluent.cs +++ b/src/NzbDrone.Core/Fluent.cs @@ -20,6 +20,11 @@ namespace NzbDrone.Core return actual; } + public static long Kilobits(this int kilobits) + { + return Convert.ToInt64(kilobits * 128L); + } + public static long Megabytes(this int megabytes) { return Convert.ToInt64(megabytes * 1024L * 1024L); @@ -30,6 +35,11 @@ namespace NzbDrone.Core return Convert.ToInt64(gigabytes * 1024L * 1024L * 1024L); } + public static long Kilobits(this double kilobits) + { + return Convert.ToInt64(kilobits * 128L); + } + public static long Megabytes(this double megabytes) { return Convert.ToInt64(megabytes * 1024L * 1024L); diff --git a/src/NzbDrone.Core/NzbDrone.Core.csproj b/src/NzbDrone.Core/NzbDrone.Core.csproj index 96cdc27a1..d18316f1a 100644 --- a/src/NzbDrone.Core/NzbDrone.Core.csproj +++ b/src/NzbDrone.Core/NzbDrone.Core.csproj @@ -1096,6 +1096,7 @@ + diff --git a/src/NzbDrone.Core/Qualities/Quality.cs b/src/NzbDrone.Core/Qualities/Quality.cs index 5e718d7c0..361dee26a 100644 --- a/src/NzbDrone.Core/Qualities/Quality.cs +++ b/src/NzbDrone.Core/Qualities/Quality.cs @@ -140,37 +140,37 @@ namespace NzbDrone.Core.Qualities DefaultQualityDefinitions = new HashSet { - new QualityDefinition(Quality.Unknown) { Weight = 1, MinSize = 0, MaxSize = 100, GroupWeight = 1}, - new QualityDefinition(Quality.MP3_008) { Weight = 2, MinSize = 0, MaxSize = 100, GroupName = "Trash Quality Lossy", GroupWeight = 2 }, - new QualityDefinition(Quality.MP3_016) { Weight = 3, MinSize = 0, MaxSize = 100, GroupName = "Trash Quality Lossy", GroupWeight = 2 }, - new QualityDefinition(Quality.MP3_024) { Weight = 4, MinSize = 0, MaxSize = 100, GroupName = "Trash Quality Lossy", GroupWeight = 2 }, - new QualityDefinition(Quality.MP3_032) { Weight = 5, MinSize = 0, MaxSize = 100, GroupName = "Trash Quality Lossy", GroupWeight = 2 }, - new QualityDefinition(Quality.MP3_040) { Weight = 6, MinSize = 0, MaxSize = 100, GroupName = "Trash Quality Lossy", GroupWeight = 2 }, - new QualityDefinition(Quality.MP3_048) { Weight = 7, MinSize = 0, MaxSize = 100, GroupName = "Trash Quality Lossy", GroupWeight = 2 }, - new QualityDefinition(Quality.MP3_056) { Weight = 8, MinSize = 0, MaxSize = 100, GroupName = "Trash Quality Lossy", GroupWeight = 2 }, - new QualityDefinition(Quality.MP3_064) { Weight = 9, MinSize = 0, MaxSize = 100, GroupName = "Trash Quality Lossy", GroupWeight = 2 }, - new QualityDefinition(Quality.MP3_080) { Weight = 10, MinSize = 0, MaxSize = 100, GroupName = "Trash Quality Lossy", GroupWeight = 2 }, - new QualityDefinition(Quality.MP3_096) { Weight = 11, MinSize = 0, MaxSize = 100, GroupName = "Poor Quality Lossy", GroupWeight = 3 }, - new QualityDefinition(Quality.MP3_112) { Weight = 12, MinSize = 0, MaxSize = 100, GroupName = "Poor Quality Lossy", GroupWeight = 3 }, - new QualityDefinition(Quality.MP3_128) { Weight = 13, MinSize = 0, MaxSize = 100, GroupName = "Poor Quality Lossy", GroupWeight = 3 }, - new QualityDefinition(Quality.VORBIS_Q5) { Weight = 14, MinSize = 0, MaxSize = 100, GroupName = "Poor Quality Lossy", GroupWeight = 3 }, - new QualityDefinition(Quality.MP3_160) { Weight = 14, MinSize = 0, MaxSize = 100, GroupName = "Poor Quality Lossy", GroupWeight = 3 }, - new QualityDefinition(Quality.MP3_192) { Weight = 15, MinSize = 0, MaxSize = 100, GroupName = "Low Quality Lossy", GroupWeight = 4 }, - new QualityDefinition(Quality.VORBIS_Q6) { Weight = 15, MinSize = 0, MaxSize = 100, GroupName = "Low Quality Lossy", GroupWeight = 4 }, - new QualityDefinition(Quality.AAC_192) { Weight = 15, MinSize = 0, MaxSize = 100, GroupName = "Low Quality Lossy", GroupWeight = 4 }, - new QualityDefinition(Quality.WMA) { Weight = 15, MinSize = 0, MaxSize = 100, GroupName = "Low Quality Lossy", GroupWeight = 4 }, - new QualityDefinition(Quality.MP3_224) { Weight = 16, MinSize = 0, MaxSize = 100, GroupName = "Low Quality Lossy", GroupWeight = 4 }, - new QualityDefinition(Quality.VORBIS_Q7) { Weight = 17, MinSize = 0, MaxSize = 100, GroupName = "Mid Quality Lossy", GroupWeight = 5 }, - new QualityDefinition(Quality.MP3_VBR_V2) { Weight = 18, MinSize = 0, MaxSize = 100, GroupName = "Mid Quality Lossy", GroupWeight = 5 }, - new QualityDefinition(Quality.MP3_256) { Weight = 18, MinSize = 0, MaxSize = 100, GroupName = "Mid Quality Lossy", GroupWeight = 5 }, - new QualityDefinition(Quality.VORBIS_Q8) { Weight = 18, MinSize = 0, MaxSize = 100, GroupName = "Mid Quality Lossy", GroupWeight = 5 }, - new QualityDefinition(Quality.AAC_256) { Weight = 18, MinSize = 0, MaxSize = 100, GroupName = "Mid Quality Lossy", GroupWeight = 5 }, - new QualityDefinition(Quality.MP3_VBR) { Weight = 19, MinSize = 0, MaxSize = 100, GroupName = "High Quality Lossy", GroupWeight = 6 }, - new QualityDefinition(Quality.AAC_VBR) { Weight = 19, MinSize = 0, MaxSize = 100, GroupName = "High Quality Lossy", GroupWeight = 6 }, - new QualityDefinition(Quality.MP3_320) { Weight = 20, MinSize = 0, MaxSize = 100, GroupName = "High Quality Lossy", GroupWeight = 6 }, - new QualityDefinition(Quality.VORBIS_Q9) { Weight = 20, MinSize = 0, MaxSize = 100, GroupName = "High Quality Lossy", GroupWeight = 6 }, - new QualityDefinition(Quality.AAC_320) { Weight = 20, MinSize = 0, MaxSize = 100, GroupName = "High Quality Lossy", GroupWeight = 6 }, - new QualityDefinition(Quality.VORBIS_Q10) { Weight = 12, MinSize = 0, MaxSize = 100, GroupName = "High Quality Lossy", GroupWeight = 6 }, + new QualityDefinition(Quality.Unknown) { Weight = 1, MinSize = 0, MaxSize = 350, GroupWeight = 1}, + new QualityDefinition(Quality.MP3_008) { Weight = 2, MinSize = 0, MaxSize = 10, GroupName = "Trash Quality Lossy", GroupWeight = 2 }, + new QualityDefinition(Quality.MP3_016) { Weight = 3, MinSize = 0, MaxSize = 20, GroupName = "Trash Quality Lossy", GroupWeight = 2 }, + new QualityDefinition(Quality.MP3_024) { Weight = 4, MinSize = 0, MaxSize = 30, GroupName = "Trash Quality Lossy", GroupWeight = 2 }, + new QualityDefinition(Quality.MP3_032) { Weight = 5, MinSize = 0, MaxSize = 40, GroupName = "Trash Quality Lossy", GroupWeight = 2 }, + new QualityDefinition(Quality.MP3_040) { Weight = 6, MinSize = 0, MaxSize = 45, GroupName = "Trash Quality Lossy", GroupWeight = 2 }, + new QualityDefinition(Quality.MP3_048) { Weight = 7, MinSize = 0, MaxSize = 55, GroupName = "Trash Quality Lossy", GroupWeight = 2 }, + new QualityDefinition(Quality.MP3_056) { Weight = 8, MinSize = 0, MaxSize = 65, GroupName = "Trash Quality Lossy", GroupWeight = 2 }, + new QualityDefinition(Quality.MP3_064) { Weight = 9, MinSize = 0, MaxSize = 75, GroupName = "Trash Quality Lossy", GroupWeight = 2 }, + new QualityDefinition(Quality.MP3_080) { Weight = 10, MinSize = 0, MaxSize = 95, GroupName = "Trash Quality Lossy", GroupWeight = 2 }, + new QualityDefinition(Quality.MP3_096) { Weight = 11, MinSize = 0, MaxSize = 110, GroupName = "Poor Quality Lossy", GroupWeight = 3 }, + new QualityDefinition(Quality.MP3_112) { Weight = 12, MinSize = 0, MaxSize = 125, GroupName = "Poor Quality Lossy", GroupWeight = 3 }, + new QualityDefinition(Quality.MP3_128) { Weight = 13, MinSize = 0, MaxSize = 140, GroupName = "Poor Quality Lossy", GroupWeight = 3 }, + new QualityDefinition(Quality.VORBIS_Q5) { Weight = 14, MinSize = 0, MaxSize = 175, GroupName = "Poor Quality Lossy", GroupWeight = 3 }, + new QualityDefinition(Quality.MP3_160) { Weight = 14, MinSize = 0, MaxSize = 175, GroupName = "Poor Quality Lossy", GroupWeight = 3 }, + new QualityDefinition(Quality.MP3_192) { Weight = 15, MinSize = 0, MaxSize = 210, GroupName = "Low Quality Lossy", GroupWeight = 4 }, + new QualityDefinition(Quality.VORBIS_Q6) { Weight = 15, MinSize = 0, MaxSize = 210, GroupName = "Low Quality Lossy", GroupWeight = 4 }, + new QualityDefinition(Quality.AAC_192) { Weight = 15, MinSize = 0, MaxSize = 210, GroupName = "Low Quality Lossy", GroupWeight = 4 }, + new QualityDefinition(Quality.WMA) { Weight = 15, MinSize = 0, MaxSize = 350, GroupName = "Low Quality Lossy", GroupWeight = 4 }, + new QualityDefinition(Quality.MP3_224) { Weight = 16, MinSize = 0, MaxSize = 245, GroupName = "Low Quality Lossy", GroupWeight = 4 }, + new QualityDefinition(Quality.VORBIS_Q7) { Weight = 17, MinSize = 0, MaxSize = 245, GroupName = "Mid Quality Lossy", GroupWeight = 5 }, + new QualityDefinition(Quality.MP3_VBR_V2) { Weight = 18, MinSize = 0, MaxSize = 280, GroupName = "Mid Quality Lossy", GroupWeight = 5 }, + new QualityDefinition(Quality.MP3_256) { Weight = 18, MinSize = 0, MaxSize = 280, GroupName = "Mid Quality Lossy", GroupWeight = 5 }, + new QualityDefinition(Quality.VORBIS_Q8) { Weight = 18, MinSize = 0, MaxSize = 280, GroupName = "Mid Quality Lossy", GroupWeight = 5 }, + new QualityDefinition(Quality.AAC_256) { Weight = 18, MinSize = 0, MaxSize = 280, GroupName = "Mid Quality Lossy", GroupWeight = 5 }, + new QualityDefinition(Quality.MP3_VBR) { Weight = 19, MinSize = 0, MaxSize = 350, GroupName = "High Quality Lossy", GroupWeight = 6 }, + new QualityDefinition(Quality.AAC_VBR) { Weight = 19, MinSize = 0, MaxSize = 350, GroupName = "High Quality Lossy", GroupWeight = 6 }, + new QualityDefinition(Quality.MP3_320) { Weight = 20, MinSize = 0, MaxSize = 350, GroupName = "High Quality Lossy", GroupWeight = 6 }, + new QualityDefinition(Quality.VORBIS_Q9) { Weight = 20, MinSize = 0, MaxSize = 350, GroupName = "High Quality Lossy", GroupWeight = 6 }, + new QualityDefinition(Quality.AAC_320) { Weight = 20, MinSize = 0, MaxSize = 350, GroupName = "High Quality Lossy", GroupWeight = 6 }, + new QualityDefinition(Quality.VORBIS_Q10) { Weight = 21, MinSize = 0, MaxSize = 550, GroupName = "High Quality Lossy", GroupWeight = 6 }, new QualityDefinition(Quality.ALAC) { Weight = 22, MinSize = 0, MaxSize = null, GroupName = "Lossless", GroupWeight = 7 }, new QualityDefinition(Quality.FLAC) { Weight = 22, MinSize = 0, MaxSize = null, GroupName = "Lossless", GroupWeight = 7 }, new QualityDefinition(Quality.FLAC_24) { Weight = 23, MinSize = 0, MaxSize = null, GroupName = "Lossless", GroupWeight = 7 },