Making the crawler more robust to bad responses of providers

This commit is contained in:
Zoe Roux 2020-02-29 19:54:27 +01:00
parent 51bf93c00c
commit 7e873aaed5
4 changed files with 20 additions and 16 deletions

View File

@ -89,7 +89,8 @@ namespace Kyoo.Controllers
{
Season season = await GetSeason(show, seasonNumber, library);
Episode episode = await GetEpisode(show, season, episodeNumber, absoluteNumber, path, library);
_libraryManager.RegisterEpisode(episode);
if (_libraryManager.RegisterEpisode(episode) == 0)
return;
}
_libraryManager.RegisterShowLinks(library, collection, show);
}
@ -123,18 +124,20 @@ namespace Kyoo.Controllers
Season season = _libraryManager.GetSeason(show.Slug, seasonNumber);
if (season != null)
return await Task.FromResult(season);
season = await _metadataProvider.GetSeason(show, seasonNumber, library);
season.Show = show;
return season;
return await _metadataProvider.GetSeason(show, seasonNumber, library);
}
private async Task<Episode> GetEpisode(Show show, Season season, long episodeNumber, long absoluteNumber, string episodePath, Library library)
{
Episode episode = await _metadataProvider.GetEpisode(show, episodePath, season?.SeasonNumber ?? -1, episodeNumber, absoluteNumber, library);
episode.Show = show;
if (season == null)
season = await GetSeason(show, episode.SeasonNumber, library);
episode.Season = season;
if (season == null)
{
Console.Error.WriteLine("\tError: You don't have any provider that support absolute epiode numbering. Install one and try again.");
return null;
}
IEnumerable<Track> tracks = await _transcoder.GetTrackInfo(episode.Path);
List<Track> epTracks = tracks.Where(x => x.Type != StreamType.Subtitle).Concat(GetExtractedSubtitles(episode)).ToList();

View File

@ -310,6 +310,8 @@ namespace Kyoo.Controllers
#region Write Into The Database
public long RegisterCollection(Collection collection)
{
if (collection == null)
return 0;
if (_database.Entry(collection).State == EntityState.Detached)
_database.Collections.Add(collection);
_database.SaveChanges();
@ -318,6 +320,8 @@ namespace Kyoo.Controllers
public long RegisterShow(Show show)
{
if (show == null)
return 0;
if (_database.Entry(show).State == EntityState.Detached)
_database.Shows.Add(show);
_database.SaveChanges();
@ -326,6 +330,8 @@ namespace Kyoo.Controllers
public long RegisterSeason(Season season)
{
if (season == null)
return 0;
if (_database.Entry(season).State == EntityState.Detached)
_database.Seasons.Add(season);
_database.SaveChanges();
@ -334,6 +340,8 @@ namespace Kyoo.Controllers
public long RegisterEpisode(Episode episode)
{
if (episode == null)
return 0;
if (_database.Entry(episode).State == EntityState.Detached)
_database.Episodes.Add(episode);
_database.SaveChanges();

View File

@ -43,7 +43,7 @@ namespace Kyoo.Controllers
try
{
if (library.Providers.Contains(provider.Name))
ret.AddRange(await providerCall(provider));
ret.AddRange(await providerCall(provider) ?? new List<T>());
} catch (Exception ex) {
Console.Error.WriteLine($"The provider {provider.Name} coudln't work for {what}. Exception: {ex.Message}");
}
@ -73,7 +73,7 @@ namespace Kyoo.Controllers
public async Task<Season> GetSeason(Show show, long seasonNumber, Library library)
{
Season season = await GetMetadata(provider => provider.GetSeason(show, seasonNumber), library, $"the season {seasonNumber} of {show.Title}");
season.ShowID = show.ID;
season.Show = show;
season.SeasonNumber = season.SeasonNumber == -1 ? seasonNumber : season.SeasonNumber;
season.Title ??= $"Season {season.SeasonNumber}";
return season;
@ -82,7 +82,7 @@ namespace Kyoo.Controllers
public async Task<Episode> GetEpisode(Show show, string episodePath, long seasonNumber, long episodeNumber, long absoluteNumber, Library library)
{
Episode episode = await GetMetadata(provider => provider.GetEpisode(show, seasonNumber, episodeNumber, absoluteNumber), library, "an episode");
episode.ShowID = show.ID;
episode.Show = show;
episode.Path = episodePath;
episode.SeasonNumber = episode.SeasonNumber != -1 ? episode.SeasonNumber : seasonNumber;
episode.EpisodeNumber = episode.EpisodeNumber != -1 ? episode.EpisodeNumber : episodeNumber;
@ -93,7 +93,7 @@ namespace Kyoo.Controllers
public async Task<IEnumerable<PeopleLink>> GetPeople(Show show, Library library)
{
IEnumerable<PeopleLink> people = await GetMetadata(provider => provider.GetPeople(show), library, "unknown data");
IEnumerable<PeopleLink> people = await GetMetadata(provider => provider.GetPeople(show), library, $"a cast member of {show.Title}");
people = await _thumbnailsManager.Validate(people.ToList());
return people;
}

View File

@ -41,8 +41,6 @@
<Content Remove="$(SpaRoot)**" />
<None Remove="$(SpaRoot)**" />
<None Include="$(SpaRoot)**" Exclude="$(SpaRoot)node_modules\**" />
<None Remove="Controllers\MetadataProvider\**" />
<Content Remove="Controllers\MetadataProvider\**" />
</ItemGroup>
<ItemGroup>
@ -58,17 +56,12 @@
<EmbeddedResource Include="kyoo.sh">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</EmbeddedResource>
<EmbeddedResource Remove="Controllers\MetadataProvider\**" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Kyoo.Common\Kyoo.Common.csproj" />
</ItemGroup>
<ItemGroup>
<Compile Remove="Controllers\MetadataProvider\**" />
</ItemGroup>
<Target Name="DebugEnsureNodeEnv" BeforeTargets="Build" Condition=" '$(Configuration)' == 'Debug' And !Exists('$(SpaRoot)node_modules') ">
<!-- Ensure Node.js is installed -->
<Exec Command="node --version" ContinueOnError="true">