private List <Episode> GetAnimeEpisodes(Series series, ParsedEpisodeInfo parsedEpisodeInfo, bool sceneSource) { var result = new List <Episode>(); var sceneSeasonNumber = _sceneMappingService.GetSceneSeasonNumber(parsedEpisodeInfo.SeriesTitle); foreach (var absoluteEpisodeNumber in parsedEpisodeInfo.AbsoluteEpisodeNumbers) { Episode episode = null; if (parsedEpisodeInfo.Special) { episode = _episodeService.FindEpisode(series.Id, 0, absoluteEpisodeNumber); } else if (sceneSource) { // Is there a reason why we excluded season 1 from this handling before? // Might have something to do with the scene name to season number check // If this needs to be reverted tests will need to be added if (sceneSeasonNumber.HasValue) { var episodes = _episodeService.FindEpisodesBySceneNumbering(series.Id, sceneSeasonNumber.Value, absoluteEpisodeNumber); if (episodes.Count == 1) { episode = episodes.First(); } if (episode == null) { episode = _episodeService.FindEpisode(series.Id, sceneSeasonNumber.Value, absoluteEpisodeNumber); } } else { episode = _episodeService.FindEpisodeBySceneNumbering(series.Id, absoluteEpisodeNumber); } } if (episode == null) { episode = _episodeService.FindEpisode(series.Id, absoluteEpisodeNumber); } if (episode != null) { _logger.Debug("Using absolute episode number {0} for: {1} - TVDB: {2}x{3:00}", absoluteEpisodeNumber, series.Title, episode.SeasonNumber, episode.EpisodeNumber); result.Add(episode); } } return(result); }
private List <Episode> GetAnimeEpisodes(Series series, ParsedEpisodeInfo parsedEpisodeInfo, int seasonNumber, bool sceneSource, SearchCriteriaBase searchCriteria) { var result = new List <Episode>(); var sceneSeasonNumber = _sceneMappingService.GetSceneSeasonNumber(parsedEpisodeInfo.SeriesTitle, parsedEpisodeInfo.ReleaseTitle); foreach (var absoluteEpisodeNumber in parsedEpisodeInfo.AbsoluteEpisodeNumbers) { var episodes = new List <Episode>(); if (parsedEpisodeInfo.Special) { var episode = _episodeService.FindEpisode(series.Id, 0, absoluteEpisodeNumber); episodes.AddIfNotNull(episode); } else if (sceneSource) { // Is there a reason why we excluded season 1 from this handling before? // Might have something to do with the scene name to season number check // If this needs to be reverted tests will need to be added if (sceneSeasonNumber.HasValue) { episodes = _episodeService.FindEpisodesBySceneNumbering(series.Id, sceneSeasonNumber.Value, absoluteEpisodeNumber); if (episodes.Empty()) { var episode = _episodeService.FindEpisode(series.Id, sceneSeasonNumber.Value, absoluteEpisodeNumber); episodes.AddIfNotNull(episode); } } else if (parsedEpisodeInfo.SeasonNumber > 1 && parsedEpisodeInfo.EpisodeNumbers.Empty()) { episodes = _episodeService.FindEpisodesBySceneNumbering(series.Id, parsedEpisodeInfo.SeasonNumber, absoluteEpisodeNumber); if (episodes.Empty()) { var episode = _episodeService.FindEpisode(series.Id, parsedEpisodeInfo.SeasonNumber, absoluteEpisodeNumber); episodes.AddIfNotNull(episode); } } else { episodes = _episodeService.FindEpisodesBySceneNumbering(series.Id, absoluteEpisodeNumber); // Don't allow multiple results without a scene name mapping. if (episodes.Count > 1) { episodes.Clear(); } } } if (episodes.Empty()) { var episode = _episodeService.FindEpisode(series.Id, absoluteEpisodeNumber); episodes.AddIfNotNull(episode); } foreach (var episode in episodes) { _logger.Debug("Using absolute episode number {0} for: {1} - TVDB: {2}x{3:00}", absoluteEpisodeNumber, series.Title, episode.SeasonNumber, episode.EpisodeNumber); result.Add(episode); } } return(result); }