using System; using System.Collections.Generic; using System.Linq.Expressions; using System.Runtime.InteropServices; using System.Threading.Tasks; using JetBrains.Annotations; using Kyoo.Models; namespace Kyoo.Controllers { public interface ILibraryManager : IDisposable, IAsyncDisposable { // Repositories ILibraryRepository LibraryRepository { get; } ILibraryItemRepository LibraryItemRepository { get; } ICollectionRepository CollectionRepository { get; } IShowRepository ShowRepository { get; } ISeasonRepository SeasonRepository { get; } IEpisodeRepository EpisodeRepository { get; } ITrackRepository TrackRepository { get; } IPeopleRepository PeopleRepository { get; } IStudioRepository StudioRepository { get; } IGenreRepository GenreRepository { get; } IProviderRepository ProviderRepository { get; } // Get by id Task GetLibrary(int id); Task GetCollection(int id); Task GetShow(int id); Task GetSeason(int id); Task GetSeason(int showID, int seasonNumber); Task GetEpisode(int id); Task GetEpisode(int showID, int seasonNumber, int episodeNumber); Task GetGenre(int id); Task GetTrack(int id); Task GetStudio(int id); Task GetPeople(int id); // Get by slug Task GetLibrary(string slug); Task GetCollection(string slug); Task GetShow(string slug); Task GetSeason(string showSlug, int seasonNumber); Task GetEpisode(string showSlug, int seasonNumber, int episodeNumber); Task GetMovieEpisode(string movieSlug); Task GetTrack(string slug); Task GetGenre(string slug); Task GetStudio(string slug); Task GetPeople(string slug); // Get by predicate Task GetLibrary(Expression> where); Task GetCollection(Expression> where); Task GetShow(Expression> where); Task GetSeason(Expression> where); Task GetEpisode(Expression> where); Task GetTrack(Expression> where); Task GetGenre(Expression> where); Task GetStudio(Expression> where); Task GetPerson(Expression> where); // Library Items relations Task> GetItemsFromLibrary(int id, Expression> where = null, Sort sort = default, Pagination limit = default); Task> GetItemsFromLibrary(int id, [Optional] Expression> where, Expression> sort, Pagination limit = default ) => GetItemsFromLibrary(id, where, new Sort(sort), limit); Task> GetItemsFromLibrary(string librarySlug, Expression> where = null, Sort sort = default, Pagination limit = default); Task> GetItemsFromLibrary(string librarySlug, [Optional] Expression> where, Expression> sort, Pagination limit = default ) => GetItemsFromLibrary(librarySlug, where, new Sort(sort), limit); // People Role relations Task> GetPeopleFromShow(int showID, Expression> where = null, Sort sort = default, Pagination limit = default); Task> GetPeopleFromShow(int showID, [Optional] Expression> where, Expression> sort, Pagination limit = default ) => GetPeopleFromShow(showID, where, new Sort(sort), limit); Task> GetPeopleFromShow(string showSlug, Expression> where = null, Sort sort = default, Pagination limit = default); Task> GetPeopleFromShow(string showSlug, [Optional] Expression> where, Expression> sort, Pagination limit = default ) => GetPeopleFromShow(showSlug, where, new Sort(sort), limit); // Show Role relations Task> GetRolesFromPeople(int showID, Expression> where = null, Sort sort = default, Pagination limit = default); Task> GetRolesFromPeople(int showID, [Optional] Expression> where, Expression> sort, Pagination limit = default ) => GetRolesFromPeople(showID, where, new Sort(sort), limit); Task> GetRolesFromPeople(string showSlug, Expression> where = null, Sort sort = default, Pagination limit = default); Task> GetRolesFromPeople(string showSlug, [Optional] Expression> where, Expression> sort, Pagination limit = default ) => GetRolesFromPeople(showSlug, where, new Sort(sort), limit); // Helpers Task AddShowLink(int showID, int? libraryID, int? collectionID); Task AddShowLink([NotNull] Show show, Library library, Collection collection); // Get all Task> GetLibraries(Expression> where = null, Sort sort = default, Pagination limit = default); Task> GetCollections(Expression> where = null, Sort sort = default, Pagination limit = default); Task> GetShows(Expression> where = null, Sort sort = default, Pagination limit = default); Task> GetSeasons(Expression> where = null, Sort sort = default, Pagination limit = default); Task> GetEpisodes(Expression> where = null, Sort sort = default, Pagination limit = default); Task> GetTracks(Expression> where = null, Sort sort = default, Pagination limit = default); Task> GetStudios(Expression> where = null, Sort sort = default, Pagination limit = default); Task> GetPeople(Expression> where = null, Sort sort = default, Pagination limit = default); Task> GetGenres(Expression> where = null, Sort sort = default, Pagination limit = default); Task> GetProviders(Expression> where = null, Sort sort = default, Pagination limit = default); Task> GetLibraries([Optional] Expression> where, Expression> sort, Pagination limit = default ) => GetLibraries(where, new Sort(sort), limit); Task> GetCollections([Optional] Expression> where, Expression> sort, Pagination limit = default ) => GetCollections(where, new Sort(sort), limit); Task> GetShows([Optional] Expression> where, Expression> sort, Pagination limit = default ) => GetShows(where, new Sort(sort), limit); Task> GetTracks([Optional] Expression> where, Expression> sort, Pagination limit = default ) => GetTracks(where, new Sort(sort), limit); Task> GetStudios([Optional] Expression> where, Expression> sort, Pagination limit = default ) => GetStudios(where, new Sort(sort), limit); Task> GetPeople([Optional] Expression> where, Expression> sort, Pagination limit = default ) => GetPeople(where, new Sort(sort), limit); Task> GetGenres([Optional] Expression> where, Expression> sort, Pagination limit = default ) => GetGenres(where, new Sort(sort), limit); Task> GetProviders([Optional] Expression> where, Expression> sort, Pagination limit = default ) => GetProviders(where, new Sort(sort), limit); // Counts Task GetLibrariesCount(Expression> where = null); Task GetCollectionsCount(Expression> where = null); Task GetShowsCount(Expression> where = null); Task GetSeasonsCount(Expression> where = null); Task GetEpisodesCount(Expression> where = null); Task GetTracksCount(Expression> where = null); Task GetGenresCount(Expression> where = null); Task GetStudiosCount(Expression> where = null); Task GetPeopleCount(Expression> where = null); // Search Task> SearchLibraries(string searchQuery); Task> SearchCollections(string searchQuery); Task> SearchShows(string searchQuery); Task> SearchSeasons(string searchQuery); Task> SearchEpisodes(string searchQuery); Task> SearchGenres(string searchQuery); Task> SearchStudios(string searchQuery); Task> SearchPeople(string searchQuery); //Register values Task RegisterLibrary(Library library); Task RegisterCollection(Collection collection); Task RegisterShow(Show show); Task RegisterSeason(Season season); Task RegisterEpisode(Episode episode); Task RegisterTrack(Track track); Task RegisterGenre(Genre genre); Task RegisterStudio(Studio studio); Task RegisterPeople(People people); // Edit values Task EditLibrary(Library library, bool resetOld); Task EditCollection(Collection collection, bool resetOld); Task EditShow(Show show, bool resetOld); Task EditSeason(Season season, bool resetOld); Task EditEpisode(Episode episode, bool resetOld); Task EditTrack(Track track, bool resetOld); Task EditGenre(Genre genre, bool resetOld); Task EditStudio(Studio studio, bool resetOld); Task EditPeople(People people, bool resetOld); // Delete values Task DelteLibrary(Library library); Task DeleteCollection(Collection collection); Task DeleteShow(Show show); Task DeleteSeason(Season season); Task DeleteEpisode(Episode episode); Task DeleteTrack(Track track); Task DeleteGenre(Genre genre); Task DeleteStudio(Studio studio); Task DeletePeople(People people); //Delete by slug Task DelteLibrary(string slug); Task DeleteCollection(string slug); Task DeleteShow(string slug); Task DeleteSeason(string slug); Task DeleteEpisode(string slug); Task DeleteTrack(string slug); Task DeleteGenre(string slug); Task DeleteStudio(string slug); Task DeletePeople(string slug); //Delete by id Task DelteLibrary(int id); Task DeleteCollection(int id); Task DeleteShow(int id); Task DeleteSeason(int id); Task DeleteEpisode(int id); Task DeleteTrack(int id); Task DeleteGenre(int id); Task DeleteStudio(int id); Task DeletePeople(int id); } }