mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-05-24 02:02:36 -04:00
Adding an identify route for shows
This commit is contained in:
parent
f6a418ca26
commit
14227edf36
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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>
|
||||
|
@ -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>();
|
||||
|
@ -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);
|
||||
|
@ -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 =>
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user