diff --git a/src/NzbDrone.Api/Series/MovieResource.cs b/src/NzbDrone.Api/Series/MovieResource.cs index 4ef7c31bf..ec4a16ed2 100644 --- a/src/NzbDrone.Api/Series/MovieResource.cs +++ b/src/NzbDrone.Api/Series/MovieResource.cs @@ -93,12 +93,13 @@ namespace NzbDrone.Api.Movie if (model == null) return null; - long size = 0; - bool downloaded = false; - MovieFileResource movieFile = null; + long size = model.MovieFile?.Size ?? 0; + bool downloaded = model.MovieFile != null; + MovieFileResource movieFile = model.MovieFile?.ToResource(); + - if(model.MovieFile != null) + /*if(model.MovieFile != null) { model.MovieFile.LazyLoad(); } @@ -108,7 +109,7 @@ namespace NzbDrone.Api.Movie size = model.MovieFile.Value.Size; downloaded = true; movieFile = model.MovieFile.Value.ToResource(); - } + }*/ //model.AlternativeTitles.LazyLoad(); diff --git a/src/NzbDrone.Core/Datastore/TableMapping.cs b/src/NzbDrone.Core/Datastore/TableMapping.cs index 46d381e0e..41628fc8a 100644 --- a/src/NzbDrone.Core/Datastore/TableMapping.cs +++ b/src/NzbDrone.Core/Datastore/TableMapping.cs @@ -143,8 +143,8 @@ namespace NzbDrone.Core.Datastore Mapper.Entity().RegisterModel("Movies") .Ignore(s => s.RootFolderPath) .Relationship() - .HasOne(s => s.Profile, s => s.ProfileId) - .HasOne(m => m.MovieFile, m => m.MovieFileId); + .HasOne(s => s.Profile, s => s.ProfileId); + //.HasOne(m => m.MovieFile, m => m.MovieFileId); Mapper.Entity().RegisterModel("AlternativeTitles") .For(t => t.Id) diff --git a/src/NzbDrone.Core/DecisionEngine/Specifications/CutoffSpecification.cs b/src/NzbDrone.Core/DecisionEngine/Specifications/CutoffSpecification.cs index 73e5b133b..6eb191c68 100644 --- a/src/NzbDrone.Core/DecisionEngine/Specifications/CutoffSpecification.cs +++ b/src/NzbDrone.Core/DecisionEngine/Specifications/CutoffSpecification.cs @@ -38,9 +38,9 @@ namespace NzbDrone.Core.DecisionEngine.Specifications public virtual Decision IsSatisfiedBy(RemoteMovie subject, SearchCriteriaBase searchCriteria) { - if (subject.Movie.MovieFile.Value != null) + if (subject.Movie.MovieFile != null) { - if (!_qualityUpgradableSpecification.CutoffNotMet(subject.Movie.Profile, subject.Movie.MovieFile.Value.Quality, subject.ParsedMovieInfo.Quality)) + if (!_qualityUpgradableSpecification.CutoffNotMet(subject.Movie.Profile, subject.Movie.MovieFile.Quality, subject.ParsedMovieInfo.Quality)) { return Decision.Reject("Existing file meets cutoff: {0}", subject.Movie.Profile.Value.Cutoff); } diff --git a/src/NzbDrone.Core/DecisionEngine/Specifications/RssSync/DelaySpecification.cs b/src/NzbDrone.Core/DecisionEngine/Specifications/RssSync/DelaySpecification.cs index d3df11833..ded6c022b 100644 --- a/src/NzbDrone.Core/DecisionEngine/Specifications/RssSync/DelaySpecification.cs +++ b/src/NzbDrone.Core/DecisionEngine/Specifications/RssSync/DelaySpecification.cs @@ -39,20 +39,20 @@ namespace NzbDrone.Core.DecisionEngine.Specifications.RssSync var profile = subject.Movie.Profile.Value; var delayProfile = _delayProfileService.BestForTags(subject.Movie.Tags); var delay = delayProfile.GetProtocolDelay(subject.Release.DownloadProtocol); - var isPreferredProtocol = subject.Release.DownloadProtocol == delayProfile.PreferredProtocol; - - // Preferred word count - var title = subject.Release.Title; - var preferredWords = subject.Movie.Profile.Value.PreferredTags; - var preferredCount = 0; - - if (preferredWords == null) - { - preferredCount = 1; + var isPreferredProtocol = subject.Release.DownloadProtocol == delayProfile.PreferredProtocol; + + // Preferred word count + var title = subject.Release.Title; + var preferredWords = subject.Movie.Profile.Value.PreferredTags; + var preferredCount = 0; + + if (preferredWords == null) + { + preferredCount = 1; _logger.Debug("Preferred words is null, setting preffered count to 1."); - } - else - { + } + else + { preferredCount = preferredWords.AsEnumerable().Count(w => title.ToLower().Contains(w.ToLower())); } @@ -66,11 +66,11 @@ namespace NzbDrone.Core.DecisionEngine.Specifications.RssSync if (isPreferredProtocol && (subject.Movie.MovieFileId != 0 && subject.Movie.MovieFile != null) && (preferredCount > 0 || preferredWords == null)) { - var upgradable = _qualityUpgradableSpecification.IsUpgradable(profile, subject.Movie.MovieFile.Value.Quality, subject.ParsedMovieInfo.Quality); + var upgradable = _qualityUpgradableSpecification.IsUpgradable(profile, subject.Movie.MovieFile.Quality, subject.ParsedMovieInfo.Quality); if (upgradable) { - var revisionUpgrade = _qualityUpgradableSpecification.IsRevisionUpgrade(subject.Movie.MovieFile.Value.Quality, subject.ParsedMovieInfo.Quality); + var revisionUpgrade = _qualityUpgradableSpecification.IsRevisionUpgrade(subject.Movie.MovieFile.Quality, subject.ParsedMovieInfo.Quality); if (revisionUpgrade) { @@ -83,7 +83,7 @@ namespace NzbDrone.Core.DecisionEngine.Specifications.RssSync // If quality meets or exceeds the best allowed quality in the profile accept it immediately var bestQualityInProfile = new QualityModel(profile.LastAllowedQuality()); - var isBestInProfile = comparer.Compare(subject.ParsedMovieInfo.Quality, bestQualityInProfile) >= 0; + var isBestInProfile = comparer.Compare(subject.ParsedMovieInfo.Quality, bestQualityInProfile) >= 0; if (isBestInProfile && isPreferredProtocol && (preferredCount > 0 || preferredWords == null)) { diff --git a/src/NzbDrone.Core/DecisionEngine/Specifications/RssSync/ProperSpecification.cs b/src/NzbDrone.Core/DecisionEngine/Specifications/RssSync/ProperSpecification.cs index d029e929c..15f7f6ae7 100644 --- a/src/NzbDrone.Core/DecisionEngine/Specifications/RssSync/ProperSpecification.cs +++ b/src/NzbDrone.Core/DecisionEngine/Specifications/RssSync/ProperSpecification.cs @@ -57,12 +57,12 @@ namespace NzbDrone.Core.DecisionEngine.Specifications.RssSync return Decision.Accept(); } - if (subject.Movie.MovieFile.Value == null) + if (subject.Movie.MovieFile == null) { return Decision.Accept(); } - var file = subject.Movie.MovieFile.Value; + var file = subject.Movie.MovieFile; if (_qualityUpgradableSpecification.IsRevisionUpgrade(file.Quality, subject.ParsedMovieInfo.Quality)) { diff --git a/src/NzbDrone.Core/DecisionEngine/Specifications/UpgradeDiskSpecification.cs b/src/NzbDrone.Core/DecisionEngine/Specifications/UpgradeDiskSpecification.cs index e30d0fc92..2c5b028d3 100644 --- a/src/NzbDrone.Core/DecisionEngine/Specifications/UpgradeDiskSpecification.cs +++ b/src/NzbDrone.Core/DecisionEngine/Specifications/UpgradeDiskSpecification.cs @@ -35,12 +35,12 @@ namespace NzbDrone.Core.DecisionEngine.Specifications public virtual Decision IsSatisfiedBy(RemoteMovie subject, SearchCriteriaBase searchCriteria) { - if (subject.Movie.MovieFile.Value == null) + if (subject.Movie.MovieFile == null) { return Decision.Accept(); } - var file = subject.Movie.MovieFile.Value; + var file = subject.Movie.MovieFile; _logger.Debug("Comparing file quality with report. Existing file is {0}", file.Quality); if (!_qualityUpgradableSpecification.IsUpgradable(subject.Movie.Profile, file.Quality, subject.ParsedMovieInfo.Quality)) diff --git a/src/NzbDrone.Core/MediaFiles/UpgradeMediaFileService.cs b/src/NzbDrone.Core/MediaFiles/UpgradeMediaFileService.cs index b0bcffb26..4944b1f5f 100644 --- a/src/NzbDrone.Core/MediaFiles/UpgradeMediaFileService.cs +++ b/src/NzbDrone.Core/MediaFiles/UpgradeMediaFileService.cs @@ -44,7 +44,7 @@ namespace NzbDrone.Core.MediaFiles _logger.Trace("Upgrading existing movie file."); var moveFileResult = new MovieFileMoveResult(); - var existingFile = localMovie.Movie.MovieFile.Value; + var existingFile = localMovie.Movie.MovieFile; if (existingFile != null) { diff --git a/src/NzbDrone.Core/Organizer/FileNameBuilder.cs b/src/NzbDrone.Core/Organizer/FileNameBuilder.cs index dfc1e17f6..e3629db41 100644 --- a/src/NzbDrone.Core/Organizer/FileNameBuilder.cs +++ b/src/NzbDrone.Core/Organizer/FileNameBuilder.cs @@ -224,9 +224,9 @@ namespace NzbDrone.Core.Organizer AddReleaseDateTokens(tokenHandlers, movie.Year); AddImdbIdTokens(tokenHandlers, movie.ImdbId); - if(movie.MovieFileId != 0) + if(movie.MovieFile != null) { - movieFile.LazyLoad(); + AddQualityTokens(tokenHandlers, movie, movieFile); AddMediaInfoTokens(tokenHandlers, movieFile); AddMovieFileTokens(tokenHandlers, movieFile); @@ -361,18 +361,17 @@ namespace NzbDrone.Core.Organizer AddReleaseDateTokens(tokenHandlers, movie.Year); AddImdbIdTokens(tokenHandlers, movie.ImdbId); - if (movie.MovieFileId != 0) + if (movie.MovieFile != null) { - movieFile.LazyLoad(); AddQualityTokens(tokenHandlers, movie, movieFile); AddMediaInfoTokens(tokenHandlers, movieFile); AddMovieFileTokens(tokenHandlers, movieFile); AddTagsTokens(tokenHandlers, movieFile); } - else + else { AddMovieFileTokens(tokenHandlers, new MovieFile { SceneName = $"{movie.Title} {movie.Year}", RelativePath = $"{movie.Title} {movie.Year}"}); - } + } return CleanFolderName(ReplaceTokens(namingConfig.MovieFolderFormat, tokenHandlers, namingConfig)); } diff --git a/src/NzbDrone.Core/Tv/Movie.cs b/src/NzbDrone.Core/Tv/Movie.cs index ae876d40c..25ed94fc6 100644 --- a/src/NzbDrone.Core/Tv/Movie.cs +++ b/src/NzbDrone.Core/Tv/Movie.cs @@ -51,7 +51,7 @@ namespace NzbDrone.Core.Tv public LazyLoaded Profile { get; set; } public HashSet Tags { get; set; } public AddMovieOptions AddOptions { get; set; } - public LazyLoaded MovieFile { get; set; } + public MovieFile MovieFile { get; set; } public bool HasPreDBEntry { get; set; } public int MovieFileId { get; set; } //Get Loaded via a Join Query diff --git a/src/NzbDrone.Core/Tv/MovieRepository.cs b/src/NzbDrone.Core/Tv/MovieRepository.cs index b7bbd7775..906ae98d9 100644 --- a/src/NzbDrone.Core/Tv/MovieRepository.cs +++ b/src/NzbDrone.Core/Tv/MovieRepository.cs @@ -297,6 +297,7 @@ namespace NzbDrone.Core.Tv baseQuery = base.AddJoinQueries(baseQuery); baseQuery = baseQuery.Join(JoinType.Left, m => m.AlternativeTitles, (m, t) => m.Id == t.MovieId); + baseQuery = baseQuery.Join(JoinType.Left, m => m.MovieFile, (m, f) => m.Id == f.MovieId); return baseQuery; }