diff --git a/Kyoo.Common/Controllers/ILibraryManager.cs b/Kyoo.Common/Controllers/ILibraryManager.cs index 9dfc8a67..237e541f 100644 --- a/Kyoo.Common/Controllers/ILibraryManager.cs +++ b/Kyoo.Common/Controllers/ILibraryManager.cs @@ -27,6 +27,7 @@ namespace Kyoo.Controllers IEnumerable SearchShows(string searchQuery); IEnumerable SearchCollections(string searchQuery); Library GetLibrary(string librarySlug); + Library GetLibraryForShow(string showSlug); IEnumerable GetLibraries(); IEnumerable GetStudios(); Show GetShowBySlug(string slug); diff --git a/Kyoo.Common/Controllers/IMetadataProvider.cs b/Kyoo.Common/Controllers/IMetadataProvider.cs index 0bcf2193..6bafa691 100644 --- a/Kyoo.Common/Controllers/IMetadataProvider.cs +++ b/Kyoo.Common/Controllers/IMetadataProvider.cs @@ -11,7 +11,7 @@ namespace Kyoo.Controllers Task GetCollectionFromName(string name); Task GetShowByID(Show show); - Task> GetShowsFromName(string showName, bool isMovie); + Task> SearchShows(string showName, bool isMovie); Task> GetPeople(Show show); Task GetSeason(Show show, long seasonNumber); diff --git a/Kyoo.Common/Controllers/IProviderManager.cs b/Kyoo.Common/Controllers/IProviderManager.cs index 303506ed..5690842d 100644 --- a/Kyoo.Common/Controllers/IProviderManager.cs +++ b/Kyoo.Common/Controllers/IProviderManager.cs @@ -7,6 +7,7 @@ namespace Kyoo.Controllers public interface IProviderManager { Task GetCollectionFromName(string name, Library library); + Task CompleteShow(Show show, Library library); Task SearchShow(string showName, bool isMovie, Library library); Task> SearchShows(string showName, bool isMovie, Library library); Task GetSeason(Show show, long seasonNumber, Library library); diff --git a/Kyoo.Common/Kyoo.Common.csproj b/Kyoo.Common/Kyoo.Common.csproj index a6a6e838..4c5a99f5 100644 --- a/Kyoo.Common/Kyoo.Common.csproj +++ b/Kyoo.Common/Kyoo.Common.csproj @@ -11,7 +11,7 @@ SDG GPL-3.0-or-later true - 1.0.14 + 1.0.15 diff --git a/Kyoo/Controllers/LibraryManager.cs b/Kyoo/Controllers/LibraryManager.cs index 29714ca1..4680c51f 100644 --- a/Kyoo/Controllers/LibraryManager.cs +++ b/Kyoo/Controllers/LibraryManager.cs @@ -24,6 +24,11 @@ namespace Kyoo.Controllers return _database.Libraries; } + public Library GetLibraryForShow(string showSlug) + { + return _database.LibraryLinks.FirstOrDefault(x => x.Show.Slug == showSlug)?.Library; + } + public IEnumerable GetLibrariesPath() { IEnumerable paths = new List(); diff --git a/Kyoo/Controllers/ProviderManager.cs b/Kyoo/Controllers/ProviderManager.cs index af8ae26e..0cc595ea 100644 --- a/Kyoo/Controllers/ProviderManager.cs +++ b/Kyoo/Controllers/ProviderManager.cs @@ -2,6 +2,7 @@ using Kyoo.Models; using System.Collections.Generic; using System.Linq; +using System.Net.Mail; using System.Threading.Tasks; namespace Kyoo.Controllers @@ -20,14 +21,15 @@ namespace Kyoo.Controllers { T ret = new T(); - if (library.Providers == null) - return ret; + IEnumerable providers = library?.Providers != null + ? _providers.OrderBy(provider => Array.IndexOf(library.Providers, provider.Name)) + : _providers; - foreach (IMetadataProvider provider in _providers.OrderBy(provider => Array.IndexOf(library.Providers, provider.Name))) + foreach (IMetadataProvider provider in providers) { try { - if (library.Providers.Contains(provider.Name)) + if (library?.Providers == null || library.Providers.Contains(provider.Name)) ret = ret.Merge(await providerCall(provider)); } catch (Exception ex) { Console.Error.WriteLine($"\tThe provider {provider.Name} coudln't work for {what}. Exception: {ex.Message}"); @@ -40,14 +42,15 @@ namespace Kyoo.Controllers { List ret = new List(); - if (library.Providers == null) - return ret; + IEnumerable providers = library?.Providers != null + ? _providers.OrderBy(provider => Array.IndexOf(library.Providers, provider.Name)) + : _providers; - foreach (IMetadataProvider provider in _providers.OrderBy(provider => Array.IndexOf(library.Providers, provider.Name))) + foreach (IMetadataProvider provider in providers) { try { - if (library.Providers.Contains(provider.Name)) + if (library?.Providers == null || library.Providers.Contains(provider.Name)) ret.AddRange(await providerCall(provider) ?? new List()); } catch (Exception ex) { Console.Error.WriteLine($"\tThe provider {provider.Name} coudln't work for {what}. Exception: {ex.Message}"); @@ -64,9 +67,20 @@ namespace Kyoo.Controllers return collection; } + public async Task CompleteShow(Show show, Library library) + { + return await GetMetadata(provider => provider.GetShowByID(show), library, $"the show {show.Title}"); + } + public async Task SearchShow(string showName, bool isMovie, Library library) { - Show show = await GetMetadata(async provider => (await provider.GetShowsFromName(showName, isMovie))?.FirstOrDefault(), library, $"the show {showName}"); + Show show = await GetMetadata(async provider => + { + Show searchResult = (await provider.SearchShows(showName, isMovie))?.FirstOrDefault(); + if (searchResult == null) + return null; + return await provider.GetShowByID(searchResult); + }, library, $"the show {showName}"); show.Slug = Utility.ToSlug(showName); show.Title ??= showName; show.IsMovie = isMovie; @@ -75,7 +89,7 @@ namespace Kyoo.Controllers public async Task> SearchShows(string showName, bool isMovie, Library library) { - IEnumerable shows = await GetMetadata(provider => provider.GetShowsFromName(showName, isMovie), library, $"the show {showName}"); + IEnumerable shows = await GetMetadata(provider => provider.SearchShows(showName, isMovie), library, $"the show {showName}"); return shows.Select(show => { show.Slug = Utility.ToSlug(showName); diff --git a/Kyoo/Startup.cs b/Kyoo/Startup.cs index 4115bf34..93ab615e 100644 --- a/Kyoo/Startup.cs +++ b/Kyoo/Startup.cs @@ -52,8 +52,8 @@ namespace Kyoo services.AddDbContext(options => { options.UseLazyLoadingProxies() - .UseSqlite(_configuration.GetConnectionString("Database")) - .UseLoggerFactory(LoggerFactory.Create(builder => builder.AddConsole())); + .UseSqlite(_configuration.GetConnectionString("Database")); + //.UseLoggerFactory(LoggerFactory.Create(builder => builder.AddConsole())); }); services.AddDbContext(options => diff --git a/Kyoo/Views/API/ShowsAPI.cs b/Kyoo/Views/API/ShowsAPI.cs index 5edf1d61..e832b64a 100644 --- a/Kyoo/Views/API/ShowsAPI.cs +++ b/Kyoo/Views/API/ShowsAPI.cs @@ -67,5 +67,13 @@ namespace Kyoo.Api { return await _providerManager.SearchShows(name, isMovie, null); } + + [HttpGet("details")] + [Authorize(Policy = "Read")] + public async Task IdentityShow([FromBody] Show show) + { + Library library = _libraryManager.GetLibraryForShow(show.Slug); + return await _providerManager.CompleteShow(show, library); + } } }