Adding an identify route for shows

This commit is contained in:
Zoe Roux 2020-04-19 21:29:48 +02:00
parent f6a418ca26
commit 14227edf36
8 changed files with 43 additions and 14 deletions

View File

@ -27,6 +27,7 @@ namespace Kyoo.Controllers
IEnumerable<Show> SearchShows(string searchQuery);
IEnumerable<Collection> SearchCollections(string searchQuery);
Library GetLibrary(string librarySlug);
Library GetLibraryForShow(string showSlug);
IEnumerable<Library> GetLibraries();
IEnumerable<Studio> GetStudios();
Show GetShowBySlug(string slug);

View File

@ -11,7 +11,7 @@ namespace Kyoo.Controllers
Task<Collection> GetCollectionFromName(string name);
Task<Show> GetShowByID(Show show);
Task<IEnumerable<Show>> GetShowsFromName(string showName, bool isMovie);
Task<IEnumerable<Show>> SearchShows(string showName, bool isMovie);
Task<IEnumerable<PeopleLink>> GetPeople(Show show);
Task<Season> GetSeason(Show show, long seasonNumber);

View File

@ -7,6 +7,7 @@ namespace Kyoo.Controllers
public interface IProviderManager
{
Task<Collection> GetCollectionFromName(string name, Library library);
Task<Show> CompleteShow(Show show, Library library);
Task<Show> SearchShow(string showName, bool isMovie, Library library);
Task<IEnumerable<Show>> SearchShows(string showName, bool isMovie, Library library);
Task<Season> GetSeason(Show show, long seasonNumber, Library library);

View File

@ -11,7 +11,7 @@
<Company>SDG</Company>
<PackageLicenseExpression>GPL-3.0-or-later</PackageLicenseExpression>
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
<PackageVersion>1.0.14</PackageVersion>
<PackageVersion>1.0.15</PackageVersion>
</PropertyGroup>
<ItemGroup>

View File

@ -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<string> GetLibrariesPath()
{
IEnumerable<string> paths = new List<string>();

View File

@ -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<IMetadataProvider> 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<T> ret = new List<T>();
if (library.Providers == null)
return ret;
IEnumerable<IMetadataProvider> 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<T>());
} 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<Show> CompleteShow(Show show, Library library)
{
return await GetMetadata(provider => provider.GetShowByID(show), library, $"the show {show.Title}");
}
public async Task<Show> 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<IEnumerable<Show>> SearchShows(string showName, bool isMovie, Library library)
{
IEnumerable<Show> shows = await GetMetadata(provider => provider.GetShowsFromName(showName, isMovie), library, $"the show {showName}");
IEnumerable<Show> shows = await GetMetadata(provider => provider.SearchShows(showName, isMovie), library, $"the show {showName}");
return shows.Select(show =>
{
show.Slug = Utility.ToSlug(showName);

View File

@ -52,8 +52,8 @@ namespace Kyoo
services.AddDbContext<DatabaseContext>(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<IdentityDatabase>(options =>

View File

@ -67,5 +67,13 @@ namespace Kyoo.Api
{
return await _providerManager.SearchShows(name, isMovie, null);
}
[HttpGet("details")]
[Authorize(Policy = "Read")]
public async Task<Show> IdentityShow([FromBody] Show show)
{
Library library = _libraryManager.GetLibraryForShow(show.Slug);
return await _providerManager.CompleteShow(show, library);
}
}
}