Making the plugin manager start on app startup

This commit is contained in:
Zoe Roux 2020-01-25 00:14:09 +01:00
parent 899adb2b9d
commit 3e9da31ac5
10 changed files with 33 additions and 18 deletions

View File

@ -14,12 +14,12 @@ namespace Kyoo.Controllers
//For the show //For the show
Task<Show> GetShowByID(string id); Task<Show> GetShowByID(string id);
Task<Show> GetShowFromName(string showName); Task<Show> GetShowFromName(string showName);
Task<IEnumerable<People>> GetPeople(string id); Task<IEnumerable<People>> GetPeople(Show show);
//For the seasons //For the seasons
Task<Season> GetSeason(string showName, long seasonNumber); Task<Season> GetSeason(string showName, long seasonNumber);
//For the episodes //For the episodes
Task<Episode> GetEpisode(string externalIDs, long seasonNumber, long episodeNumber, long absoluteNumber); Task<Episode> GetEpisode(Show show, long seasonNumber, long episodeNumber, long absoluteNumber);
} }
} }

View File

@ -9,7 +9,7 @@ namespace Kyoo.Controllers
Task<Collection> GetCollectionFromName(string name, Library library); Task<Collection> GetCollectionFromName(string name, Library library);
Task<Show> GetShowFromName(string showName, Library library); Task<Show> GetShowFromName(string showName, Library library);
Task<Season> GetSeason(string showName, long seasonNumber, Library library); Task<Season> GetSeason(string showName, long seasonNumber, Library library);
Task<Episode> GetEpisode(string externalIDs, long seasonNumber, long episodeNumber, long absoluteNumber, Library library); Task<Episode> GetEpisode(Show show, long seasonNumber, long episodeNumber, long absoluteNumber, Library library);
Task<IEnumerable<People>> GetPeople(string showExternalIDs, Library library); Task<IEnumerable<People>> GetPeople(Show show, Library library);
} }
} }

View File

@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework> <TargetFramework>netcoreapp3.0</TargetFramework>
@ -11,7 +11,7 @@
<Company>SDG</Company> <Company>SDG</Company>
<PackageLicenseExpression>GPL-3.0-or-later</PackageLicenseExpression> <PackageLicenseExpression>GPL-3.0-or-later</PackageLicenseExpression>
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance> <PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
<PackageVersion>1.0.2</PackageVersion> <PackageVersion>1.0.5</PackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

View File

@ -132,9 +132,11 @@ namespace Kyoo.Models
if (ExternalIDs?.Contains(provider) != true) if (ExternalIDs?.Contains(provider) != true)
return null; return null;
int startIndex = ExternalIDs.IndexOf(provider, StringComparison.Ordinal) + provider.Length + 1; //The + 1 is for the '=' int startIndex = ExternalIDs.IndexOf(provider, StringComparison.Ordinal) + provider.Length + 1; //The + 1 is for the '='
if (ExternalIDs.IndexOf('|', startIndex) == -1)
return ExternalIDs.Substring(startIndex);
return ExternalIDs.Substring(startIndex, ExternalIDs.IndexOf('|', startIndex) - startIndex); return ExternalIDs.Substring(startIndex, ExternalIDs.IndexOf('|', startIndex) - startIndex);
} }
public Show Set(string slug, string path) public Show Set(string slug, string path)
{ {
Slug = slug; Slug = slug;

View File

@ -148,7 +148,7 @@ namespace Kyoo.Controllers
libraryManager.AddShowToCollection(showID, collectionID); libraryManager.AddShowToCollection(showID, collectionID);
} }
IEnumerable<People> actors = await metadataProvider.GetPeople(show.ExternalIDs, library); IEnumerable<People> actors = await metadataProvider.GetPeople(show, library);
libraryManager.RegisterShowPeople(showID, actors); libraryManager.RegisterShowPeople(showID, actors);
} }
else else
@ -170,7 +170,7 @@ namespace Kyoo.Controllers
} }
} }
Episode episode = await metadataProvider.GetEpisode(show.ExternalIDs, seasonNumber, episodeNumber, absoluteNumber, library); Episode episode = await metadataProvider.GetEpisode(show, seasonNumber, episodeNumber, absoluteNumber, library);
episode.ShowID = show.id; episode.ShowID = show.id;
episode.Path = episodePath; episode.Path = episodePath;

View File

@ -19,7 +19,6 @@ namespace Kyoo.Controllers
{ {
this.provider = provider; this.provider = provider;
this.config = config; this.config = config;
ReloadPlugins();
} }
public T GetPlugin<T>(string name) public T GetPlugin<T>(string name)

