diff --git a/Kyoo.Common/Controllers/IMetadataProvider.cs b/Kyoo.Common/Controllers/IMetadataProvider.cs index 9c144254..d7ce5a52 100644 --- a/Kyoo.Common/Controllers/IMetadataProvider.cs +++ b/Kyoo.Common/Controllers/IMetadataProvider.cs @@ -14,12 +14,12 @@ namespace Kyoo.Controllers //For the show Task GetShowByID(string id); Task GetShowFromName(string showName); - Task> GetPeople(string id); + Task> GetPeople(Show show); //For the seasons Task GetSeason(string showName, long seasonNumber); //For the episodes - Task GetEpisode(string externalIDs, long seasonNumber, long episodeNumber, long absoluteNumber); + Task GetEpisode(Show show, long seasonNumber, long episodeNumber, long absoluteNumber); } } diff --git a/Kyoo.Common/Controllers/IProviderManager.cs b/Kyoo.Common/Controllers/IProviderManager.cs index bbb02a60..8f51b8a1 100644 --- a/Kyoo.Common/Controllers/IProviderManager.cs +++ b/Kyoo.Common/Controllers/IProviderManager.cs @@ -9,7 +9,7 @@ namespace Kyoo.Controllers Task GetCollectionFromName(string name, Library library); Task GetShowFromName(string showName, Library library); Task GetSeason(string showName, long seasonNumber, Library library); - Task GetEpisode(string externalIDs, long seasonNumber, long episodeNumber, long absoluteNumber, Library library); - Task> GetPeople(string showExternalIDs, Library library); + Task GetEpisode(Show show, long seasonNumber, long episodeNumber, long absoluteNumber, Library library); + Task> GetPeople(Show show, Library library); } } \ No newline at end of file diff --git a/Kyoo.Common/Kyoo.Common.csproj b/Kyoo.Common/Kyoo.Common.csproj index ab4dc7c5..1cc85725 100644 --- a/Kyoo.Common/Kyoo.Common.csproj +++ b/Kyoo.Common/Kyoo.Common.csproj @@ -1,4 +1,4 @@ - + netcoreapp3.0 @@ -11,7 +11,7 @@ SDG GPL-3.0-or-later true - 1.0.2 + 1.0.5 diff --git a/Kyoo.Common/Models/Show.cs b/Kyoo.Common/Models/Show.cs index 34d3016d..c84f3595 100644 --- a/Kyoo.Common/Models/Show.cs +++ b/Kyoo.Common/Models/Show.cs @@ -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; diff --git a/Kyoo/Controllers/Crawler.cs b/Kyoo/Controllers/Crawler.cs index d67ba985..95353e3a 100644 --- a/Kyoo/Controllers/Crawler.cs +++ b/Kyoo/Controllers/Crawler.cs @@ -148,7 +148,7 @@ namespace Kyoo.Controllers libraryManager.AddShowToCollection(showID, collectionID); } - IEnumerable actors = await metadataProvider.GetPeople(show.ExternalIDs, library); + IEnumerable 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; diff --git a/Kyoo/Controllers/PluginManager.cs b/Kyoo/Controllers/PluginManager.cs index 78d2444d..4bd26fec 100644 --- a/Kyoo/Controllers/PluginManager.cs +++ b/Kyoo/Controllers/PluginManager.cs @@ -19,7 +19,6 @@ namespace Kyoo.Controllers { this.provider = provider; this.config = config; - ReloadPlugins(); } public T GetPlugin(string name) diff --git a/Kyoo/Controllers/ProviderManager.cs b/Kyoo/Controllers/ProviderManager.cs index 8aeba1cf..28ef23a5 100644 --- a/Kyoo/Controllers/ProviderManager.cs +++ b/Kyoo/Controllers/ProviderManager.cs @@ -69,16 +69,16 @@ namespace Kyoo.Controllers return await GetMetadata(provider => provider.GetSeason(showName, seasonNumber), library, $"the season ${seasonNumber} of {showName}"); } - public async Task GetEpisode(string externalIDs, long seasonNumber, long episodeNumber, long absoluteNumber, Library library) + public async Task 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> GetPeople(string showExternalIDs, Library library) + public async Task> GetPeople(Show show, Library library) { - IEnumerable people = await GetMetadata(provider => provider.GetPeople(showExternalIDs), library, $"unknown data"); + IEnumerable people = await GetMetadata(provider => provider.GetPeople(show), library, $"unknown data"); people = await thumbnailsManager.Validate(people); return people; } diff --git a/Kyoo/Program.cs b/Kyoo/Program.cs index 06c7b1e2..925d7334 100644 --- a/Kyoo/Program.cs +++ b/Kyoo/Program.cs @@ -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(); + pluginManager.ReloadPlugins(); + + ICrawler crawler = serviceScope.ServiceProvider.GetService(); + crawler.Start(); + } + await host.RunAsync(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => diff --git a/Kyoo/Startup.cs b/Kyoo/Startup.cs index 3ac22f6f..a60f4445 100644 --- a/Kyoo/Startup.cs +++ b/Kyoo/Startup.cs @@ -32,11 +32,12 @@ namespace Kyoo services.AddControllers().AddNewtonsoftJson(); services.AddHttpClient(); + services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); - services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); + services.AddSingleton(); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. diff --git a/Kyoo/appsettings.json b/Kyoo/appsettings.json index af27c3fe..7cd9243d 100644 --- a/Kyoo/appsettings.json +++ b/Kyoo/appsettings.json @@ -12,7 +12,7 @@ "transmuxTempPath": "/tmp/cached/kyoo/transmux", "transcodeTempPath": "/tmp/cached/kyoo/transcode", "peoplePath": "/tmp/people", - "plugins": "/tmp/plugins", + "plugins": "plugins/", "regex": "^(\\/(?.+?))?\\/.*\\/(?.+?) S(?\\d+)E(?\\d+)", "absoluteRegex": ".*\\/(?.+?) (?\\d+)" }