Mitchell Haley 3 weeks ago committed by GitHub
commit 7b542f1f37
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -21,6 +21,7 @@ namespace NzbDrone.Core.Test.ParserTests
new object[] { Quality.WEBDL720p },
new object[] { Quality.WEBDL1080p },
new object[] { Quality.WEBDL2160p },
new object[] { Quality.Bluray576p },
new object[] { Quality.Bluray720p },
new object[] { Quality.Bluray1080p },
new object[] { Quality.Bluray2160p },
@ -39,6 +40,7 @@ namespace NzbDrone.Core.Test.ParserTests
new object[] { "720p WEB-DL", Quality.WEBDL720p },
new object[] { "1080p WEB-DL", Quality.WEBDL1080p },
new object[] { "2160p WEB-DL", Quality.WEBDL2160p },
new object[] { "576p BluRay", Quality.Bluray576p },
new object[] { "720p BluRay", Quality.Bluray720p },
new object[] { "1080p BluRay", Quality.Bluray1080p },
new object[] { "2160p BluRay", Quality.Bluray2160p },
@ -105,7 +107,6 @@ namespace NzbDrone.Core.Test.ParserTests
[TestCase("SERIES.S03E01-06.DUAL.BDRip.AC3.-HELLYWOOD", false)]
[TestCase("SERIES.S03E01-06.DUAL.BDRip.XviD.AC3.-HELLYWOOD.avi", false)]
[TestCase("SERIES.S03E01-06.DUAL.XviD.Bluray.AC3.-HELLYWOOD.avi", false)]
[TestCase("The.Series.S01E05.576p.BluRay.DD5.1.x264-HiSD", false)]
[TestCase("The.Series.S01E05.480p.BluRay.DD5.1.x264-HiSD", false)]
[TestCase("The Series (BD)(640x480(RAW) (BATCH 1) (1-13)", false)]
[TestCase("[Doki] Series - 02 (848x480 XviD BD MP3) [95360783]", false)]
@ -293,6 +294,26 @@ namespace NzbDrone.Core.Test.ParserTests
ParseAndVerifyQuality(title, Quality.WEBRip2160p, proper);
}
[TestCase("Series - S01E03 - Come Fly With Me - 576p BluRay.mkv", false)]
[TestCase("Series.S01E02.Chained.Sonarr.[Bluray576p].mkv", false)]
[TestCase("[FFF] DATE A Sonarr Dev - 01 [BD][576p-AAC][0601BED4]", false)]
[TestCase("[coldhell] Series v3 [BD576p][03192D4C]", false)]
[TestCase("[RandomRemux] Series - 01 [576p BD][043EA407].mkv", false)]
[TestCase("[Kaylith] Series Friends Specials - 01 [BD 576p AAC][B7EEE164].mkv", false)]
[TestCase("SERIES.S03E01-06.DUAL.576p.Blu-ray.AC3.-HELLYWOOD.avi", false)]
[TestCase("[Elysium]Lucky.Series.01(BD.576p.AAC.DA)[0BB96AD8].mkv", false)]
[TestCase("Series.Galaxy.S01E01.33.576p.HDDVD.x264-SiNNERS.mkv", false)]
[TestCase("The.Series.S01E07.RERIP.576p.BluRay.x264-DEMAND", true)]
[TestCase("Sans.Series.De.Traces.FRENCH.576p.BluRay.x264-FHD", false)]
[TestCase("Series.Black.1x01.Selezione.Naturale.ITA.576p.BDMux.x264-NovaRip", false)]
[TestCase("Series.Hunter.S02.576p.Blu-ray.Remux.AVC.FLAC.2.0-SiCFoI", false)]
[TestCase("The.Series.S01E05.576p.BluRay.DD5.1.x264-HiSD", false)]
[TestCase("Series Title S01 [576p]BluRay.mkv", false)]
public void should_parse_bluray576p_quality(string title, bool proper)
{
ParseAndVerifyQuality(title, Quality.Bluray576p, proper);
}
[TestCase("SERIES.S03E01-06.DUAL.Bluray.AC3.-HELLYWOOD.avi", false)]
[TestCase("Series - S01E03 - Come Fly With Me - 720p BluRay.mkv", false)]
[TestCase("The Big Series.S03E01.The Sonarr Can Opener.m2ts", false)]

@ -20,6 +20,7 @@ namespace NzbDrone.Core.Test.Qualities
new object[] { 4, Quality.HDTV720p },
new object[] { 5, Quality.WEBDL720p },
new object[] { 6, Quality.Bluray720p },
new object[] { 6, Quality.Bluray720p },
new object[] { 7, Quality.Bluray1080p },
new object[] { 8, Quality.WEBDL480p },
new object[] { 9, Quality.HDTV1080p },

