This commit is contained in:
Qstick 2022-04-10 19:13:49 -05:00
parent a936ab2504
commit b6f94855eb
6 changed files with 80 additions and 54 deletions

View file

@ -19,33 +19,38 @@ namespace NzbDrone.Core.Test.Datastore.Migration
c.Insert.IntoTable("Movies").Row(new
{
Monitored = true,
MinimumAvailability = 4,
ProfileId = 1,
MovieFileId = 0,
MovieMetadataId = 1,
Path = string.Format("/Movies/{0}", "Title"),
});
c.Insert.IntoTable("MovieMetadata").Row(new
{
Title = "Title",
CleanTitle = "CleanTitle",
Status = 3,
MinimumAvailability = 4,
Images = new[] { new { CoverType = "Poster" } }.ToJson(),
Recommendations = new[] { 1 }.ToJson(),
Runtime = 90,
OriginalTitle = "Title",
CleanOriginalTitle = "CleanTitle",
OriginalLanguage = 1,
ProfileId = 1,
MovieFileId = 0,
Path = string.Format("/Movies/{0}", "Title"),
TitleSlug = 123456,
TmdbId = 132456,
Added = DateTime.UtcNow,
Collection = new { Name = "Some Collection", TmdbId = 11 }.ToJson(),
LastInfoSync = DateTime.UtcNow,
});
});
var collections = db.Query<Collection207>("SELECT Id, Title, TmdbId, Monitored FROM Collections");
var collections = db.Query<Collection208>("SELECT Id, Title, TmdbId, Monitored FROM Collections");
collections.Should().HaveCount(1);
collections.First().TmdbId.Should().Be(11);
collections.First().Title.Should().Be("Some Collection");
collections.First().Monitored.Should().BeFalse();
var movies = db.Query<Movie207>("SELECT Id, CollectionId FROM Movies");
var movies = db.Query<Movie208>("SELECT Id, CollectionId FROM MovieMetadata");
movies.Should().HaveCount(1);
movies.First().CollectionId.Should().Be(collections.First().Id);
@ -59,20 +64,25 @@ namespace NzbDrone.Core.Test.Datastore.Migration
c.Insert.IntoTable("Movies").Row(new
{
Monitored = true,
MinimumAvailability = 4,
ProfileId = 1,
MovieFileId = 0,
MovieMetadataId = 1,
Path = string.Format("/Movies/{0}", "Title"),
});
c.Insert.IntoTable("MovieMetadata").Row(new
{
Title = "Title",
CleanTitle = "CleanTitle",
Status = 3,
MinimumAvailability = 4,
Images = new[] { new { CoverType = "Poster" } }.ToJson(),
Recommendations = new[] { 1 }.ToJson(),
Runtime = 90,
OriginalTitle = "Title",
CleanOriginalTitle = "CleanTitle",
OriginalLanguage = 1,
ProfileId = 1,
MovieFileId = 0,
Path = string.Format("/Movies/{0}", "Title"),
TitleSlug = 123456,
TmdbId = 132456,
Added = DateTime.UtcNow,
Collection = new { Name = "Some Collection", TmdbId = 11 }.ToJson(),
LastInfoSync = DateTime.UtcNow,
});
@ -80,26 +90,31 @@ namespace NzbDrone.Core.Test.Datastore.Migration
c.Insert.IntoTable("Movies").Row(new
{
Monitored = true,
Title = "Title 2",
MinimumAvailability = 4,
ProfileId = 1,
MovieFileId = 0,
MovieMetadataId = 2,
Path = string.Format("/Movies/{0}", "Title"),
});
c.Insert.IntoTable("MovieMetadata").Row(new
{
Title = "Title2",
CleanTitle = "CleanTitle2",
Status = 3,
MinimumAvailability = 4,
Images = new[] { new { CoverType = "Poster" } }.ToJson(),
Recommendations = new[] { 1 }.ToJson(),
Runtime = 90,
OriginalTitle = "Title2",
CleanOriginalTitle = "CleanTitle2",
OriginalLanguage = 1,
ProfileId = 1,
MovieFileId = 0,
Path = string.Format("/Movies/{0}", "Title 2"),
TitleSlug = 123457,
TmdbId = 132457,
Added = DateTime.UtcNow,
Collection = new { Name = "Some Collection", TmdbId = 11 }.ToJson(),
LastInfoSync = DateTime.UtcNow,
});
});
var collections = db.Query<Collection207>("SELECT Id, Title, TmdbId, Monitored FROM Collections");
var collections = db.Query<Collection208>("SELECT Id, Title, TmdbId, Monitored FROM Collections");
collections.Should().HaveCount(1);
collections.First().TmdbId.Should().Be(11);
@ -131,7 +146,7 @@ namespace NzbDrone.Core.Test.Datastore.Migration
});
});
var items = db.Query<ListDefinition207>("SELECT Id, Monitor FROM ImportLists");
var items = db.Query<ListDefinition208>("SELECT Id, Monitor FROM ImportLists");
items.Should().HaveCount(1);
items.First().Monitor.Should().Be(0);
@ -161,7 +176,7 @@ namespace NzbDrone.Core.Test.Datastore.Migration
});
});
var items = db.Query<ListDefinition207>("SELECT Id, Monitor FROM ImportLists");
var items = db.Query<ListDefinition208>("SELECT Id, Monitor FROM ImportLists");
items.Should().HaveCount(1);
items.First().Monitor.Should().Be(2);
@ -182,7 +197,7 @@ namespace NzbDrone.Core.Test.Datastore.Migration
ShouldMonitor = false,
Name = "IMDB List",
Implementation = "TMDbCollectionImport",
Settings = new TmdbCollectionListSettings206
Settings = new TmdbCollectionListSettings207
{
CollectionId = "11"
}.ToJson(),
@ -190,7 +205,7 @@ namespace NzbDrone.Core.Test.Datastore.Migration
});
});
var items = db.Query<ListDefinition207>("SELECT Id, Monitor FROM ImportLists");
var items = db.Query<ListDefinition208>("SELECT Id, Monitor FROM ImportLists");
items.Should().HaveCount(0);
}
@ -203,20 +218,25 @@ namespace NzbDrone.Core.Test.Datastore.Migration
c.Insert.IntoTable("Movies").Row(new
{
Monitored = true,
MinimumAvailability = 4,
ProfileId = 1,
MovieFileId = 0,
MovieMetadataId = 1,
Path = string.Format("/Movies/{0}", "Title"),
});
c.Insert.IntoTable("MovieMetadata").Row(new
{
Title = "Title",
CleanTitle = "CleanTitle",
Status = 3,
MinimumAvailability = 4,
Images = new[] { new { CoverType = "Poster" } }.ToJson(),
Recommendations = new[] { 1 }.ToJson(),
Runtime = 90,
OriginalTitle = "Title",
CleanOriginalTitle = "CleanTitle",
OriginalLanguage = 1,
ProfileId = 1,
MovieFileId = 0,
Path = string.Format("/Movies/{0}", "Title"),
TitleSlug = 123456,
TmdbId = 132456,
Added = DateTime.UtcNow,
Collection = new { Name = "Some Collection", TmdbId = 11 }.ToJson(),
LastInfoSync = DateTime.UtcNow,
});
@ -231,7 +251,7 @@ namespace NzbDrone.Core.Test.Datastore.Migration
ShouldMonitor = false,
Name = "IMDB List",
Implementation = "TMDbCollectionImport",
Settings = new TmdbCollectionListSettings206
Settings = new TmdbCollectionListSettings207
{
CollectionId = "11"
}.ToJson(),
@ -239,14 +259,14 @@ namespace NzbDrone.Core.Test.Datastore.Migration
});
});
var items = db.Query<Collection207>("SELECT Id, Monitored FROM Collections");
var items = db.Query<Collection208>("SELECT Id, Monitored FROM Collections");
items.Should().HaveCount(1);
items.First().Monitored.Should().BeTrue();
}
}
public class Collection207
public class Collection208
{
public int Id { get; set; }
public int TmdbId { get; set; }
@ -254,19 +274,19 @@ namespace NzbDrone.Core.Test.Datastore.Migration
public bool Monitored { get; set; }
}
public class Movie207
public class Movie208
{
public int Id { get; set; }
public int CollectionId { get; set; }
}
public class ListDefinition207
public class ListDefinition208
{
public int Id { get; set; }
public int Monitor { get; set; }
}
public class TmdbCollectionListSettings206
public class TmdbCollectionListSettings207
{
public string CollectionId { get; set; }
}

