using System; using System.Collections.Generic; using System.Linq.Expressions; using System.Threading.Tasks; using Kyoo.Models; namespace Kyoo.Controllers { public class LibraryManager : ILibraryManager { public ILibraryRepository LibraryRepository { get; } public ILibraryItemRepository LibraryItemRepository { get; } public ICollectionRepository CollectionRepository { get; } public IShowRepository ShowRepository { get; } public ISeasonRepository SeasonRepository { get; } public IEpisodeRepository EpisodeRepository { get; } public ITrackRepository TrackRepository { get; } public IGenreRepository GenreRepository { get; } public IStudioRepository StudioRepository { get; } public IPeopleRepository PeopleRepository { get; } public IProviderRepository ProviderRepository { get; } public LibraryManager(ILibraryRepository libraryRepository, ILibraryItemRepository libraryItemRepository, ICollectionRepository collectionRepository, IShowRepository showRepository, ISeasonRepository seasonRepository, IEpisodeRepository episodeRepository, ITrackRepository trackRepository, IGenreRepository genreRepository, IStudioRepository studioRepository, IProviderRepository providerRepository, IPeopleRepository peopleRepository) { LibraryRepository = libraryRepository; LibraryItemRepository = libraryItemRepository; CollectionRepository = collectionRepository; ShowRepository = showRepository; SeasonRepository = seasonRepository; EpisodeRepository = episodeRepository; TrackRepository = trackRepository; GenreRepository = genreRepository; StudioRepository = studioRepository; ProviderRepository = providerRepository; PeopleRepository = peopleRepository; } public void Dispose() { LibraryRepository.Dispose(); CollectionRepository.Dispose(); ShowRepository.Dispose(); SeasonRepository.Dispose(); EpisodeRepository.Dispose(); TrackRepository.Dispose(); GenreRepository.Dispose(); StudioRepository.Dispose(); PeopleRepository.Dispose(); ProviderRepository.Dispose(); } public async ValueTask DisposeAsync() { await Task.WhenAll( LibraryRepository.DisposeAsync().AsTask(), CollectionRepository.DisposeAsync().AsTask(), ShowRepository.DisposeAsync().AsTask(), SeasonRepository.DisposeAsync().AsTask(), EpisodeRepository.DisposeAsync().AsTask(), TrackRepository.DisposeAsync().AsTask(), GenreRepository.DisposeAsync().AsTask(), StudioRepository.DisposeAsync().AsTask(), PeopleRepository.DisposeAsync().AsTask(), ProviderRepository.DisposeAsync().AsTask() ); } public Task GetLibrary(int id) { return LibraryRepository.Get(id); } public Task GetCollection(int id) { return CollectionRepository.Get(id); } public Task GetShow(int id) { return ShowRepository.Get(id); } public Task GetSeason(int id) { return SeasonRepository.Get(id); } public Task GetSeason(int showID, int seasonNumber) { return SeasonRepository.Get(showID, seasonNumber); } public Task GetEpisode(int id) { return EpisodeRepository.Get(id); } public Task GetEpisode(int showID, int seasonNumber, int episodeNumber) { return EpisodeRepository.Get(showID, seasonNumber, episodeNumber); } public Task GetGenre(int id) { return GenreRepository.Get(id); } public Task GetStudio(int id) { return StudioRepository.Get(id); } public Task GetPeople(int id) { return PeopleRepository.Get(id); } public Task GetLibrary(string slug) { return LibraryRepository.Get(slug); } public Task GetCollection(string slug) { return CollectionRepository.Get(slug); } public Task GetShow(string slug) { return ShowRepository.Get(slug); } public Task GetSeason(string showSlug, int seasonNumber) { return SeasonRepository.Get(showSlug, seasonNumber); } public Task GetEpisode(string showSlug, int seasonNumber, int episodeNumber) { return EpisodeRepository.Get(showSlug, seasonNumber, episodeNumber); } public Task GetMovieEpisode(string movieSlug) { return EpisodeRepository.Get(movieSlug); } public Task GetTrack(int id) { return TrackRepository.Get(id); } public Task GetGenre(string slug) { return GenreRepository.Get(slug); } public Task GetStudio(string slug) { return StudioRepository.Get(slug); } public Task GetPeople(string slug) { return PeopleRepository.Get(slug); } public Task GetLibrary(Expression> where) { return LibraryRepository.Get(where); } public Task GetCollection(Expression> where) { return CollectionRepository.Get(where); } public Task GetShow(Expression> where) { return ShowRepository.Get(where); } public Task GetSeason(Expression> where) { return SeasonRepository.Get(where); } public Task GetEpisode(Expression> where) { return EpisodeRepository.Get(where); } public Task GetTrack(Expression> where) { return TrackRepository.Get(where); } public Task GetGenre(Expression> where) { return GenreRepository.Get(where); } public Task GetStudio(Expression> where) { return StudioRepository.Get(where); } public Task GetPerson(Expression> where) { return PeopleRepository.Get(where); } public Task> GetLibraries(Expression> where = null, Sort sort = default, Pagination page = default) { return LibraryRepository.GetAll(where, sort, page); } public Task> GetCollections(Expression> where = null, Sort sort = default, Pagination page = default) { return CollectionRepository.GetAll(where, sort, page); } public Task> GetShows(Expression> where = null, Sort sort = default, Pagination limit = default) { return ShowRepository.GetAll(where, sort, limit); } public Task> GetSeasons(Expression> where = null, Sort sort = default, Pagination limit = default) { return SeasonRepository.GetAll(where, sort, limit); } public Task> GetEpisodes(Expression> where = null, Sort sort = default, Pagination limit = default) { return EpisodeRepository.GetAll(where, sort, limit); } public Task> GetTracks(Expression> where = null, Sort sort = default, Pagination page = default) { return TrackRepository.GetAll(where, sort, page); } public Task> GetStudios(Expression> where = null, Sort sort = default, Pagination page = default) { return StudioRepository.GetAll(where, sort, page); } public Task> GetPeople(Expression> where = null, Sort sort = default, Pagination page = default) { return PeopleRepository.GetAll(where, sort, page); } public Task> GetGenres(Expression> where = null, Sort sort = default, Pagination page = default) { return GenreRepository.GetAll(where, sort, page); } public Task> GetProviders(Expression> where = null, Sort sort = default, Pagination page = default) { return ProviderRepository.GetAll(where, sort, page); } public Task> GetItemsFromLibrary(int id, Expression> where = null, Sort sort = default, Pagination limit = default) { return LibraryItemRepository.GetFromLibrary(id, where, sort, limit); } public Task> GetItemsFromLibrary(string librarySlug, Expression> where = null, Sort sort = default, Pagination limit = default) { return LibraryItemRepository.GetFromLibrary(librarySlug, where, sort, limit); } public Task> GetPeopleFromShow(int showID, Expression> where = null, Sort sort = default, Pagination limit = default) { return PeopleRepository.GetFromShow(showID, where, sort, limit); } public Task> GetPeopleFromShow(string showSlug, Expression> where = null, Sort sort = default, Pagination limit = default) { return PeopleRepository.GetFromShow(showSlug, where, sort, limit); } public Task> GetRolesFromPeople(int id, Expression> where = null, Sort sort = default, Pagination limit = default) { return PeopleRepository.GetFromPeople(id, where, sort, limit); } public Task> GetRolesFromPeople(string slug, Expression> where = null, Sort sort = default, Pagination limit = default) { return PeopleRepository.GetFromPeople(slug, where, sort, limit); } public Task AddShowLink(int showID, int? libraryID, int? collectionID) { return ShowRepository.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 LibraryRepository.Search(searchQuery); } public Task> SearchCollections(string searchQuery) { return CollectionRepository.Search(searchQuery); } public Task> SearchShows(string searchQuery) { return ShowRepository.Search(searchQuery); } public Task> SearchSeasons(string searchQuery) { return SeasonRepository.Search(searchQuery); } public Task> SearchEpisodes(string searchQuery) { return EpisodeRepository.Search(searchQuery); } public Task> SearchGenres(string searchQuery) { return GenreRepository.Search(searchQuery); } public Task> SearchStudios(string searchQuery) { return StudioRepository.Search(searchQuery); } public Task> SearchPeople(string searchQuery) { return PeopleRepository.Search(searchQuery); } public Task RegisterLibrary(Library library) { return LibraryRepository.Create(library); } public Task RegisterCollection(Collection collection) { return CollectionRepository.Create(collection); } public Task RegisterShow(Show show) { return ShowRepository.Create(show); } public Task RegisterSeason(Season season) { return SeasonRepository.Create(season); } public Task RegisterEpisode(Episode episode) { return EpisodeRepository.Create(episode); } public Task RegisterTrack(Track track) { return TrackRepository.Create(track); } public Task RegisterGenre(Genre genre) { return GenreRepository.Create(genre); } public Task RegisterStudio(Studio studio) { return StudioRepository.Create(studio); } public Task RegisterPeople(People people) { return PeopleRepository.Create(people); } public Task EditLibrary(Library library, bool resetOld) { return LibraryRepository.Edit(library, resetOld); } public Task EditCollection(Collection collection, bool resetOld) { return CollectionRepository.Edit(collection, resetOld); } public Task EditShow(Show show, bool resetOld) { return ShowRepository.Edit(show, resetOld); } public Task EditSeason(Season season, bool resetOld) { return SeasonRepository.Edit(season, resetOld); } public Task EditEpisode(Episode episode, bool resetOld) { return EpisodeRepository.Edit(episode, resetOld); } public Task EditTrack(Track track, bool resetOld) { return TrackRepository.Edit(track, resetOld); } public Task EditGenre(Genre genre, bool resetOld) { return GenreRepository.Edit(genre, resetOld); } public Task EditStudio(Studio studio, bool resetOld) { return StudioRepository.Edit(studio, resetOld); } public Task EditPeople(People people, bool resetOld) { return PeopleRepository.Edit(people, resetOld); } public Task DelteLibrary(Library library) { return LibraryRepository.Delete(library); } public Task DeleteCollection(Collection collection) { return CollectionRepository.Delete(collection); } public Task DeleteShow(Show show) { return ShowRepository.Delete(show); } public Task DeleteSeason(Season season) { return SeasonRepository.Delete(season); } public Task DeleteEpisode(Episode episode) { return EpisodeRepository.Delete(episode); } public Task DeleteTrack(Track track) { return TrackRepository.Delete(track); } public Task DeleteGenre(Genre genre) { return GenreRepository.Delete(genre); } public Task DeleteStudio(Studio studio) { return StudioRepository.Delete(studio); } public Task DeletePeople(People people) { return PeopleRepository.Delete(people); } public Task DelteLibrary(string library) { return LibraryRepository.Delete(library); } public Task DeleteCollection(string collection) { return CollectionRepository.Delete(collection); } public Task DeleteShow(string show) { return ShowRepository.Delete(show); } public Task DeleteSeason(string season) { return SeasonRepository.Delete(season); } public Task DeleteEpisode(string episode) { return EpisodeRepository.Delete(episode); } public Task DeleteTrack(string track) { return TrackRepository.Delete(track); } public Task DeleteGenre(string genre) { return GenreRepository.Delete(genre); } public Task DeleteStudio(string studio) { return StudioRepository.Delete(studio); } public Task DeletePeople(string people) { return PeopleRepository.Delete(people); } public Task DelteLibrary(int library) { return LibraryRepository.Delete(library); } public Task DeleteCollection(int collection) { return CollectionRepository.Delete(collection); } public Task DeleteShow(int show) { return ShowRepository.Delete(show); } public Task DeleteSeason(int season) { return SeasonRepository.Delete(season); } public Task DeleteEpisode(int episode) { return EpisodeRepository.Delete(episode); } public Task DeleteTrack(int track) { return TrackRepository.Delete(track); } public Task DeleteGenre(int genre) { return GenreRepository.Delete(genre); } public Task DeleteStudio(int studio) { return StudioRepository.Delete(studio); } public Task DeletePeople(int people) { return PeopleRepository.Delete(people); } } }