@ -0,0 +1,145 @@
using System.Collections.Generic;
using System.Data;
using System.Linq;
using FluentMigrator;
using Newtonsoft.Json;
using NzbDrone.Common.Serializer;
using NzbDrone.Core.Datastore.Migration.Framework;
namespace NzbDrone.Core.Datastore.Migration
{
[Migration(201)]
public class add_bluray576_quality_in_profile : NzbDroneMigrationBase
{
protected override void MainDbUpgrade()
{
Execute.WithConnection(ConvertProfile);
}
private void ConvertProfile(IDbConnection conn, IDbTransaction tran)
{
var updater = new ProfileUpdater201(conn, tran);
updater.SplitQualityAppend(13, 22); // Insert Bluray576p after Bluray480p
updater.Commit();
}
}
public class Profile201
{
public int Id { get; set; }
public string Name { get; set; }
public int Cutoff { get; set; }
public List<ProfileItem201> Items { get; set; }
}
public class ProfileItem201
{
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)]
public int Id { get; set; }
public string Name { get; set; }
public int? Quality { get; set; }
public bool Allowed { get; set; }
public List<ProfileItem201> Items { get; set; }
}
public class ProfileUpdater201
{
private readonly IDbConnection _connection;
private readonly IDbTransaction _transaction;
private List<Profile201> _profiles;
private HashSet<Profile201> _changedProfiles = new HashSet<Profile201>();
public ProfileUpdater201(IDbConnection conn, IDbTransaction tran)
{
_connection = conn;
_transaction = tran;
_profiles = GetProfiles();
}
public void Commit()
{
foreach (var profile in _changedProfiles)
{
using (var updateProfileCmd = _connection.CreateCommand())
{
updateProfileCmd.Transaction = _transaction;
updateProfileCmd.CommandText = "UPDATE QualityProfiles SET Name = ?, Cutoff = ?, Items = ? WHERE Id = ?";
updateProfileCmd.AddParameter(profile.Name);
updateProfileCmd.AddParameter(profile.Cutoff);
updateProfileCmd.AddParameter(profile.Items.ToJson());
updateProfileCmd.AddParameter(profile.Id);
updateProfileCmd.ExecuteNonQuery();
}
}
_changedProfiles.Clear();
}
public void SplitQualityAppend(int find, int quality)
{
foreach (var profile in _profiles)
{
if (profile.Items.Any(v => v.Quality == quality))
{
continue;
}
var findIndex = profile.Items.FindIndex(v =>
{
return v.Quality == find || (v.Items != null && v.Items.Any(b => b.Quality == find));
});
var newBlurayProfile = new ProfileItem201
{
Quality = quality,
Allowed = false
};
// The Bluray576p quality should be allowed in profiles which have Bluray480p allowed already
if (profile.Items.Any(v => v.Quality == 13 && v.Allowed))
{
newBlurayProfile.Allowed = true;
}
profile.Items.Insert(findIndex + 1, newBlurayProfile);
_changedProfiles.Add(profile);
}
}
private List<Profile201> GetProfiles()
{
var profiles = new List<Profile201>();
using (var getProfilesCmd = _connection.CreateCommand())
{
getProfilesCmd.Transaction = _transaction;
getProfilesCmd.CommandText = @"SELECT Id, Name, Cutoff, Items FROM QualityProfiles";
using (var profileReader = getProfilesCmd.ExecuteReader())
{
while (profileReader.Read())
{
profiles.Add(new Profile201
{
Id = profileReader.GetInt32(0),
Name = profileReader.GetString(1),
Cutoff = profileReader.GetInt32(2),
Items = Json.Deserialize<List<ProfileItem201>>(profileReader.GetString(3))
});
}
}
}
return profiles;
}
}
}