View file

@ -30,9 +30,9 @@ namespace NzbDrone.Core.Datastore.Migration
.WithColumn("Monitored").AsBoolean().WithDefaultValue(false)
.WithColumn("LastInfoSync").AsDateTime().Nullable()
.WithColumn("Added").AsDateTime().Nullable()
.WithColumn("Movies").AsString().WithDefaultValue("[]");
.WithColumn("MovieTmdbIds").AsString().WithDefaultValue("[]");
Alter.Table("Movies").AddColumn("CollectionId").AsInt32().Nullable();
Alter.Table("MovieMetadata").AddColumn("CollectionId").AsInt32().Nullable();
Alter.Table("ImportLists").AddColumn("Monitor").AsInt32().Nullable();
Execute.WithConnection(MigrateCollections);
@ -44,7 +44,7 @@ namespace NzbDrone.Core.Datastore.Migration
Delete.Column("ShouldMonitor").FromTable("ImportLists");
Delete.FromTable("ImportLists").Row(new { Implementation = "TMDbCollectionImport" });
Delete.Column("Collection").FromTable("Movies");
Delete.Column("Collection").FromTable("MovieMetadata");
}
private void MigrateCollections(IDbConnection conn, IDbTransaction tran)
@ -68,7 +68,7 @@ namespace NzbDrone.Core.Datastore.Migration
using (var cmd = conn.CreateCommand())
{
cmd.Transaction = tran;
cmd.CommandText = "SELECT \"Collection\", \"ProfileId\", \"MinimumAvailability\", \"Path\" FROM \"Movies\" WHERE \"Collection\" IS NOT NULL GROUP BY \"Collection\"";
cmd.CommandText = "SELECT \"Collection\", \"ProfileId\", \"MinimumAvailability\", \"Path\" FROM \"Movies\" JOIN \"MovieMetadata\" ON \"Movies\".\"MovieMetadataId\" = \"MovieMetadata\".\"Id\" WHERE \"Collection\" IS NOT NULL GROUP BY \"Collection\"";
var addedCollections = new List<int>();
var added = DateTime.UtcNow;
@ -212,7 +212,7 @@ namespace NzbDrone.Core.Datastore.Migration
using (var cmd = conn.CreateCommand())
{
cmd.Transaction = tran;
cmd.CommandText = "SELECT \"Id\", \"Collection\" FROM \"Movies\" WHERE \"Collection\" IS NOT NULL";
cmd.CommandText = "SELECT \"Id\", \"Collection\" FROM \"MovieMetadata\" WHERE \"Collection\" IS NOT NULL";
using (var reader = cmd.ExecuteReader())
{
@ -227,7 +227,7 @@ namespace NzbDrone.Core.Datastore.Migration
using (var updateCmd = conn.CreateCommand())
{
updateCmd.Transaction = tran;
updateCmd.CommandText = @"UPDATE ""Movies"" SET ""CollectionId"" = ? WHERE ""Id"" = ?";
updateCmd.CommandText = @"UPDATE ""MovieMetadata"" SET ""CollectionId"" = ? WHERE ""Id"" = ?";
updateCmd.AddParameter(collectionId);
updateCmd.AddParameter(id);

View file

@ -510,7 +510,8 @@ namespace NzbDrone.Core.MetadataSource.SkyHook
CleanTitle = arg.Name.CleanMovieTitle(),
SortTitle = Parser.Parser.NormalizeTitle(arg.Name),
Images = arg.Images?.Select(MapImage).ToList() ?? new List<MediaCover.MediaCover>(),
MovieMetadata = arg.Parts?.Select(x => MapMovie(x)).ToList() ?? new List<MovieMetadata>()
MovieTmdbIds = arg.Parts?.Select(x => x.TmdbId).ToList() ?? new List<int>(),
Movies = arg.Parts?.Select(x => MapMovie(x)).ToList() ?? new List<MovieMetadata>()
};
return collection;

View file

@ -9,7 +9,7 @@ namespace NzbDrone.Core.Movies.Collections
public MovieCollection()
{
Images = new List<MediaCover.MediaCover>();
MovieMetadataIds = new List<int>();
MovieTmdbIds = new List<int>();
}
public string Title { get; set; }
@ -25,8 +25,8 @@ namespace NzbDrone.Core.Movies.Collections
public DateTime? LastInfoSync { get; set; }
public List<MediaCover.MediaCover> Images { get; set; }
public DateTime Added { get; set; }
public List<int> MovieMetadataIds { get; set; }
public List<MovieMetadata> MovieMetadata { get; set; }
public List<int> MovieTmdbIds { get; set; }
public List<MovieMetadata> Movies { get; set; }
public void ApplyChanges(MovieCollection otherCollection)
{

View file

@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using Equ;
using NzbDrone.Core.Datastore;
using NzbDrone.Core.Languages;
using NzbDrone.Core.Movies.AlternativeTitles;
using NzbDrone.Core.Movies.Collections;

View file

@ -17,6 +17,7 @@ namespace NzbDrone.Core.Movies
private readonly IProvideMovieInfo _movieInfo;
private readonly IMovieCollectionService _collectionService;
private readonly IMovieService _movieService;
private readonly IMovieMetadataService _movieMetadataService;
private readonly IAddMovieService _addMovieService;
private readonly Logger _logger;
@ -24,12 +25,14 @@ namespace NzbDrone.Core.Movies
public RefreshCollectionService(IProvideMovieInfo movieInfo,
IMovieCollectionService collectionService,
IMovieService movieService,
IMovieMetadataService movieMetadataService,
IAddMovieService addMovieService,
Logger logger)
{
_movieInfo = movieInfo;
_collectionService = collectionService;
_movieService = movieService;
_movieMetadataService = movieMetadataService;
_addMovieService = addMovieService;
_logger = logger;
}
@ -62,7 +65,10 @@ namespace NzbDrone.Core.Movies
collection.SortTitle = collectionInfo.SortTitle;
collection.LastInfoSync = DateTime.UtcNow;
collection.Images = collectionInfo.Images;
collection.MovieMetadataIds = collectionInfo.MovieMetadataIds;
collection.MovieTmdbIds = collectionInfo.MovieTmdbIds;
collectionInfo.Movies.ForEach(x => x.CollectionId = collection.Id);
_movieMetadataService.UpsertMany(collectionInfo.Movies);
_logger.Debug("Finished collection refresh for {0}", collection.Title);
@ -94,15 +100,13 @@ namespace NzbDrone.Core.Movies
{
var existingMovies = _movieService.AllMovieTmdbIds();
_addMovieService.AddMovies(collection.MovieMetadata.Where(m => !existingMovies.Contains(m.TmdbId)).Select(m => new Movie
_addMovieService.AddMovies(collection.MovieTmdbIds.Where(m => !existingMovies.Contains(m)).Select(m => new Movie
{
TmdbId = m.TmdbId,
Title = m.Title,
TmdbId = m,
ProfileId = collection.QualityProfileId,
RootFolderPath = collection.RootFolderPath,
MinimumAvailability = collection.MinimumAvailability,
Monitored = true,
Year = m.Year
Monitored = true
}).ToList());
}
}