mirror of
https://github.com/Readarr/Readarr.git
synced 2026-04-21 22:04:31 -04:00
@@ -63,33 +63,72 @@ namespace NzbDrone.Core.Parser
|
||||
}
|
||||
}
|
||||
|
||||
var codec = ParseCodec(normalizedName,name);
|
||||
var codec = ParseCodec(normalizedName, name);
|
||||
var bitrate = ParseBitRate(normalizedName);
|
||||
var sampleSize = ParseSampleSize(normalizedName);
|
||||
|
||||
switch(codec)
|
||||
switch (codec)
|
||||
{
|
||||
case Codec.MP1:
|
||||
case Codec.MP2:
|
||||
result.Quality = Quality.Unknown;
|
||||
break;
|
||||
case Codec.MP3VBR:
|
||||
if (bitrate == BitRate.VBRV0) { result.Quality = Quality.MP3_VBR; }
|
||||
else if (bitrate == BitRate.VBRV2) { result.Quality = Quality.MP3_VBR_V2; }
|
||||
else { result.Quality = Quality.Unknown; }
|
||||
if (bitrate == BitRate.VBRV0)
|
||||
{
|
||||
result.Quality = Quality.MP3_VBR;
|
||||
}
|
||||
else if (bitrate == BitRate.VBRV2)
|
||||
{
|
||||
result.Quality = Quality.MP3_VBR_V2;
|
||||
}
|
||||
else
|
||||
{
|
||||
result.Quality = Quality.Unknown;
|
||||
}
|
||||
|
||||
break;
|
||||
case Codec.MP3CBR:
|
||||
if (bitrate == BitRate.B096) { result.Quality = Quality.MP3_096; }
|
||||
else if (bitrate == BitRate.B128) { result.Quality = Quality.MP3_128; }
|
||||
else if (bitrate == BitRate.B160) { result.Quality = Quality.MP3_160; }
|
||||
else if (bitrate == BitRate.B192) { result.Quality = Quality.MP3_192; }
|
||||
else if (bitrate == BitRate.B256) { result.Quality = Quality.MP3_256; }
|
||||
else if (bitrate == BitRate.B320) { result.Quality = Quality.MP3_320; }
|
||||
else { result.Quality = Quality.Unknown; }
|
||||
if (bitrate == BitRate.B096)
|
||||
{
|
||||
result.Quality = Quality.MP3_096;
|
||||
}
|
||||
else if (bitrate == BitRate.B128)
|
||||
{
|
||||
result.Quality = Quality.MP3_128;
|
||||
}
|
||||
else if (bitrate == BitRate.B160)
|
||||
{
|
||||
result.Quality = Quality.MP3_160;
|
||||
}
|
||||
else if (bitrate == BitRate.B192)
|
||||
{
|
||||
result.Quality = Quality.MP3_192;
|
||||
}
|
||||
else if (bitrate == BitRate.B256)
|
||||
{
|
||||
result.Quality = Quality.MP3_256;
|
||||
}
|
||||
else if (bitrate == BitRate.B320)
|
||||
{
|
||||
result.Quality = Quality.MP3_320;
|
||||
}
|
||||
else
|
||||
{
|
||||
result.Quality = Quality.Unknown;
|
||||
}
|
||||
|
||||
break;
|
||||
case Codec.FLAC:
|
||||
if (sampleSize == SampleSize.S24) {result.Quality = Quality.FLAC_24;}
|
||||
else {result.Quality = Quality.FLAC;}
|
||||
if (sampleSize == SampleSize.S24)
|
||||
{
|
||||
result.Quality = Quality.FLAC_24;
|
||||
}
|
||||
else
|
||||
{
|
||||
result.Quality = Quality.FLAC;
|
||||
}
|
||||
|
||||
break;
|
||||
case Codec.ALAC:
|
||||
result.Quality = Quality.ALAC;
|
||||
@@ -107,30 +146,81 @@ namespace NzbDrone.Core.Parser
|
||||
result.Quality = Quality.WAV;
|
||||
break;
|
||||
case Codec.AAC:
|
||||
if (bitrate == BitRate.B192) { result.Quality = Quality.AAC_192; }
|
||||
else if (bitrate == BitRate.B256) { result.Quality = Quality.AAC_256; }
|
||||
else if (bitrate == BitRate.B320) { result.Quality = Quality.AAC_320; }
|
||||
else { result.Quality = Quality.AAC_VBR; }
|
||||
if (bitrate == BitRate.B192)
|
||||
{
|
||||
result.Quality = Quality.AAC_192;
|
||||
}
|
||||
else if (bitrate == BitRate.B256)
|
||||
{
|
||||
result.Quality = Quality.AAC_256;
|
||||
}
|
||||
else if (bitrate == BitRate.B320)
|
||||
{
|
||||
result.Quality = Quality.AAC_320;
|
||||
}
|
||||
else
|
||||
{
|
||||
result.Quality = Quality.AAC_VBR;
|
||||
}
|
||||
|
||||
break;
|
||||
case Codec.AACVBR:
|
||||
result.Quality = Quality.AAC_VBR;
|
||||
break;
|
||||
case Codec.OGG:
|
||||
case Codec.OPUS:
|
||||
if (bitrate == BitRate.B160) { result.Quality = Quality.VORBIS_Q5; }
|
||||
else if (bitrate == BitRate.B192) { result.Quality = Quality.VORBIS_Q6; }
|
||||
else if (bitrate == BitRate.B224) { result.Quality = Quality.VORBIS_Q7; }
|
||||
else if (bitrate == BitRate.B256) { result.Quality = Quality.VORBIS_Q8; }
|
||||
else if (bitrate == BitRate.B320) { result.Quality = Quality.VORBIS_Q9; }
|
||||
else if (bitrate == BitRate.B500) { result.Quality = Quality.VORBIS_Q10; }
|
||||
else { result.Quality = Quality.Unknown; }
|
||||
if (bitrate == BitRate.B160)
|
||||
{
|
||||
result.Quality = Quality.VORBIS_Q5;
|
||||
}
|
||||
else if (bitrate == BitRate.B192)
|
||||
{
|
||||
result.Quality = Quality.VORBIS_Q6;
|
||||
}
|
||||
else if (bitrate == BitRate.B224)
|
||||
{
|
||||
result.Quality = Quality.VORBIS_Q7;
|
||||
}
|
||||
else if (bitrate == BitRate.B256)
|
||||
{
|
||||
result.Quality = Quality.VORBIS_Q8;
|
||||
}
|
||||
else if (bitrate == BitRate.B320)
|
||||
{
|
||||
result.Quality = Quality.VORBIS_Q9;
|
||||
}
|
||||
else if (bitrate == BitRate.B500)
|
||||
{
|
||||
result.Quality = Quality.VORBIS_Q10;
|
||||
}
|
||||
else
|
||||
{
|
||||
result.Quality = Quality.Unknown;
|
||||
}
|
||||
|
||||
break;
|
||||
case Codec.Unknown:
|
||||
if (bitrate == BitRate.B192) { result.Quality = Quality.MP3_192; }
|
||||
else if (bitrate == BitRate.B256) { result.Quality = Quality.MP3_256; }
|
||||
else if (bitrate == BitRate.B320) { result.Quality = Quality.MP3_320; }
|
||||
else if (bitrate == BitRate.VBR) { result.Quality = Quality.MP3_VBR_V2; }
|
||||
else { result.Quality = Quality.Unknown; }
|
||||
if (bitrate == BitRate.B192)
|
||||
{
|
||||
result.Quality = Quality.MP3_192;
|
||||
}
|
||||
else if (bitrate == BitRate.B256)
|
||||
{
|
||||
result.Quality = Quality.MP3_256;
|
||||
}
|
||||
else if (bitrate == BitRate.B320)
|
||||
{
|
||||
result.Quality = Quality.MP3_320;
|
||||
}
|
||||
else if (bitrate == BitRate.VBR)
|
||||
{
|
||||
result.Quality = Quality.MP3_VBR_V2;
|
||||
}
|
||||
else
|
||||
{
|
||||
result.Quality = Quality.Unknown;
|
||||
}
|
||||
|
||||
break;
|
||||
default:
|
||||
result.Quality = Quality.Unknown;
|
||||
@@ -164,20 +254,75 @@ namespace NzbDrone.Core.Parser
|
||||
|
||||
var match = CodecRegex.Match(name);
|
||||
|
||||
if (!match.Success) { return Codec.Unknown; }
|
||||
if (match.Groups["FLAC"].Success) { return Codec.FLAC; }
|
||||
if (match.Groups["ALAC"].Success) { return Codec.ALAC; }
|
||||
if (match.Groups["WMA"].Success) { return Codec.WMA; }
|
||||
if (match.Groups["WAV"].Success) { return Codec.WAV; }
|
||||
if (match.Groups["AAC"].Success) { return Codec.AAC; }
|
||||
if (match.Groups["OGG"].Success) { return Codec.OGG; }
|
||||
if (match.Groups["OPUS"].Success) { return Codec.OPUS; }
|
||||
if (match.Groups["MP1"].Success) { return Codec.MP1; }
|
||||
if (match.Groups["MP2"].Success) { return Codec.MP2; }
|
||||
if (match.Groups["MP3VBR"].Success) { return Codec.MP3VBR; }
|
||||
if (match.Groups["MP3CBR"].Success) { return Codec.MP3CBR; }
|
||||
if (match.Groups["WAVPACK"].Success) { return Codec.WAVPACK; }
|
||||
if (match.Groups["APE"].Success) { return Codec.APE; }
|
||||
if (!match.Success)
|
||||
{
|
||||
return Codec.Unknown;
|
||||
}
|
||||
|
||||
if (match.Groups["FLAC"].Success)
|
||||
{
|
||||
return Codec.FLAC;
|
||||
}
|
||||
|
||||
if (match.Groups["ALAC"].Success)
|
||||
{
|
||||
return Codec.ALAC;
|
||||
}
|
||||
|
||||
if (match.Groups["WMA"].Success)
|
||||
{
|
||||
return Codec.WMA;
|
||||
}
|
||||
|
||||
if (match.Groups["WAV"].Success)
|
||||
{
|
||||
return Codec.WAV;
|
||||
}
|
||||
|
||||
if (match.Groups["AAC"].Success)
|
||||
{
|
||||
return Codec.AAC;
|
||||
}
|
||||
|
||||
if (match.Groups["OGG"].Success)
|
||||
{
|
||||
return Codec.OGG;
|
||||
}
|
||||
|
||||
if (match.Groups["OPUS"].Success)
|
||||
{
|
||||
return Codec.OPUS;
|
||||
}
|
||||
|
||||
if (match.Groups["MP1"].Success)
|
||||
{
|
||||
return Codec.MP1;
|
||||
}
|
||||
|
||||
if (match.Groups["MP2"].Success)
|
||||
{
|
||||
return Codec.MP2;
|
||||
}
|
||||
|
||||
if (match.Groups["MP3VBR"].Success)
|
||||
{
|
||||
return Codec.MP3VBR;
|
||||
}
|
||||
|
||||
if (match.Groups["MP3CBR"].Success)
|
||||
{
|
||||
return Codec.MP3CBR;
|
||||
}
|
||||
|
||||
if (match.Groups["WAVPACK"].Success)
|
||||
{
|
||||
return Codec.WAVPACK;
|
||||
}
|
||||
|
||||
if (match.Groups["APE"].Success)
|
||||
{
|
||||
return Codec.APE;
|
||||
}
|
||||
|
||||
return Codec.Unknown;
|
||||
}
|
||||
@@ -187,18 +332,65 @@ namespace NzbDrone.Core.Parser
|
||||
//var nameWithNoSpaces = Regex.Replace(name, @"\s+", "");
|
||||
var match = BitRateRegex.Match(name);
|
||||
|
||||
if (!match.Success) return BitRate.Unknown;
|
||||
if (match.Groups["B096"].Success) { return BitRate.B096; }
|
||||
if (match.Groups["B128"].Success) { return BitRate.B128; }
|
||||
if (match.Groups["B160"].Success) { return BitRate.B160; }
|
||||
if (match.Groups["B192"].Success) { return BitRate.B192; }
|
||||
if (match.Groups["B224"].Success) { return BitRate.B224; }
|
||||
if (match.Groups["B256"].Success) { return BitRate.B256; }
|
||||
if (match.Groups["B320"].Success) { return BitRate.B320; }
|
||||
if (match.Groups["B500"].Success) { return BitRate.B500; }
|
||||
if (match.Groups["VBR"].Success) { return BitRate.VBR; }
|
||||
if (match.Groups["VBRV0"].Success) { return BitRate.VBRV0; }
|
||||
if (match.Groups["VBRV2"].Success) { return BitRate.VBRV2; }
|
||||
if (!match.Success)
|
||||
{
|
||||
return BitRate.Unknown;
|
||||
}
|
||||
|
||||
if (match.Groups["B096"].Success)
|
||||
{
|
||||
return BitRate.B096;
|
||||
}
|
||||
|
||||
if (match.Groups["B128"].Success)
|
||||
{
|
||||
return BitRate.B128;
|
||||
}
|
||||
|
||||
if (match.Groups["B160"].Success)
|
||||
{
|
||||
return BitRate.B160;
|
||||
}
|
||||
|
||||
if (match.Groups["B192"].Success)
|
||||
{
|
||||
return BitRate.B192;
|
||||
}
|
||||
|
||||
if (match.Groups["B224"].Success)
|
||||
{
|
||||
return BitRate.B224;
|
||||
}
|
||||
|
||||
if (match.Groups["B256"].Success)
|
||||
{
|
||||
return BitRate.B256;
|
||||
}
|
||||
|
||||
if (match.Groups["B320"].Success)
|
||||
{
|
||||
return BitRate.B320;
|
||||
}
|
||||
|
||||
if (match.Groups["B500"].Success)
|
||||
{
|
||||
return BitRate.B500;
|
||||
}
|
||||
|
||||
if (match.Groups["VBR"].Success)
|
||||
{
|
||||
return BitRate.VBR;
|
||||
}
|
||||
|
||||
if (match.Groups["VBRV0"].Success)
|
||||
{
|
||||
return BitRate.VBRV0;
|
||||
}
|
||||
|
||||
if (match.Groups["VBRV2"].Success)
|
||||
{
|
||||
return BitRate.VBRV2;
|
||||
}
|
||||
|
||||
return BitRate.Unknown;
|
||||
}
|
||||
@@ -207,8 +399,15 @@ namespace NzbDrone.Core.Parser
|
||||
{
|
||||
var match = SampleSizeRegex.Match(name);
|
||||
|
||||
if (!match.Success) { return SampleSize.Unknown; }
|
||||
if (match.Groups["S24"].Success) { return SampleSize.S24; }
|
||||
if (!match.Success)
|
||||
{
|
||||
return SampleSize.Unknown;
|
||||
}
|
||||
|
||||
if (match.Groups["S24"].Success)
|
||||
{
|
||||
return SampleSize.S24;
|
||||
}
|
||||
|
||||
return SampleSize.Unknown;
|
||||
}
|
||||
@@ -223,26 +422,98 @@ namespace NzbDrone.Core.Parser
|
||||
case Codec.MP3VBR:
|
||||
return Quality.MP3_VBR;
|
||||
case Codec.MP3CBR:
|
||||
if (bitrate == 8) { return Quality.MP3_008; }
|
||||
if (bitrate == 16) { return Quality.MP3_016; }
|
||||
if (bitrate == 24) { return Quality.MP3_024; }
|
||||
if (bitrate == 32) { return Quality.MP3_032; }
|
||||
if (bitrate == 40) { return Quality.MP3_040; }
|
||||
if (bitrate == 48) { return Quality.MP3_048; }
|
||||
if (bitrate == 56) { return Quality.MP3_056; }
|
||||
if (bitrate == 64) { return Quality.MP3_064; }
|
||||
if (bitrate == 80) { return Quality.MP3_080; }
|
||||
if (bitrate == 96) { return Quality.MP3_096; }
|
||||
if (bitrate == 112) { return Quality.MP3_112; }
|
||||
if (bitrate == 128) { return Quality.MP3_128; }
|
||||
if (bitrate == 160) { return Quality.MP3_160; }
|
||||
if (bitrate == 192) { return Quality.MP3_192; }
|
||||
if (bitrate == 224) { return Quality.MP3_224; }
|
||||
if (bitrate == 256) { return Quality.MP3_256; }
|
||||
if (bitrate == 320) { return Quality.MP3_320; }
|
||||
if (bitrate == 8)
|
||||
{
|
||||
return Quality.MP3_008;
|
||||
}
|
||||
|
||||
if (bitrate == 16)
|
||||
{
|
||||
return Quality.MP3_016;
|
||||
}
|
||||
|
||||
if (bitrate == 24)
|
||||
{
|
||||
return Quality.MP3_024;
|
||||
}
|
||||
|
||||
if (bitrate == 32)
|
||||
{
|
||||
return Quality.MP3_032;
|
||||
}
|
||||
|
||||
if (bitrate == 40)
|
||||
{
|
||||
return Quality.MP3_040;
|
||||
}
|
||||
|
||||
if (bitrate == 48)
|
||||
{
|
||||
return Quality.MP3_048;
|
||||
}
|
||||
|
||||
if (bitrate == 56)
|
||||
{
|
||||
return Quality.MP3_056;
|
||||
}
|
||||
|
||||
if (bitrate == 64)
|
||||
{
|
||||
return Quality.MP3_064;
|
||||
}
|
||||
|
||||
if (bitrate == 80)
|
||||
{
|
||||
return Quality.MP3_080;
|
||||
}
|
||||
|
||||
if (bitrate == 96)
|
||||
{
|
||||
return Quality.MP3_096;
|
||||
}
|
||||
|
||||
if (bitrate == 112)
|
||||
{
|
||||
return Quality.MP3_112;
|
||||
}
|
||||
|
||||
if (bitrate == 128)
|
||||
{
|
||||
return Quality.MP3_128;
|
||||
}
|
||||
|
||||
if (bitrate == 160)
|
||||
{
|
||||
return Quality.MP3_160;
|
||||
}
|
||||
|
||||
if (bitrate == 192)
|
||||
{
|
||||
return Quality.MP3_192;
|
||||
}
|
||||
|
||||
if (bitrate == 224)
|
||||
{
|
||||
return Quality.MP3_224;
|
||||
}
|
||||
|
||||
if (bitrate == 256)
|
||||
{
|
||||
return Quality.MP3_256;
|
||||
}
|
||||
|
||||
if (bitrate == 320)
|
||||
{
|
||||
return Quality.MP3_320;
|
||||
}
|
||||
|
||||
return Quality.Unknown;
|
||||
case Codec.FLAC:
|
||||
if (sampleSize == 24) {return Quality.FLAC_24;}
|
||||
if (sampleSize == 24)
|
||||
{
|
||||
return Quality.FLAC_24;
|
||||
}
|
||||
|
||||
return Quality.FLAC;
|
||||
case Codec.ALAC:
|
||||
return Quality.ALAC;
|
||||
@@ -255,25 +526,85 @@ namespace NzbDrone.Core.Parser
|
||||
case Codec.WAV:
|
||||
return Quality.WAV;
|
||||
case Codec.AAC:
|
||||
if (bitrate == 192) { return Quality.AAC_192; }
|
||||
if (bitrate == 256) { return Quality.AAC_256; }
|
||||
if (bitrate == 320) { return Quality.AAC_320; }
|
||||
if (bitrate == 192)
|
||||
{
|
||||
return Quality.AAC_192;
|
||||
}
|
||||
|
||||
if (bitrate == 256)
|
||||
{
|
||||
return Quality.AAC_256;
|
||||
}
|
||||
|
||||
if (bitrate == 320)
|
||||
{
|
||||
return Quality.AAC_320;
|
||||
}
|
||||
|
||||
return Quality.AAC_VBR;
|
||||
case Codec.OGG:
|
||||
if (bitrate == 160) { return Quality.VORBIS_Q5; }
|
||||
if (bitrate == 192) { return Quality.VORBIS_Q6; }
|
||||
if (bitrate == 224) { return Quality.VORBIS_Q7; }
|
||||
if (bitrate == 256) { return Quality.VORBIS_Q8; }
|
||||
if (bitrate == 320) { return Quality.VORBIS_Q9; }
|
||||
if (bitrate == 500) { return Quality.VORBIS_Q10; }
|
||||
return Quality.Unknown;
|
||||
if (bitrate == 160)
|
||||
{
|
||||
return Quality.VORBIS_Q5;
|
||||
}
|
||||
|
||||
if (bitrate == 192)
|
||||
{
|
||||
return Quality.VORBIS_Q6;
|
||||
}
|
||||
|
||||
if (bitrate == 224)
|
||||
{
|
||||
return Quality.VORBIS_Q7;
|
||||
}
|
||||
|
||||
if (bitrate == 256)
|
||||
{
|
||||
return Quality.VORBIS_Q8;
|
||||
}
|
||||
|
||||
if (bitrate == 320)
|
||||
{
|
||||
return Quality.VORBIS_Q9;
|
||||
}
|
||||
|
||||
if (bitrate == 500)
|
||||
{
|
||||
return Quality.VORBIS_Q10;
|
||||
}
|
||||
|
||||
return Quality.Unknown;
|
||||
case Codec.OPUS:
|
||||
if (bitrate < 130) { return Quality.Unknown; }
|
||||
if (bitrate < 180) { return Quality.VORBIS_Q5; }
|
||||
if (bitrate < 205) { return Quality.VORBIS_Q6; }
|
||||
if (bitrate < 240) { return Quality.VORBIS_Q7; }
|
||||
if (bitrate < 290) { return Quality.VORBIS_Q8; }
|
||||
if (bitrate < 410) { return Quality.VORBIS_Q9; }
|
||||
if (bitrate < 130)
|
||||
{
|
||||
return Quality.Unknown;
|
||||
}
|
||||
|
||||
if (bitrate < 180)
|
||||
{
|
||||
return Quality.VORBIS_Q5;
|
||||
}
|
||||
|
||||
if (bitrate < 205)
|
||||
{
|
||||
return Quality.VORBIS_Q6;
|
||||
}
|
||||
|
||||
if (bitrate < 240)
|
||||
{
|
||||
return Quality.VORBIS_Q7;
|
||||
}
|
||||
|
||||
if (bitrate < 290)
|
||||
{
|
||||
return Quality.VORBIS_Q8;
|
||||
}
|
||||
|
||||
if (bitrate < 410)
|
||||
{
|
||||
return Quality.VORBIS_Q9;
|
||||
}
|
||||
|
||||
return Quality.VORBIS_Q10;
|
||||
default:
|
||||
return Quality.Unknown;
|
||||
|
||||
Reference in New Issue
Block a user