@ -58,7 +58,7 @@ namespace NzbDrone.Core.Parser
private static readonly Regex OtherSourceRegex = new (@"(?<hdtv>HD[-_. ]TV)|(?<sdtv>SD[-_. ]TV)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
private static readonly Regex AnimeBlurayRegex = new (@"bd(?:720|1080|2160)|(?<=[-_. (\[])bd(?=[-_. )\]])", RegexOptions.Compiled | RegexOptions.IgnoreCase);
private static readonly Regex AnimeBlurayRegex = new (@"bd(?:576|720|1080|2160)|(?<=[-_. (\[])bd(?=[-_. )\]])", RegexOptions.Compiled | RegexOptions.IgnoreCase);
private static readonly Regex AnimeWebDlRegex = new (@"\[WEB\]|[\[\(]WEB[ .]", RegexOptions.Compiled | RegexOptions.IgnoreCase);
private static readonly Regex HighDefPdtvRegex = new (@"hr[-_. ]ws", RegexOptions.Compiled | RegexOptions.IgnoreCase);
@ -137,7 +137,6 @@ namespace NzbDrone.Core.Parser
if (resolution == Resolution.R2160p)
{
result.Quality = remuxMatch ? Quality.Bluray2160pRemux : Quality.Bluray2160p;
return result;
}
@ -147,8 +146,14 @@ namespace NzbDrone.Core.Parser
return result;
}
if (resolution == Resolution.R576p)
{
result.Quality = Quality.Bluray576p;
return result;
}
if (resolution == Resolution.R360P || resolution == Resolution.R480P ||
resolution == Resolution.R540p || resolution == Resolution.R576p)
resolution == Resolution.R540p)
{
result.Quality = Quality.Bluray480p;
return result;
@ -261,6 +266,9 @@ namespace NzbDrone.Core.Parser
{
switch (resolution)
{
case Resolution.R576p:
result.Quality = Quality.Bluray576p;
return result;
case Resolution.R720p:
result.Quality = Quality.Bluray720p;
return result;
@ -326,6 +334,14 @@ namespace NzbDrone.Core.Parser
return result;
}
if (resolution == Resolution.R576p || normalizedName.ContainsIgnoreCase("576p"))
{
result.ResolutionDetectionSource = QualityDetectionSource.Name;
result.Quality = Quality.Bluray576p;
return result;
}
if (resolution == Resolution.R1080p || normalizedName.ContainsIgnoreCase("1080p"))
{
result.ResolutionDetectionSource = QualityDetectionSource.Name;
@ -359,8 +375,7 @@ namespace NzbDrone.Core.Parser
result.SourceDetectionSource = QualityDetectionSource.Name;
if (resolution == Resolution.R360P || resolution == Resolution.R480P ||
resolution == Resolution.R540p || resolution == Resolution.R576p ||
normalizedName.ContainsIgnoreCase("480p"))
resolution == Resolution.R540p || normalizedName.ContainsIgnoreCase("480p"))
{
result.ResolutionDetectionSource = QualityDetectionSource.Name;
result.Quality = Quality.WEBDL480p;
@ -524,6 +539,15 @@ namespace NzbDrone.Core.Parser
return result;
}
if (normalizedName.ContainsIgnoreCase("bluray576p"))
{
result.SourceDetectionSource = QualityDetectionSource.Name;
result.ResolutionDetectionSource = QualityDetectionSource.Name;
result.Quality = Quality.Bluray576p;
return result;
}
if (normalizedName.ContainsIgnoreCase("bluray720p"))
{
result.SourceDetectionSource = QualityDetectionSource.Name;

@ -104,6 +104,7 @@ namespace NzbDrone.Core.Profiles.Qualities
Quality.WEBDL720p,
Quality.WEBRip1080p,
Quality.WEBDL1080p,
Quality.Bluray576p,
Quality.Bluray720p,
Quality.Bluray1080p);
@ -112,7 +113,8 @@ namespace NzbDrone.Core.Profiles.Qualities
Quality.SDTV,
Quality.WEBRip480p,
Quality.WEBDL480p,
Quality.DVD);
Quality.DVD,
Quality.Bluray576p);
AddDefaultProfile("HD-720p",
Quality.HDTV720p,

@ -97,6 +97,11 @@ namespace NzbDrone.Core.Qualities
get { return new Quality(13, "Bluray-480p", QualitySource.Bluray, 480); }
}
public static Quality Bluray576p
{
get { return new Quality(22, "Bluray-576p", QualitySource.Bluray, 576); }
}
public static Quality WEBRip720p
{
get { return new Quality(14, "WEBRip-720p", QualitySource.WebRip, 720); }
@ -128,6 +133,7 @@ namespace NzbDrone.Core.Qualities
WEBRip480p,
WEBDL480p,
Bluray480p,
Bluray576p,
HDTV720p,
WEBRip720p,
WEBDL720p,
@ -155,21 +161,22 @@ namespace NzbDrone.Core.Qualities
new QualityDefinition(Quality.WEBDL480p) { Weight = 3, MinSize = 2, MaxSize = 100, PreferredSize = 95, GroupName = "WEB 480p" },
new QualityDefinition(Quality.DVD) { Weight = 4, MinSize = 2, MaxSize = 100, PreferredSize = 95, GroupName = "DVD" },
new QualityDefinition(Quality.Bluray480p) { Weight = 5, MinSize = 2, MaxSize = 100, PreferredSize = 95, GroupName = "DVD" },
new QualityDefinition(Quality.HDTV720p) { Weight = 6, MinSize = 3, MaxSize = 125, PreferredSize = 95 },
new QualityDefinition(Quality.HDTV1080p) { Weight = 7, MinSize = 4, MaxSize = 125, PreferredSize = 95 },
new QualityDefinition(Quality.RAWHD) { Weight = 8, MinSize = 4, MaxSize = null, PreferredSize = 95 },
new QualityDefinition(Quality.WEBRip720p) { Weight = 9, MinSize = 3, MaxSize = 130, PreferredSize = 95, GroupName = "WEB 720p" },
new QualityDefinition(Quality.WEBDL720p) { Weight = 9, MinSize = 3, MaxSize = 130, PreferredSize = 95, GroupName = "WEB 720p" },
new QualityDefinition(Quality.Bluray720p) { Weight = 10, MinSize = 4, MaxSize = 130, PreferredSize = 95 },
new QualityDefinition(Quality.WEBRip1080p) { Weight = 11, MinSize = 4, MaxSize = 130, PreferredSize = 95, GroupName = "WEB 1080p" },
new QualityDefinition(Quality.WEBDL1080p) { Weight = 11, MinSize = 4, MaxSize = 130, PreferredSize = 95, GroupName = "WEB 1080p" },
new QualityDefinition(Quality.Bluray1080p) { Weight = 12, MinSize = 4, MaxSize = 155, PreferredSize = 95 },
new QualityDefinition(Quality.Bluray1080pRemux) { Weight = 13, MinSize = 35, MaxSize = null, PreferredSize = 95 },
new QualityDefinition(Quality.HDTV2160p) { Weight = 14, MinSize = 35, MaxSize = 199.9, PreferredSize = 95 },
new QualityDefinition(Quality.WEBRip2160p) { Weight = 15, MinSize = 35, MaxSize = null, PreferredSize = 95, GroupName = "WEB 2160p" },
new QualityDefinition(Quality.WEBDL2160p) { Weight = 15, MinSize = 35, MaxSize = null, PreferredSize = 95, GroupName = "WEB 2160p" },
new QualityDefinition(Quality.Bluray2160p) { Weight = 16, MinSize = 35, MaxSize = null, PreferredSize = 95 },
new QualityDefinition(Quality.Bluray2160pRemux) { Weight = 17, MinSize = 35, MaxSize = null, PreferredSize = 95 }
new QualityDefinition(Quality.Bluray576p) { Weight = 6, MinSize = 2, MaxSize = 100, PreferredSize = 95 },
new QualityDefinition(Quality.HDTV720p) { Weight = 7, MinSize = 3, MaxSize = 125, PreferredSize = 95 },
new QualityDefinition(Quality.HDTV1080p) { Weight = 8, MinSize = 4, MaxSize = 125, PreferredSize = 95 },
new QualityDefinition(Quality.RAWHD) { Weight = 9, MinSize = 4, MaxSize = null, PreferredSize = 95 },
new QualityDefinition(Quality.WEBRip720p) { Weight = 10, MinSize = 3, MaxSize = 130, PreferredSize = 95, GroupName = "WEB 720p" },
new QualityDefinition(Quality.WEBDL720p) { Weight = 10, MinSize = 3, MaxSize = 130, PreferredSize = 95, GroupName = "WEB 720p" },
new QualityDefinition(Quality.Bluray720p) { Weight = 11, MinSize = 4, MaxSize = 130, PreferredSize = 95 },
new QualityDefinition(Quality.WEBRip1080p) { Weight = 12, MinSize = 4, MaxSize = 130, PreferredSize = 95, GroupName = "WEB 1080p" },
new QualityDefinition(Quality.WEBDL1080p) { Weight = 12, MinSize = 4, MaxSize = 130, PreferredSize = 95, GroupName = "WEB 1080p" },
new QualityDefinition(Quality.Bluray1080p) { Weight = 13, MinSize = 4, MaxSize = 155, PreferredSize = 95 },
new QualityDefinition(Quality.Bluray1080pRemux) { Weight = 14, MinSize = 35, MaxSize = null, PreferredSize = 95 },
new QualityDefinition(Quality.HDTV2160p) { Weight = 15, MinSize = 35, MaxSize = 199.9, PreferredSize = 95 },
new QualityDefinition(Quality.WEBRip2160p) { Weight = 16, MinSize = 35, MaxSize = null, PreferredSize = 95, GroupName = "WEB 2160p" },
new QualityDefinition(Quality.WEBDL2160p) { Weight = 16, MinSize = 35, MaxSize = null, PreferredSize = 95, GroupName = "WEB 2160p" },
new QualityDefinition(Quality.Bluray2160p) { Weight = 17, MinSize = 35, MaxSize = null, PreferredSize = 95 },
new QualityDefinition(Quality.Bluray2160pRemux) { Weight = 18, MinSize = 35, MaxSize = null, PreferredSize = 95 }
};
}

Loading…
Cancel
Save