using System; using System.Collections.Generic; using System.Linq; using System.Text; using NLog; using NzbDrone.Core.Model.TvRage; using NzbDrone.Core.Repository; namespace NzbDrone.Core.Providers { public class TvRageMappingProvider { private readonly SceneMappingProvider _sceneMappingProvider; private readonly TvRageProvider _tvRageProvider; private readonly EpisodeProvider _episodeProvider; private static readonly Logger logger = LogManager.GetCurrentClassLogger(); public TvRageMappingProvider(SceneMappingProvider sceneMappingProvider, TvRageProvider tvRageProvider, EpisodeProvider episodeProvider) { _sceneMappingProvider = sceneMappingProvider; _tvRageProvider = tvRageProvider; _episodeProvider = episodeProvider; } public TvRageMappingProvider() { } public Series FindMatchingTvRageSeries(Series series) { var firstEpisode = _episodeProvider.GetEpisode(series.SeriesId, 1, 1); var cleanName = _sceneMappingProvider.GetCleanName(series.SeriesId); var results = _tvRageProvider.SearchSeries(series.Title); var result = ProcessResults(results, series, cleanName, firstEpisode); if (result != null) { logger.Trace("TV Rage: {0} matches TVDB: {1}", result.Name, series.Title); series.TvRageId = result.ShowId; series.TvRageTitle = result.Name; series.UtcOffset = _tvRageProvider.GetSeries(result.ShowId).UtcOffset; } return series; } public TvRageSearchResult ProcessResults(IList searchResults, Series series, string sceneCleanName, Episode firstEpisode) { foreach (var result in searchResults) { if (Parser.NormalizeTitle(result.Name).Equals(series.CleanTitle)) return result; if (!String.IsNullOrWhiteSpace(sceneCleanName) && Parser.NormalizeTitle(result.Name).Equals(sceneCleanName)) return result; if (series.FirstAired.HasValue && result.Started == series.FirstAired.Value) return result; if (firstEpisode != null && firstEpisode.AirDate.HasValue && result.Started == firstEpisode.AirDate.Value) return result; } return null; } } }