using System.Collections.Generic; using System.Linq; using NLog; using NzbDrone.Core.IndexerSearch; using NzbDrone.Core.Tv; using NzbDrone.Core.Model.Notification; namespace NzbDrone.Core.Providers { public class SearchProvider { private readonly IEpisodeService _episodeService; private readonly PartialSeasonSearch _partialSeasonSearch; private readonly ISeriesRepository _seriesRepository; private static readonly Logger logger = LogManager.GetCurrentClassLogger(); public SearchProvider(IEpisodeService episodeService, PartialSeasonSearch partialSeasonSearch, ISeriesRepository seriesRepository) { _episodeService = episodeService; _partialSeasonSearch = partialSeasonSearch; _seriesRepository = seriesRepository; } public SearchProvider() { } public virtual List SeasonSearch(ProgressNotification notification, int seriesId, int seasonNumber) { var series = _seriesRepository.Get(seriesId); if (series == null) { logger.Error("Unable to find an series {0} in database", seriesId); return new List(); } if (series.SeriesType == SeriesTypes.Daily) { logger.Trace("Daily series detected, skipping season search: {0}", series.Title); return new List(); } logger.Debug("Getting episodes from database for series: {0} and season: {1}", seriesId, seasonNumber); var episodes = _episodeService.GetEpisodesBySeason(seriesId, seasonNumber); if (episodes == null || episodes.Count == 0) { logger.Warn("No episodes in database found for series: {0} and season: {1}.", seriesId, seasonNumber); return new List(); } //Todo: Support full season searching return new List(); } public virtual List PartialSeasonSearch(ProgressNotification notification, int seriesId, int seasonNumber) { var series = _seriesRepository.Get(seriesId); if (series == null) { logger.Error("Unable to find an series {0} in database", seriesId); return new List(); } if (series.SeriesType == SeriesTypes.Daily) { logger.Trace("Daily series detected, skipping season search: {0}", series.Title); return new List(); } var episodes = _episodeService.GetEpisodesBySeason(seriesId, seasonNumber); if (episodes == null || episodes.Count == 0) { logger.Warn("No episodes in database found for series: {0} Season: {1}.", seriesId, seasonNumber); return new List(); } return _partialSeasonSearch.Search(series, new { SeasonNumber = seasonNumber, Episodes = episodes }, notification); } } }