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
Task<Show> GetShowByID(string id);
Task<Show> GetShowFromName(string showName);
Task<IEnumerable<People>> GetPeople(string id);
Task<IEnumerable<People>> GetPeople(Show show);
//For the seasons
Task<Season> GetSeason(string showName, long seasonNumber);
//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<Show> GetShowFromName(string showName, 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<IEnumerable<People>> GetPeople(string showExternalIDs, Library library);
Task<Episode> GetEpisode(Show show, long seasonNumber, long episodeNumber, long absoluteNumber, 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>
<TargetFramework>netcoreapp3.0</TargetFramework>
@ -11,7 +11,7 @@
<Company>SDG</Company>
<PackageLicenseExpression>GPL-3.0-or-later</PackageLicenseExpression>
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
<PackageVersion>1.0.2</PackageVersion>
<PackageVersion>1.0.5</PackageVersion>
</PropertyGroup>
<ItemGroup>

View File

@ -132,9 +132,11 @@ namespace Kyoo.Models
if (ExternalIDs?.Contains(provider) != true)
return null;
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);
}
public Show Set(string slug, string path)
{
Slug = slug;

View File

@ -148,7 +148,7 @@ namespace Kyoo.Controllers
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);
}
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.Path = episodePath;

View File

@ -19,7 +19,6 @@ namespace Kyoo.Controllers
{
this.provider = provider;
this.config = config;
ReloadPlugins();
}
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}");
}
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);
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);
return people;
}

View File

@ -1,14 +1,27 @@
using System.Threading.Tasks;
using Kyoo.Controllers;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace Kyoo
{
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) =>

View File

@ -32,11 +32,12 @@ namespace Kyoo
services.AddControllers().AddNewtonsoftJson();
services.AddHttpClient();
services.AddSingleton<IPluginManager, PluginManager>();
services.AddSingleton<ILibraryManager, LibraryManager>();
services.AddSingleton<ITranscoder, Transcoder>();
services.AddSingleton<ICrawler, Crawler>();
services.AddSingleton<IThumbnailsManager, ThumbnailsManager>();
services.AddSingleton<IProviderManager, ProviderManager>();
services.AddSingleton<ICrawler, Crawler>();
}
// 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",
"transcodeTempPath": "/tmp/cached/kyoo/transcode",
"peoplePath": "/tmp/people",
"plugins": "/tmp/plugins",
"plugins": "plugins/",
"regex": "^(\\/(?<Collection>.+?))?\\/.*\\/(?<ShowTitle>.+?) S(?<Season>\\d+)E(?<Episode>\\d+)",
"absoluteRegex": ".*\\/(?<ShowTitle>.+?) (?<AbsoluteNumber>\\d+)"
}