mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-07-09 03:04:20 -04:00
Making the crawler more robust to bad responses of providers
This commit is contained in:
parent
51bf93c00c
commit
7e873aaed5
@ -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();
|
||||
|
@ -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();
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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">
|
||||
|
Loading…
x
Reference in New Issue
Block a user