using System.Collections.Generic; using System.Threading.Tasks; using ErsatzTV.Core.Domain; using ErsatzTV.Core.Metadata; using LanguageExt; namespace ErsatzTV.Core.Interfaces.Repositories { public interface ITelevisionRepository { Task AllShowsExist(List showIds); Task AllSeasonsExist(List seasonIds); Task AllEpisodesExist(List episodeIds); Task> GetAllShows(); Task> GetShow(int showId); Task> GetShowsForCards(List ids); Task> GetSeasonsForCards(List ids); Task> GetEpisodesForCards(List ids); Task> GetShowItems(int showId); Task> GetAllSeasons(); Task> GetSeason(int seasonId); Task GetSeasonCount(int showId); Task> GetPagedSeasons(int televisionShowId, int pageNumber, int pageSize); Task> GetSeasonItems(int seasonId); Task GetEpisodeCount(int seasonId); Task> GetPagedEpisodes(int seasonId, int pageNumber, int pageSize); Task> GetShowByMetadata(int libraryPathId, ShowMetadata metadata); Task>> AddShow( int libraryPathId, string showFolder, ShowMetadata metadata); Task> GetOrAddSeason(Show show, int libraryPathId, int seasonNumber); Task> GetOrAddEpisode(Season season, LibraryPath libraryPath, string path); Task> FindEpisodePaths(LibraryPath libraryPath); Task DeleteByPath(LibraryPath libraryPath, string path); Task DeleteEmptySeasons(LibraryPath libraryPath); Task> DeleteEmptyShows(LibraryPath libraryPath); Task>> GetOrAddPlexShow(PlexLibrary library, PlexShow item); Task> GetOrAddPlexSeason(PlexLibrary library, PlexSeason item); Task> GetOrAddPlexEpisode(PlexLibrary library, PlexEpisode item); Task AddGenre(ShowMetadata metadata, Genre genre); Task AddTag(ShowMetadata metadata, Tag tag); Task AddStudio(ShowMetadata metadata, Studio studio); Task AddActor(ShowMetadata metadata, Actor actor); Task AddActor(EpisodeMetadata metadata, Actor actor); Task> RemoveMissingPlexShows(PlexLibrary library, List showKeys); Task RemoveMissingPlexSeasons(string showKey, List seasonKeys); Task> RemoveMissingPlexEpisodes(string seasonKey, List episodeKeys); Task RemoveMetadata(Episode episode, EpisodeMetadata metadata); Task AddDirector(EpisodeMetadata metadata, Director director); Task AddWriter(EpisodeMetadata metadata, Writer writer); Task UpdatePath(int mediaFileId, string path); } }