using System; using System.Collections.Generic; using System.Linq.Expressions; using System.Threading.Tasks; using Kyoo.Models; namespace Kyoo.Controllers { public class LibraryManager : ILibraryManager { private readonly ILibraryRepository _libraries; private readonly ICollectionRepository _collections; private readonly IShowRepository _shows; private readonly ISeasonRepository _seasons; private readonly IEpisodeRepository _episodes; private readonly ITrackRepository _tracks; private readonly IGenreRepository _genres; private readonly IStudioRepository _studios; private readonly IPeopleRepository _people; private readonly IProviderRepository _providers; public LibraryManager(ILibraryRepository libraries, ICollectionRepository collections, IShowRepository shows, ISeasonRepository seasons, IEpisodeRepository episodes, ITrackRepository tracks, IGenreRepository genres, IStudioRepository studios, IProviderRepository providers, IPeopleRepository people) { _libraries = libraries; _collections = collections; _shows = shows; _seasons = seasons; _episodes = episodes; _tracks = tracks; _genres = genres; _studios = studios; _providers = providers; _people = people; } public void Dispose() { _libraries.Dispose(); _collections.Dispose(); _shows.Dispose(); _seasons.Dispose(); _episodes.Dispose(); _tracks.Dispose(); _genres.Dispose(); _studios.Dispose(); _people.Dispose(); _providers.Dispose(); } public async ValueTask DisposeAsync() { await Task.WhenAll( _libraries.DisposeAsync().AsTask(), _collections.DisposeAsync().AsTask(), _shows.DisposeAsync().AsTask(), _seasons.DisposeAsync().AsTask(), _episodes.DisposeAsync().AsTask(), _tracks.DisposeAsync().AsTask(), _genres.DisposeAsync().AsTask(), _studios.DisposeAsync().AsTask(), _people.DisposeAsync().AsTask(), _providers.DisposeAsync().AsTask() ); } public Task GetLibrary(string slug) { return _libraries.Get(slug); } public Task GetCollection(string slug) { return _collections.Get(slug); } public Task GetShow(string slug) { return _shows.Get(slug); } public Task GetSeason(string showSlug, int seasonNumber) { return _seasons.Get(showSlug, seasonNumber); } public Task GetEpisode(string showSlug, int seasonNumber, int episodeNumber) { return _episodes.Get(showSlug, seasonNumber, episodeNumber); } public Task GetMovieEpisode(string movieSlug) { return _episodes.Get(movieSlug); } public Task GetTrack(int id) { return _tracks.Get(id); } public Task GetTrack(int episodeID, string language, bool isForced) { return _tracks.Get(episodeID, language, isForced); } public Task GetGenre(string slug) { return _genres.Get(slug); } public Task GetStudio(string slug) { return _studios.Get(slug); } public Task GetPeople(string slug) { return _people.Get(slug); } public Task> GetLibraries(Expression> where = null, Sort sort = default, Pagination page = default) { return _libraries.GetAll(where, sort, page); } public Task> GetCollections(Expression> where = null, Sort sort = default, Pagination page = default) { return _collections.GetAll(where, sort, page); } public Task> GetShows(Expression> where = null, Sort sort = default, Pagination limit = default) { return _shows.GetAll(where, sort, limit); } public Task> GetSeasons(Expression> where = null, Sort sort = default, Pagination page = default) { return _seasons.GetAll(where, sort, page); } public Task> GetEpisodes(Expression> where = null, Sort sort = default, Pagination page = default) { return _episodes.GetAll(where, sort, page); } public Task> GetTracks(Expression> where = null, Sort sort = default, Pagination page = default) { return _tracks.GetAll(where, sort, page); } public Task> GetStudios(Expression> where = null, Sort sort = default, Pagination page = default) { return _studios.GetAll(where, sort, page); } public Task> GetPeople(Expression> where = null, Sort sort = default, Pagination page = default) { return _people.GetAll(where, sort, page); } public Task> GetGenres(Expression> where = null, Sort sort = default, Pagination page = default) { return _genres.GetAll(where, sort, page); } public Task> GetProviders(Expression> where = null, Sort sort = default, Pagination page = default) { return _providers.GetAll(where, sort, page); } public Task> GetSeasons(int showID) { return _seasons.GetSeasons(showID); } public Task> GetSeasons(string showSlug) { return _seasons.GetSeasons(showSlug); } public Task> GetEpisodes(int showID, int seasonNumber) { return _episodes.GetEpisodes(showID, seasonNumber); } public Task> GetEpisodes(string showSlug, int seasonNumber) { return _episodes.GetEpisodes(showSlug, seasonNumber); } public Task> GetEpisodes(int seasonID) { return _episodes.GetEpisodes(seasonID); } public Task AddShowLink(int showID, int? libraryID, int? collectionID) { return _shows.AddShowLink(showID, libraryID, collectionID); } public Task AddShowLink(Show show, Library library, Collection collection) { if (show == null) throw new ArgumentNullException(nameof(show)); return AddShowLink(show.ID, library?.ID, collection?.ID); } public Task> SearchLibraries(string searchQuery) { return _libraries.Search(searchQuery); } public Task> SearchCollections(string searchQuery) { return _collections.Search(searchQuery); } public Task> SearchShows(string searchQuery) { return _shows.Search(searchQuery); } public Task> SearchSeasons(string searchQuery) { return _seasons.Search(searchQuery); } public Task> SearchEpisodes(string searchQuery) { return _episodes.Search(searchQuery); } public Task> SearchGenres(string searchQuery) { return _genres.Search(searchQuery); } public Task> SearchStudios(string searchQuery) { return _studios.Search(searchQuery); } public Task> SearchPeople(string searchQuery) { return _people.Search(searchQuery); } public Task RegisterLibrary(Library library) { return _libraries.Create(library); } public Task RegisterCollection(Collection collection) { return _collections.Create(collection); } public Task RegisterShow(Show show) { return _shows.Create(show); } public Task RegisterSeason(Season season) { return _seasons.Create(season); } public Task RegisterEpisode(Episode episode) { return _episodes.Create(episode); } public Task RegisterTrack(Track track) { return _tracks.Create(track); } public Task RegisterGenre(Genre genre) { return _genres.Create(genre); } public Task RegisterStudio(Studio studio) { return _studios.Create(studio); } public Task RegisterPeople(People people) { return _people.Create(people); } public Task EditLibrary(Library library, bool resetOld) { return _libraries.Edit(library, resetOld); } public Task EditCollection(Collection collection, bool resetOld) { return _collections.Edit(collection, resetOld); } public Task EditShow(Show show, bool resetOld) { return _shows.Edit(show, resetOld); } public Task EditSeason(Season season, bool resetOld) { return _seasons.Edit(season, resetOld); } public Task EditEpisode(Episode episode, bool resetOld) { return _episodes.Edit(episode, resetOld); } public Task EditTrack(Track track, bool resetOld) { return _tracks.Edit(track, resetOld); } public Task EditGenre(Genre genre, bool resetOld) { return _genres.Edit(genre, resetOld); } public Task EditStudio(Studio studio, bool resetOld) { return _studios.Edit(studio, resetOld); } public Task EditPeople(People people, bool resetOld) { return _people.Edit(people, resetOld); } public Task DelteLibrary(Library library) { return _libraries.Delete(library); } public Task DeleteCollection(Collection collection) { return _collections.Delete(collection); } public Task DeleteShow(Show show) { return _shows.Delete(show); } public Task DeleteSeason(Season season) { return _seasons.Delete(season); } public Task DeleteEpisode(Episode episode) { return _episodes.Delete(episode); } public Task DeleteTrack(Track track) { return _tracks.Delete(track); } public Task DeleteGenre(Genre genre) { return _genres.Delete(genre); } public Task DeleteStudio(Studio studio) { return _studios.Delete(studio); } public Task DeletePeople(People people) { return _people.Delete(people); } public Task DelteLibrary(string library) { return _libraries.Delete(library); } public Task DeleteCollection(string collection) { return _collections.Delete(collection); } public Task DeleteShow(string show) { return _shows.Delete(show); } public Task DeleteSeason(string season) { return _seasons.Delete(season); } public Task DeleteEpisode(string episode) { return _episodes.Delete(episode); } public Task DeleteTrack(string track) { return _tracks.Delete(track); } public Task DeleteGenre(string genre) { return _genres.Delete(genre); } public Task DeleteStudio(string studio) { return _studios.Delete(studio); } public Task DeletePeople(string people) { return _people.Delete(people); } public Task DelteLibrary(int library) { return _libraries.Delete(library); } public Task DeleteCollection(int collection) { return _collections.Delete(collection); } public Task DeleteShow(int show) { return _shows.Delete(show); } public Task DeleteSeason(int season) { return _seasons.Delete(season); } public Task DeleteEpisode(int episode) { return _episodes.Delete(episode); } public Task DeleteTrack(int track) { return _tracks.Delete(track); } public Task DeleteGenre(int genre) { return _genres.Delete(genre); } public Task DeleteStudio(int studio) { return _studios.Delete(studio); } public Task DeletePeople(int people) { return _people.Delete(people); } } }