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)