From 9cf353b423fa4946000a156d5915d983582c729d Mon Sep 17 00:00:00 2001 From: ta264 Date: Wed, 15 Jan 2020 21:41:57 +0000 Subject: [PATCH] Fix typo and rename duplicate ListType property --- .../Migration/166_fix_tmdb_list_config.cs | 175 ++++++++++++++++-- .../Popular/TMDbPopularRequestGenerator.cs | 8 +- .../TMDb/Popular/TMDbPopularSettings.cs | 6 +- .../NetImport/TMDb/TMDbFilterSettings.cs | 8 +- .../NetImport/Trakt/TraktParser.cs | 2 +- .../NetImport/Trakt/TraktRequestGenerator.cs | 4 +- .../NetImport/Trakt/TraktSettings.cs | 18 +- 7 files changed, 179 insertions(+), 42 deletions(-) diff --git a/src/NzbDrone.Core/Datastore/Migration/166_fix_tmdb_list_config.cs b/src/NzbDrone.Core/Datastore/Migration/166_fix_tmdb_list_config.cs index a27d773da..c0575781a 100644 --- a/src/NzbDrone.Core/Datastore/Migration/166_fix_tmdb_list_config.cs +++ b/src/NzbDrone.Core/Datastore/Migration/166_fix_tmdb_list_config.cs @@ -13,18 +13,11 @@ namespace NzbDrone.Core.Datastore.Migration [Migration(166)] public class fix_tmdb_list_config : NzbDroneMigrationBase { - protected override void MainDbUpgrade() + private readonly JsonSerializerOptions _serializerSettings; + + public fix_tmdb_list_config() { - Execute.WithConnection(FixConfig); - } - - private void FixConfig(IDbConnection conn, IDbTransaction tran) - { - var rows = conn.Query($"SELECT Id, Implementation, ConfigContract, Settings FROM NetImport WHERE Implementation = 'TMDbImport'"); - - var corrected = new List(); - - var serializerSettings = new JsonSerializerOptions + _serializerSettings = new JsonSerializerOptions { AllowTrailingCommas = true, IgnoreNullValues = false, @@ -33,10 +26,102 @@ private void FixConfig(IDbConnection conn, IDbTransaction tran) PropertyNamingPolicy = JsonNamingPolicy.CamelCase, WriteIndented = true }; + } + + protected override void MainDbUpgrade() + { + Execute.WithConnection(RenameTMDbListType); + Execute.WithConnection(RenameTraktListType); + Execute.WithConnection(FixConfig); + } + + private void RenameTMDbListType(IDbConnection conn, IDbTransaction tran) + { + var rows = conn.Query($"SELECT Id, Implementation, ConfigContract, Settings FROM NetImport WHERE Implementation = 'TMDbPopularImport'"); + + var corrected = new List(); foreach (var row in rows) { - var settings = JsonSerializer.Deserialize(row.Settings, serializerSettings); + var settings = JsonSerializer.Deserialize(row.Settings, _serializerSettings); + + var newSettings = new TMDbPopularSettings166 + { + TMDbListType = settings.ListType, + FilterCriteria = new TMDbFilterSettings166 + { + MinVoteAverage = settings.FilterCriteria.MinVoteAverage, + MinVotes = settings.FilterCriteria.MinVotes, + Certification = settings.FilterCriteria.Ceritification, + IncludeGenreIds = settings.FilterCriteria.IncludeGenreIds, + ExcludeGenreIds = settings.FilterCriteria.ExcludeGenreIds, + LanguageCode = settings.FilterCriteria.LanguageCode + } + }; + + corrected.Add(new ProviderDefinition166 + { + Id = row.Id, + Implementation = "TMDbPopularImport", + ConfigContract = "TMDbPopularSettings", + Settings = JsonSerializer.Serialize(newSettings, _serializerSettings) + }); + } + + var updateSql = "UPDATE NetImport SET Settings = @Settings WHERE Id = @Id"; + conn.Execute(updateSql, corrected, transaction: tran); + } + + private void RenameTraktListType(IDbConnection conn, IDbTransaction tran) + { + var rows = conn.Query($"SELECT Id, Implementation, ConfigContract, Settings FROM NetImport WHERE Implementation = 'TraktImport'"); + + var corrected = new List(); + + foreach (var row in rows) + { + var settings = JsonSerializer.Deserialize(row.Settings, _serializerSettings); + + var newSettings = new TraktSettings166 + { + AccessToken = settings.AccessToken, + RefreshToken = settings.RefreshToken, + Expires = settings.Expires, + Link = settings.Link, + TraktListType = settings.ListType, + Username = settings.Username, + Listname = settings.Listname, + Rating = settings.Rating, + Certification = settings.Ceritification, + Genres = settings.Genres, + Years = settings.Years, + Limit = settings.Limit, + TraktAdditionalParameters = settings.TraktAdditionalParameters, + SignIn = settings.SignIn + }; + + corrected.Add(new ProviderDefinition166 + { + Id = row.Id, + Implementation = "TraktImport", + ConfigContract = "TraktSettings", + Settings = JsonSerializer.Serialize(newSettings, _serializerSettings) + }); + } + + var updateSql = "UPDATE NetImport SET Settings = @Settings WHERE Id = @Id"; + conn.Execute(updateSql, corrected, transaction: tran); + } + + private void FixConfig(IDbConnection conn, IDbTransaction tran) + { + var rows = conn.Query($"SELECT Id, Implementation, ConfigContract, Settings FROM NetImport WHERE Implementation = 'TMDbImport'"); + + var corrected = new List(); + + foreach (var row in rows) + { + var settings = JsonSerializer.Deserialize(row.Settings, _serializerSettings); if (settings.ListId.IsNotNullOrWhiteSpace()) { @@ -50,19 +135,19 @@ private void FixConfig(IDbConnection conn, IDbTransaction tran) Id = row.Id, Implementation = "TMDbListImport", ConfigContract = "TMDbListSettings", - Settings = JsonSerializer.Serialize(newSettings, serializerSettings) + Settings = JsonSerializer.Serialize(newSettings, _serializerSettings) }); } else { var newSettings = new TMDbPopularSettings166 { - ListType = settings.ListType, + TMDbListType = settings.ListType, FilterCriteria = new TMDbFilterSettings166 { MinVoteAverage = settings.MinVoteAverage, MinVotes = settings.MinVotes, - Ceritification = settings.Ceritification, + Certification = settings.Ceritification, IncludeGenreIds = settings.IncludeGenreIds, ExcludeGenreIds = settings.ExcludeGenreIds, LanguageCode = settings.LanguageCode @@ -74,7 +159,7 @@ private void FixConfig(IDbConnection conn, IDbTransaction tran) Id = row.Id, Implementation = "TMDbPopularImport", ConfigContract = "TMDbPopularSettings", - Settings = JsonSerializer.Serialize(newSettings, serializerSettings) + Settings = JsonSerializer.Serialize(newSettings, _serializerSettings) }); } } @@ -110,13 +195,13 @@ private class TMDbListSettings166 public string ListId { get; set; } } - private class TMDbPopularSettings166 + private class TMDbPopularSettings165 { public int ListType { get; set; } - public TMDbFilterSettings166 FilterCriteria { get; set; } + public TMDbFilterSettings165 FilterCriteria { get; set; } } - private class TMDbFilterSettings166 + private class TMDbFilterSettings165 { public string MinVoteAverage { get; set; } public string MinVotes { get; set; } @@ -125,5 +210,57 @@ private class TMDbFilterSettings166 public string ExcludeGenreIds { get; set; } public int LanguageCode { get; set; } } + + private class TMDbPopularSettings166 + { + public int TMDbListType { get; set; } + public TMDbFilterSettings166 FilterCriteria { get; set; } + } + + private class TMDbFilterSettings166 + { + public string MinVoteAverage { get; set; } + public string MinVotes { get; set; } + public string Certification { get; set; } + public string IncludeGenreIds { get; set; } + public string ExcludeGenreIds { get; set; } + public int LanguageCode { get; set; } + } + + private class TraktSettings165 + { + public string AccessToken { get; set; } + public string RefreshToken { get; set; } + public DateTime Expires { get; set; } + public string Link { get; set; } + public int ListType { get; set; } + public string Username { get; set; } + public string Listname { get; set; } + public string Rating { get; set; } + public string Ceritification { get; set; } + public string Genres { get; set; } + public string Years { get; set; } + public int Limit { get; set; } + public string TraktAdditionalParameters { get; set; } + public string SignIn { get; set; } + } + + private class TraktSettings166 + { + public string AccessToken { get; set; } + public string RefreshToken { get; set; } + public DateTime Expires { get; set; } + public string Link { get; set; } + public int TraktListType { get; set; } + public string Username { get; set; } + public string Listname { get; set; } + public string Rating { get; set; } + public string Certification { get; set; } + public string Genres { get; set; } + public string Years { get; set; } + public int Limit { get; set; } + public string TraktAdditionalParameters { get; set; } + public string SignIn { get; set; } + } } } diff --git a/src/NzbDrone.Core/NetImport/TMDb/Popular/TMDbPopularRequestGenerator.cs b/src/NzbDrone.Core/NetImport/TMDb/Popular/TMDbPopularRequestGenerator.cs index 2fdfd9ad9..b6e54aef4 100644 --- a/src/NzbDrone.Core/NetImport/TMDb/Popular/TMDbPopularRequestGenerator.cs +++ b/src/NzbDrone.Core/NetImport/TMDb/Popular/TMDbPopularRequestGenerator.cs @@ -33,7 +33,7 @@ private IEnumerable GetMoviesRequests() { var minVoteCount = Settings.FilterCriteria.MinVotes; var minVoteAverage = Settings.FilterCriteria.MinVoteAverage; - var ceritification = Settings.FilterCriteria.Ceritification; + var certification = Settings.FilterCriteria.Certification; var includeGenreIds = Settings.FilterCriteria.IncludeGenreIds; var excludeGenreIds = Settings.FilterCriteria.ExcludeGenreIds; var languageCode = (TMDbLanguageCodes)Settings.FilterCriteria.LanguageCode; @@ -48,7 +48,7 @@ private IEnumerable GetMoviesRequests() .SetSegment("id", "") .SetSegment("secondaryRoute", "movie"); - switch (Settings.ListType) + switch (Settings.TMDbListType) { case (int)TMDbPopularListType.Theaters: requestBuilder.AddQueryParam("primary_release.gte", threeMonthsAgo) @@ -66,9 +66,9 @@ private IEnumerable GetMoviesRequests() break; } - if (ceritification.IsNotNullOrWhiteSpace()) + if (certification.IsNotNullOrWhiteSpace()) { - requestBuilder.AddQueryParam("certification", ceritification) + requestBuilder.AddQueryParam("certification", certification) .AddQueryParam("certification_country", "US"); } diff --git a/src/NzbDrone.Core/NetImport/TMDb/Popular/TMDbPopularSettings.cs b/src/NzbDrone.Core/NetImport/TMDb/Popular/TMDbPopularSettings.cs index 6462a70d8..f20d6b5af 100644 --- a/src/NzbDrone.Core/NetImport/TMDb/Popular/TMDbPopularSettings.cs +++ b/src/NzbDrone.Core/NetImport/TMDb/Popular/TMDbPopularSettings.cs @@ -8,7 +8,7 @@ public class TMDbPopularSettingsValidator : TMDbSettingsBaseValidator c.ListType).NotEmpty(); + RuleFor(c => c.TMDbListType).NotEmpty(); RuleFor(c => c.FilterCriteria).SetValidator(_ => new TMDbFilterSettingsValidator()); } @@ -20,11 +20,11 @@ public class TMDbPopularSettings : TMDbSettingsBase public TMDbPopularSettings() { - ListType = (int)TMDbPopularListType.Popular; + TMDbListType = (int)TMDbPopularListType.Popular; } [FieldDefinition(1, Label = "List Type", Type = FieldType.Select, SelectOptions = typeof(TMDbPopularListType), HelpText = "Type of list your seeking to import from")] - public int ListType { get; set; } + public int TMDbListType { get; set; } [FieldDefinition(2)] public TMDbFilterSettings FilterCriteria { get; } = new TMDbFilterSettings(); diff --git a/src/NzbDrone.Core/NetImport/TMDb/TMDbFilterSettings.cs b/src/NzbDrone.Core/NetImport/TMDb/TMDbFilterSettings.cs index d08db2a08..50230fb5a 100644 --- a/src/NzbDrone.Core/NetImport/TMDb/TMDbFilterSettings.cs +++ b/src/NzbDrone.Core/NetImport/TMDb/TMDbFilterSettings.cs @@ -22,9 +22,9 @@ public TMDbFilterSettingsValidator() .WithMessage("Minimum votes must be greater than 0"); // Any valid certification - RuleFor(c => c.Ceritification) + RuleFor(c => c.Certification) .Matches(@"^\bNR\b|\bG\b|\bPG\b|\bPG\-13\b|\bR\b|\bNC\-17\b$", RegexOptions.IgnoreCase) - .When(c => c.Ceritification.IsNotNullOrWhiteSpace()) + .When(c => c.Certification.IsNotNullOrWhiteSpace()) .WithMessage("Not a valid certification"); // CSV of numbers @@ -58,8 +58,8 @@ public TMDbFilterSettings() [FieldDefinition(2, Label = "Minimum Number of Votes", HelpText = "Filter movies by number of votes")] public string MinVotes { get; set; } - [FieldDefinition(3, Label = "Certification", HelpText = "Filter movies by a single ceritification (NR,G,PG,PG-13,R,NC-17)")] - public string Ceritification { get; set; } + [FieldDefinition(3, Label = "Certification", HelpText = "Filter movies by a single certification (NR,G,PG,PG-13,R,NC-17)")] + public string Certification { get; set; } [FieldDefinition(4, Label = "Include Genre Ids", HelpText = "Filter movies by TMDb Genre Ids (Comma Separated)")] public string IncludeGenreIds { get; set; } diff --git a/src/NzbDrone.Core/NetImport/Trakt/TraktParser.cs b/src/NzbDrone.Core/NetImport/Trakt/TraktParser.cs index 3b19a2cc1..a0f26ec9c 100644 --- a/src/NzbDrone.Core/NetImport/Trakt/TraktParser.cs +++ b/src/NzbDrone.Core/NetImport/Trakt/TraktParser.cs @@ -27,7 +27,7 @@ public TraktParser(TraktSettings settings) return movies; } - if (_settings.ListType == (int)TraktListType.Popular) + if (_settings.TraktListType == (int)TraktListType.Popular) { var jsonResponse = JsonConvert.DeserializeObject>(_importResponse.Content); diff --git a/src/NzbDrone.Core/NetImport/Trakt/TraktRequestGenerator.cs b/src/NzbDrone.Core/NetImport/Trakt/TraktRequestGenerator.cs index 85b1d18fb..0a253881d 100644 --- a/src/NzbDrone.Core/NetImport/Trakt/TraktRequestGenerator.cs +++ b/src/NzbDrone.Core/NetImport/Trakt/TraktRequestGenerator.cs @@ -37,9 +37,9 @@ private IEnumerable GetMovies(string searchParameters) { var link = Settings.Link.Trim(); - var filtersAndLimit = $"?years={Settings.Years}&genres={Settings.Genres.ToLower()}&ratings={Settings.Rating}&certifications={Settings.Ceritification.ToLower()}&limit={Settings.Limit}{Settings.TraktAdditionalParameters}"; + var filtersAndLimit = $"?years={Settings.Years}&genres={Settings.Genres.ToLower()}&ratings={Settings.Rating}&certifications={Settings.Certification.ToLower()}&limit={Settings.Limit}{Settings.TraktAdditionalParameters}"; - switch (Settings.ListType) + switch (Settings.TraktListType) { case (int)TraktListType.UserCustomList: var listName = Parser.Parser.ToUrlSlug(Settings.Listname.Trim()); diff --git a/src/NzbDrone.Core/NetImport/Trakt/TraktSettings.cs b/src/NzbDrone.Core/NetImport/Trakt/TraktSettings.cs index 7f189f09e..90be3f0f1 100644 --- a/src/NzbDrone.Core/NetImport/Trakt/TraktSettings.cs +++ b/src/NzbDrone.Core/NetImport/Trakt/TraktSettings.cs @@ -20,13 +20,13 @@ public TraktSettingsValidator() // List name required for UserCustomList RuleFor(c => c.Listname) .Matches(@"^[A-Za-z0-9\-_]+$", RegexOptions.IgnoreCase) - .When(c => c.ListType == (int)TraktListType.UserCustomList) + .When(c => c.TraktListType == (int)TraktListType.UserCustomList) .WithMessage("List name is required when using Custom Trakt Lists"); // Username required for UserWatchedList/UserWatchList RuleFor(c => c.Username) .Matches(@"^[A-Za-z0-9\-_]+$", RegexOptions.IgnoreCase) - .When(c => c.ListType == (int)TraktListType.UserWatchedList || c.ListType == (int)TraktListType.UserWatchList) + .When(c => c.TraktListType == (int)TraktListType.UserWatchedList || c.TraktListType == (int)TraktListType.UserWatchList) .WithMessage("Username is required when using User Trakt Lists"); // Loose validation @TODO @@ -36,9 +36,9 @@ public TraktSettingsValidator() .WithMessage("Not a valid rating"); // Any valid certification - RuleFor(c => c.Ceritification) + RuleFor(c => c.Certification) .Matches(@"^\bNR\b|\bG\b|\bPG\b|\bPG\-13\b|\bR\b|\bNC\-17\b$", RegexOptions.IgnoreCase) - .When(c => c.Ceritification.IsNotNullOrWhiteSpace()) + .When(c => c.Certification.IsNotNullOrWhiteSpace()) .WithMessage("Not a valid cerification"); // Loose validation @TODO @@ -64,11 +64,11 @@ public TraktSettings() { Link = "https://api.trakt.tv"; SignIn = "startOAuth"; - ListType = (int)TraktListType.Popular; + TraktListType = (int)Trakt.TraktListType.Popular; Username = ""; Listname = ""; Rating = "0-100"; - Ceritification = "NR,G,PG,PG-13,R,NC-17"; + Certification = "NR,G,PG,PG-13,R,NC-17"; Genres = ""; Years = ""; Limit = 100; @@ -92,7 +92,7 @@ public TraktSettings() public string Link { get; set; } [FieldDefinition(1, Label = "List Type", Type = FieldType.Select, SelectOptions = typeof(TraktListType), HelpText = "Trakt list type")] - public int ListType { get; set; } + public int TraktListType { get; set; } [FieldDefinition(2, Label = "Username", HelpText = "Required for User List (Ignores Filtering Options)")] public string Username { get; set; } @@ -103,8 +103,8 @@ public TraktSettings() [FieldDefinition(4, Label = "Rating", HelpText = "Filter movies by rating range (0-100)")] public string Rating { get; set; } - [FieldDefinition(5, Label = "Ceritification", HelpText = "Filter movies by a ceritification (NR,G,PG,PG-13,R,NC-17), (Comma Separated)")] - public string Ceritification { get; set; } + [FieldDefinition(5, Label = "Certification", HelpText = "Filter movies by a certification (NR,G,PG,PG-13,R,NC-17), (Comma Separated)")] + public string Certification { get; set; } [FieldDefinition(6, Label = "Genres", HelpText = "Filter movies by Trakt Genre Slug (Comma Separated)")] public string Genres { get; set; }