From 4d2a311e40d84ba6bf55130bfb6552a797912616 Mon Sep 17 00:00:00 2001 From: Qstick Date: Mon, 20 Dec 2021 21:25:07 -0600 Subject: [PATCH] Remove PreDB from MovieStatusType Fixes #5002 --- .../Form/AvailabilitySelectInput.js | 3 +- .../Migration/202_remove_predbFixture.cs | 91 +++++++++++++++++++ .../Migration/133_add_minimumavailability.cs | 6 +- .../Datastore/Migration/202_remove_predb.cs | 23 +++++ src/NzbDrone.Core/Movies/Movie.cs | 6 -- src/NzbDrone.Core/Movies/MovieStatusType.cs | 1 - .../Movies/RefreshMovieService.cs | 1 - 7 files changed, 118 insertions(+), 13 deletions(-) create mode 100644 src/NzbDrone.Core.Test/Datastore/Migration/202_remove_predbFixture.cs create mode 100644 src/NzbDrone.Core/Datastore/Migration/202_remove_predb.cs diff --git a/frontend/src/Components/Form/AvailabilitySelectInput.js b/frontend/src/Components/Form/AvailabilitySelectInput.js index d51cf76d5..66c3034a5 100644 --- a/frontend/src/Components/Form/AvailabilitySelectInput.js +++ b/frontend/src/Components/Form/AvailabilitySelectInput.js @@ -6,8 +6,7 @@ import SelectInput from './SelectInput'; const availabilityOptions = [ { key: 'announced', value: translate('Announced') }, { key: 'inCinemas', value: translate('InCinemas') }, - { key: 'released', value: translate('Released') }, - { key: 'preDB', value: translate('PreDB') } + { key: 'released', value: translate('Released') } ]; function AvailabilitySelectInput(props) { diff --git a/src/NzbDrone.Core.Test/Datastore/Migration/202_remove_predbFixture.cs b/src/NzbDrone.Core.Test/Datastore/Migration/202_remove_predbFixture.cs new file mode 100644 index 000000000..f6b1618db --- /dev/null +++ b/src/NzbDrone.Core.Test/Datastore/Migration/202_remove_predbFixture.cs @@ -0,0 +1,91 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using FluentAssertions; +using Newtonsoft.Json.Linq; +using NUnit.Framework; +using NzbDrone.Common.Serializer; +using NzbDrone.Core.Datastore.Migration; +using NzbDrone.Core.Test.Framework; + +namespace NzbDrone.Core.Test.Datastore.Migration +{ + [TestFixture] + public class remove_predbFixture : MigrationTest + { + [Test] + public void should_change_min_avail_from_predb_on_list() + { + var db = WithMigrationTestDb(c => + { + c.Insert.IntoTable("ImportLists").Row(new + { + Enabled = 1, + EnableAuto = 1, + RootFolderPath = "D:\\Movies", + ProfileId = 1, + MinimumAvailability = 4, + ShouldMonitor = 1, + Name = "IMDB List", + Implementation = "RadarrLists", + Settings = new RadarrListSettings169 + { + APIURL = "https://api.radarr.video/v2", + Path = "/imdb/list?listId=ls000199717", + }.ToJson(), + ConfigContract = "RadarrSettings" + }); + }); + + var items = db.Query("SELECT Id, MinimumAvailability FROM ImportLists"); + + items.Should().HaveCount(1); + items.First().MinimumAvailability.Should().Be(3); + } + + [Test] + public void should_change_min_avail_from_predb_on_movie() + { + var db = WithMigrationTestDb(c => + { + c.Insert.IntoTable("Movies").Row(new + { + Monitored = true, + Title = "Title", + CleanTitle = "CleanTitle", + Status = 3, + MinimumAvailability = 4, + Images = new[] { new { CoverType = "Poster" } }.ToJson(), + Recommendations = new[] { 1 }.ToJson(), + HasPreDBEntry = false, + Runtime = 90, + OriginalLanguage = 1, + ProfileId = 1, + MovieFileId = 0, + Path = string.Format("/Movies/{0}", "Title"), + TitleSlug = 123456, + TmdbId = 132456, + Added = DateTime.UtcNow, + LastInfoSync = DateTime.UtcNow, + }); + }); + + var items = db.Query("SELECT Id, MinimumAvailability FROM Movies"); + + items.Should().HaveCount(1); + items.First().MinimumAvailability.Should().Be(3); + } + } + + public class ListDefinition201 + { + public int Id { get; set; } + public int MinimumAvailability { get; set; } + } + + public class Movie201 + { + public int Id { get; set; } + public int MinimumAvailability { get; set; } + } +} diff --git a/src/NzbDrone.Core/Datastore/Migration/133_add_minimumavailability.cs b/src/NzbDrone.Core/Datastore/Migration/133_add_minimumavailability.cs index b162040f8..89c317472 100644 --- a/src/NzbDrone.Core/Datastore/Migration/133_add_minimumavailability.cs +++ b/src/NzbDrone.Core/Datastore/Migration/133_add_minimumavailability.cs @@ -1,4 +1,4 @@ -using FluentMigrator; +using FluentMigrator; //using FluentMigrator.Expressions; using NzbDrone.Core.Datastore.Migration.Framework; @@ -13,12 +13,12 @@ protected override void MainDbUpgrade() { if (!Schema.Schema("dbo").Table("NetImport").Column("MinimumAvailability").Exists()) { - Alter.Table("NetImport").AddColumn("MinimumAvailability").AsInt32().WithDefaultValue(MovieStatusType.PreDB); + Alter.Table("NetImport").AddColumn("MinimumAvailability").AsInt32().WithDefaultValue(MovieStatusType.Released); } if (!Schema.Schema("dbo").Table("Movies").Column("MinimumAvailability").Exists()) { - Alter.Table("Movies").AddColumn("MinimumAvailability").AsInt32().WithDefaultValue(MovieStatusType.PreDB); + Alter.Table("Movies").AddColumn("MinimumAvailability").AsInt32().WithDefaultValue(MovieStatusType.Released); } } } diff --git a/src/NzbDrone.Core/Datastore/Migration/202_remove_predb.cs b/src/NzbDrone.Core/Datastore/Migration/202_remove_predb.cs new file mode 100644 index 000000000..ba3ae3788 --- /dev/null +++ b/src/NzbDrone.Core/Datastore/Migration/202_remove_predb.cs @@ -0,0 +1,23 @@ +using FluentMigrator; +using NzbDrone.Core.Datastore.Migration.Framework; + +namespace NzbDrone.Core.Datastore.Migration +{ + [Migration(202)] + public class remove_predb : NzbDroneMigrationBase + { + protected override void MainDbUpgrade() + { + //Set PreDb entries to Released + Update.Table("Movies").Set(new { MinimumAvailability = 3 }).Where(new { MinimumAvailability = 4 }); + Update.Table("ImportLists").Set(new { MinimumAvailability = 3 }).Where(new { MinimumAvailability = 4 }); + + //Should never be set, but just in case + Update.Table("Movies").Set(new { Status = 3 }).Where(new { Status = 4 }); + Update.Table("ImportListMovies").Set(new { Status = 3 }).Where(new { Status = 4 }); + + //Remove unused column + Delete.Column("HasPreDBEntry").FromTable("Movies"); + } + } +} diff --git a/src/NzbDrone.Core/Movies/Movie.cs b/src/NzbDrone.Core/Movies/Movie.cs index c87541d39..6af4387bf 100644 --- a/src/NzbDrone.Core/Movies/Movie.cs +++ b/src/NzbDrone.Core/Movies/Movie.cs @@ -56,7 +56,6 @@ public Movie() public HashSet Tags { get; set; } public AddMovieOptions AddOptions { get; set; } public MovieFile MovieFile { get; set; } - public bool HasPreDBEntry { get; set; } public int MovieFileId { get; set; } //Get Loaded via a Join Query @@ -137,11 +136,6 @@ public bool IsAvailable(int delay = 0) } } - if (HasPreDBEntry && MinimumAvailability == MovieStatusType.PreDB) - { - return true; - } - if (minimumAvailabilityDate == DateTime.MinValue || minimumAvailabilityDate == DateTime.MaxValue) { return DateTime.Now >= minimumAvailabilityDate; diff --git a/src/NzbDrone.Core/Movies/MovieStatusType.cs b/src/NzbDrone.Core/Movies/MovieStatusType.cs index a4c7ec9bf..68edad145 100644 --- a/src/NzbDrone.Core/Movies/MovieStatusType.cs +++ b/src/NzbDrone.Core/Movies/MovieStatusType.cs @@ -7,6 +7,5 @@ public enum MovieStatusType Announced = 1, //Movie is announced but Cinema date is in the future or unknown InCinemas = 2, //Been in Cinemas for less than 3 months (since TMDB lacks complete information) Released = 3, //Physical or Web Release or been in cinemas for > 3 months (since TMDB lacks complete information) - PreDB = 4 //this is only used for MinimumAvailability. Movie items should never be in this state. } } diff --git a/src/NzbDrone.Core/Movies/RefreshMovieService.cs b/src/NzbDrone.Core/Movies/RefreshMovieService.cs index 2153ca587..bd00c2bd1 100644 --- a/src/NzbDrone.Core/Movies/RefreshMovieService.cs +++ b/src/NzbDrone.Core/Movies/RefreshMovieService.cs @@ -117,7 +117,6 @@ private Movie RefreshMovieInfo(int movieId) movie.Studio = movieInfo.Studio; movie.OriginalTitle = movieInfo.OriginalTitle; movie.OriginalLanguage = movieInfo.OriginalLanguage; - movie.HasPreDBEntry = movieInfo.HasPreDBEntry; movie.Recommendations = movieInfo.Recommendations; try