View File

@ -69,16 +69,16 @@ namespace Kyoo.Controllers
return await GetMetadata(provider => provider.GetSeason(showName, seasonNumber), library, $"the season ${seasonNumber} of {showName}"); return await GetMetadata(provider => provider.GetSeason(showName, seasonNumber), library, $"the season ${seasonNumber} of {showName}");
} }
public async Task<Episode> GetEpisode(string externalIDs, long seasonNumber, long episodeNumber, long absoluteNumber, Library library) public async Task<Episode> GetEpisode(Show show, long seasonNumber, long episodeNumber, long absoluteNumber, Library library)
{ {
Episode episode = await GetMetadata(provider => provider.GetEpisode(externalIDs, seasonNumber, episodeNumber, absoluteNumber), library, $"an episode"); Episode episode = await GetMetadata(provider => provider.GetEpisode(show, seasonNumber, episodeNumber, absoluteNumber), library, $"an episode");
await thumbnailsManager.Validate(episode); await thumbnailsManager.Validate(episode);
return episode; return episode;
} }
public async Task<IEnumerable<People>> GetPeople(string showExternalIDs, Library library) public async Task<IEnumerable<People>> GetPeople(Show show, Library library)
{ {
IEnumerable<People> people = await GetMetadata(provider => provider.GetPeople(showExternalIDs), library, $"unknown data"); IEnumerable<People> people = await GetMetadata(provider => provider.GetPeople(show), library, $"unknown data");
people = await thumbnailsManager.Validate(people); people = await thumbnailsManager.Validate(people);
return people; return people;
} }

View File

@ -1,14 +1,27 @@
using System.Threading.Tasks;
using Kyoo.Controllers;
using Microsoft.AspNetCore; using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
namespace Kyoo namespace Kyoo
{ {
public class Program public class Program
{ {
public static void Main(string[] args) public static async Task Main(string[] args)
{ {
CreateWebHostBuilder(args).Build().Run(); IWebHost host = CreateWebHostBuilder(args).Build();
using (IServiceScope serviceScope = host.Services.CreateScope())
{
IPluginManager pluginManager = serviceScope.ServiceProvider.GetService<IPluginManager>();
pluginManager.ReloadPlugins();
ICrawler crawler = serviceScope.ServiceProvider.GetService<ICrawler>();
crawler.Start();
}
await host.RunAsync();
} }
public static IWebHostBuilder CreateWebHostBuilder(string[] args) => public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>

View File

@ -32,11 +32,12 @@ namespace Kyoo
services.AddControllers().AddNewtonsoftJson(); services.AddControllers().AddNewtonsoftJson();
services.AddHttpClient(); services.AddHttpClient();
services.AddSingleton<IPluginManager, PluginManager>();
services.AddSingleton<ILibraryManager, LibraryManager>(); services.AddSingleton<ILibraryManager, LibraryManager>();
services.AddSingleton<ITranscoder, Transcoder>(); services.AddSingleton<ITranscoder, Transcoder>();
services.AddSingleton<ICrawler, Crawler>();
services.AddSingleton<IThumbnailsManager, ThumbnailsManager>(); services.AddSingleton<IThumbnailsManager, ThumbnailsManager>();
services.AddSingleton<IProviderManager, ProviderManager>(); services.AddSingleton<IProviderManager, ProviderManager>();
services.AddSingleton<ICrawler, Crawler>();
} }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.

View File

@ -12,7 +12,7 @@
"transmuxTempPath": "/tmp/cached/kyoo/transmux", "transmuxTempPath": "/tmp/cached/kyoo/transmux",
"transcodeTempPath": "/tmp/cached/kyoo/transcode", "transcodeTempPath": "/tmp/cached/kyoo/transcode",
"peoplePath": "/tmp/people", "peoplePath": "/tmp/people",
"plugins": "/tmp/plugins", "plugins": "plugins/",
"regex": "^(\\/(?<Collection>.+?))?\\/.*\\/(?<ShowTitle>.+?) S(?<Season>\\d+)E(?<Episode>\\d+)", "regex": "^(\\/(?<Collection>.+?))?\\/.*\\/(?<ShowTitle>.+?) S(?<Season>\\d+)E(?<Episode>\\d+)",
"absoluteRegex": ".*\\/(?<ShowTitle>.+?) (?<AbsoluteNumber>\\d+)" "absoluteRegex": ".*\\/(?<ShowTitle>.+?) (?<AbsoluteNumber>\\d+)"
} }