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 { // 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(int id); Task GetTrack(int episodeID, string language, bool isForced); Task GetGenre(string slug); Task GetStudio(string slug); Task GetPeople(string slug); // Get by relations Task> GetSeasons(int showID); Task> GetSeasons(string showSlug); Task> GetEpisodes(int showID, int seasonNumber); Task> GetEpisodes(string showSlug, int seasonNumber); Task> GetEpisodes(int seasonID); // Helpers Task GetShowByPath(string path); 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 page = default); Task> GetCollections(Expression> where = null, Sort sort = default, Pagination page = default); Task> GetShows(Expression> where = null, Sort sort = default, Pagination page = default); Task> GetSeasons(Expression> where = null, Sort sort = default, Pagination page = default); Task> GetEpisodes(Expression> where = null, Sort sort = default, Pagination page = default); Task> GetTracks(Expression> where = null, Sort sort = default, Pagination page = default); Task> GetStudios(Expression> where = null, Sort sort = default, Pagination page = default); Task> GetPeople(Expression> where = null, Sort sort = default, Pagination page = default); Task> GetGenres(Expression> where = null, Sort sort = default, Pagination page = default); Task> GetProviders(Expression> where = null, Sort sort = default, Pagination page = default); Task> GetLibraries([Optional] Expression> where, Expression> sort, Pagination page = default ) => GetLibraries(where, new Sort(sort), page); Task> GetCollections([Optional] Expression> where, Expression> sort, Pagination page = default ) => GetCollections(where, new Sort(sort), page); Task> GetShows([Optional] Expression> where, Expression> sort, Pagination page = default ) => GetShows(where, new Sort(sort), page); Task> GetSeasons([Optional] Expression> where, Expression> sort, Pagination page = default ) => GetSeasons(where, new Sort(sort), page); Task> GetEpisodes([Optional] Expression> where, Expression> sort, Pagination page = default ) => GetEpisodes(where, new Sort(sort), page); Task> GetTracks([Optional] Expression> where, Expression> sort, Pagination page = default ) => GetTracks(where, new Sort(sort), page); Task> GetStudios([Optional] Expression> where, Expression> sort, Pagination page = default ) => GetStudios(where, new Sort(sort), page); Task> GetPeople([Optional] Expression> where, Expression> sort, Pagination page = default ) => GetPeople(where, new Sort(sort), page); Task> GetGenres([Optional] Expression> where, Expression> sort, Pagination page = default ) => GetGenres(where, new Sort(sort), page); Task> GetProviders([Optional] Expression> where, Expression> sort, Pagination page = default ) => GetProviders(where, new Sort(sort), page); // 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); } }