From 82470bd99545357bb7757f7857f0f7cf4a75b0b8 Mon Sep 17 00:00:00 2001 From: Leonardo Galli Date: Thu, 5 Jan 2017 12:39:48 +0100 Subject: [PATCH] Fixed an issue where tracked downloads would not be found in the database due to alternative titles. --- .../TrackedDownloadService.cs | 6 +- src/NzbDrone.Core/Queue/QueueService.cs | 2 +- src/NzbDrone.Core/Tv/MovieRepository.cs | 57 ++++++++++++++++++- 3 files changed, 61 insertions(+), 4 deletions(-) diff --git a/src/NzbDrone.Core/Download/TrackedDownloads/TrackedDownloadService.cs b/src/NzbDrone.Core/Download/TrackedDownloads/TrackedDownloadService.cs index 97d5ac608..01f87f07a 100644 --- a/src/NzbDrone.Core/Download/TrackedDownloads/TrackedDownloadService.cs +++ b/src/NzbDrone.Core/Download/TrackedDownloads/TrackedDownloadService.cs @@ -60,10 +60,14 @@ namespace NzbDrone.Core.Download.TrackedDownloads var parsedMovieInfo = Parser.Parser.ParseMovieTitle(trackedDownload.DownloadItem.Title); var historyItems = _historyService.FindByDownloadId(downloadItem.DownloadId); + if (parsedMovieInfo != null) + { + trackedDownload.RemoteMovie = _parsingService.Map(parsedMovieInfo, "", null); + } + if (parsedEpisodeInfo != null) { trackedDownload.RemoteEpisode = _parsingService.Map(parsedEpisodeInfo, 0, 0); - trackedDownload.RemoteMovie = _parsingService.Map(parsedMovieInfo, "", null); } if (historyItems.Any()) diff --git a/src/NzbDrone.Core/Queue/QueueService.cs b/src/NzbDrone.Core/Queue/QueueService.cs index d867b4ddb..f03d86ccc 100644 --- a/src/NzbDrone.Core/Queue/QueueService.cs +++ b/src/NzbDrone.Core/Queue/QueueService.cs @@ -64,7 +64,7 @@ namespace NzbDrone.Core.Queue Id = HashConverter.GetHashInt31(string.Format("trackedDownload-{0}", trackedDownload.DownloadItem.DownloadId)), Series = null, Episode = null, - Quality = trackedDownload.RemoteMovie.ParsedEpisodeInfo.Quality, + Quality = trackedDownload.RemoteMovie.ParsedMovieInfo.Quality, Title = trackedDownload.DownloadItem.Title, Size = trackedDownload.DownloadItem.TotalSize, Sizeleft = trackedDownload.DownloadItem.RemainingSize, diff --git a/src/NzbDrone.Core/Tv/MovieRepository.cs b/src/NzbDrone.Core/Tv/MovieRepository.cs index f6c4b0ceb..57c38e7a3 100644 --- a/src/NzbDrone.Core/Tv/MovieRepository.cs +++ b/src/NzbDrone.Core/Tv/MovieRepository.cs @@ -19,6 +19,21 @@ namespace NzbDrone.Core.Tv public class MovieRepository : BasicRepository, IMovieRepository { + private readonly Dictionary romanNumeralsMapper = new Dictionary + { + { "1", "I"}, + { "2", "II"}, + { "3", "III"}, + { "4", "IV"}, + { "5", "V"}, + { "6", "VI"}, + { "7", "VII"}, + { "8", "VII"}, + { "9", "IX"}, + { "10", "X"}, + + }; //If a movie has more than 10 parts fuck 'em. + public MovieRepository(IMainDatabase database, IEventAggregator eventAggregator) : base(database, eventAggregator) { @@ -33,8 +48,46 @@ namespace NzbDrone.Core.Tv { cleanTitle = cleanTitle.ToLowerInvariant(); - return Query.Where(s => s.CleanTitle == cleanTitle) - .SingleOrDefault(); + var cleanRoman = cleanTitle; + + var cleanNum = cleanTitle; + + foreach (KeyValuePair entry in romanNumeralsMapper) + { + string num = entry.Key; + string roman = entry.Value.ToLower(); + + cleanRoman = cleanRoman.Replace(num, roman); + + cleanNum = cleanNum.Replace(roman, num); + } + + var result = Query.Where(s => s.CleanTitle == cleanTitle).SingleOrDefault(); + + if (result == null) + { + result = Query.Where(s => s.CleanTitle == cleanNum).OrWhere(s => s.CleanTitle == cleanRoman).SingleOrDefault(); + + if (result == null) + { + var movies = this.All(); + + result = movies.Where(m => m.AlternativeTitles.Any(t => Parser.Parser.CleanSeriesTitle(t.ToLower()) == cleanTitle || + Parser.Parser.CleanSeriesTitle(t.ToLower()) == cleanRoman || + Parser.Parser.CleanSeriesTitle(t.ToLower()) == cleanNum)).SingleOrDefault(); + + return result; + } + else + { + return result; + } + + } + else + { + return result; + } } public Movie FindByTitle(string cleanTitle, int year)