using System; using System.Collections.Generic; using System.Linq; using NzbDrone.Core.Datastore; namespace NzbDrone.Core.Tv { public interface IEpisodeRepository : IBasicRepository { Episode Get(int seriesId, int season, int episodeNumber); Episode Get(int seriesId, DateTime date); IList GetEpisodes(int seriesId); IList GetEpisodes(int seriesId, int seasonNumber); IList GetEpisodeByFileId(int fileId); IList EpisodesWithoutFiles(bool includeSpecials); Episode GetEpisodeBySceneNumbering(int seriesId, int seasonNumber, int episodeNumber); IList EpisodesWithFiles(); } public class EpisodeRepository : BasicRepository, IEpisodeRepository { public EpisodeRepository(IObjectDatabase objectDatabase) : base(objectDatabase) { } public Episode Get(int seriesId, int season, int episodeNumber) { return Queryable.Single(s => s.SeriesId == seriesId && s.SeasonNumber == season && s.EpisodeNumber == episodeNumber); } public Episode Get(int seriesId, DateTime date) { return Queryable.Single(s => s.SeriesId == seriesId && s.AirDate.HasValue && s.AirDate.Value.Date == date.Date); } public IList GetEpisodes(int seriesId) { return Queryable.Where(s => s.SeriesId == seriesId).ToList(); } public IList GetEpisodes(int seriesId, int seasonNumber) { return Queryable.Where(s => s.SeriesId == seriesId && s.SeasonNumber == seasonNumber).ToList(); } public IList GetEpisodeByFileId(int fileId) { return Queryable.Where(s => s.EpisodeFile != null && s.EpisodeFile.EpisodeFileId == fileId).ToList(); } public IList EpisodesWithoutFiles(bool includeSpecials) { var noFiles = Queryable.Where(s => s.EpisodeFile == null); if (!includeSpecials) { noFiles = noFiles.Where(c => c.SeasonNumber != 0); } return noFiles.ToList(); } public Episode GetEpisodeBySceneNumbering(int seriesId, int seasonNumber, int episodeNumber) { return Queryable.Single(s => s.SeriesId == seriesId && s.SeasonNumber == seasonNumber && s.SceneEpisodeNumber == episodeNumber); } public IList EpisodesWithFiles() { return Queryable.Where(s => s.EpisodeFile != null).ToList(); } } }