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);
|
Season season = await GetSeason(show, seasonNumber, library);
|
||||||
Episode episode = await GetEpisode(show, season, episodeNumber, absoluteNumber, path, 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);
|
_libraryManager.RegisterShowLinks(library, collection, show);
|
||||||
}
|
}
|
||||||
@ -123,18 +124,20 @@ namespace Kyoo.Controllers
|
|||||||
Season season = _libraryManager.GetSeason(show.Slug, seasonNumber);
|
Season season = _libraryManager.GetSeason(show.Slug, seasonNumber);
|
||||||
if (season != null)
|
if (season != null)
|
||||||
return await Task.FromResult(season);
|
return await Task.FromResult(season);
|
||||||
season = await _metadataProvider.GetSeason(show, seasonNumber, library);
|
return await _metadataProvider.GetSeason(show, seasonNumber, library);
|
||||||
season.Show = show;
|
|
||||||
return season;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<Episode> GetEpisode(Show show, Season season, long episodeNumber, long absoluteNumber, string episodePath, Library 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 episode = await _metadataProvider.GetEpisode(show, episodePath, season?.SeasonNumber ?? -1, episodeNumber, absoluteNumber, library);
|
||||||
episode.Show = show;
|
|
||||||
if (season == null)
|
if (season == null)
|
||||||
season = await GetSeason(show, episode.SeasonNumber, library);
|
season = await GetSeason(show, episode.SeasonNumber, library);
|
||||||
episode.Season = season;
|
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);
|
IEnumerable<Track> tracks = await _transcoder.GetTrackInfo(episode.Path);
|
||||||
List<Track> epTracks = tracks.Where(x => x.Type != StreamType.Subtitle).Concat(GetExtractedSubtitles(episode)).ToList();
|
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
|
#region Write Into The Database
|
||||||
public long RegisterCollection(Collection collection)
|
public long RegisterCollection(Collection collection)
|
||||||
{
|
{
|
||||||
|
if (collection == null)
|
||||||
|
return 0;
|
||||||
if (_database.Entry(collection).State == EntityState.Detached)
|
if (_database.Entry(collection).State == EntityState.Detached)
|
||||||
_database.Collections.Add(collection);
|
_database.Collections.Add(collection);
|
||||||
_database.SaveChanges();
|
_database.SaveChanges();
|
||||||
@ -318,6 +320,8 @@ namespace Kyoo.Controllers
|
|||||||
|
|
||||||
public long RegisterShow(Show show)
|
public long RegisterShow(Show show)
|
||||||
{
|
{
|
||||||
|
if (show == null)
|
||||||
|
return 0;
|
||||||
if (_database.Entry(show).State == EntityState.Detached)
|
if (_database.Entry(show).State == EntityState.Detached)
|
||||||
_database.Shows.Add(show);
|
_database.Shows.Add(show);
|
||||||
_database.SaveChanges();
|
_database.SaveChanges();
|
||||||
@ -326,6 +330,8 @@ namespace Kyoo.Controllers
|
|||||||
|
|
||||||
public long RegisterSeason(Season season)
|
public long RegisterSeason(Season season)
|
||||||
{
|
{
|
||||||
|
if (season == null)
|
||||||
|
return 0;
|
||||||
if (_database.Entry(season).State == EntityState.Detached)
|
if (_database.Entry(season).State == EntityState.Detached)
|
||||||
_database.Seasons.Add(season);
|
_database.Seasons.Add(season);
|
||||||
_database.SaveChanges();
|
_database.SaveChanges();
|
||||||
@ -334,6 +340,8 @@ namespace Kyoo.Controllers
|
|||||||
|
|
||||||
public long RegisterEpisode(Episode episode)
|
public long RegisterEpisode(Episode episode)
|
||||||
{
|
{
|
||||||
|
if (episode == null)
|
||||||
|
return 0;
|
||||||
if (_database.Entry(episode).State == EntityState.Detached)
|
if (_database.Entry(episode).State == EntityState.Detached)
|
||||||
_database.Episodes.Add(episode);
|
_database.Episodes.Add(episode);
|
||||||
_database.SaveChanges();
|
_database.SaveChanges();
|
||||||
|
@ -43,7 +43,7 @@ namespace Kyoo.Controllers
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (library.Providers.Contains(provider.Name))
|
if (library.Providers.Contains(provider.Name))
|
||||||
ret.AddRange(await providerCall(provider));
|
ret.AddRange(await providerCall(provider) ?? new List<T>());
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Console.Error.WriteLine($"The provider {provider.Name} coudln't work for {what}. Exception: {ex.Message}");
|
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)
|
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 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.SeasonNumber = season.SeasonNumber == -1 ? seasonNumber : season.SeasonNumber;
|
||||||
season.Title ??= $"Season {season.SeasonNumber}";
|
season.Title ??= $"Season {season.SeasonNumber}";
|
||||||
return season;
|
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)
|
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 episode = await GetMetadata(provider => provider.GetEpisode(show, seasonNumber, episodeNumber, absoluteNumber), library, "an episode");
|
||||||
episode.ShowID = show.ID;
|
episode.Show = show;
|
||||||
episode.Path = episodePath;
|
episode.Path = episodePath;
|
||||||
episode.SeasonNumber = episode.SeasonNumber != -1 ? episode.SeasonNumber : seasonNumber;
|
episode.SeasonNumber = episode.SeasonNumber != -1 ? episode.SeasonNumber : seasonNumber;
|
||||||
episode.EpisodeNumber = episode.EpisodeNumber != -1 ? episode.EpisodeNumber : episodeNumber;
|
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)
|
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());
|
people = await _thumbnailsManager.Validate(people.ToList());
|
||||||
return people;
|
return people;
|
||||||
}
|
}
|
||||||
|
@ -41,8 +41,6 @@
|
|||||||
<Content Remove="$(SpaRoot)**" />
|
<Content Remove="$(SpaRoot)**" />
|
||||||
<None Remove="$(SpaRoot)**" />
|
<None Remove="$(SpaRoot)**" />
|
||||||
<None Include="$(SpaRoot)**" Exclude="$(SpaRoot)node_modules\**" />
|
<None Include="$(SpaRoot)**" Exclude="$(SpaRoot)node_modules\**" />
|
||||||
<None Remove="Controllers\MetadataProvider\**" />
|
|
||||||
<Content Remove="Controllers\MetadataProvider\**" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@ -58,16 +56,11 @@
|
|||||||
<EmbeddedResource Include="kyoo.sh">
|
<EmbeddedResource Include="kyoo.sh">
|
||||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Remove="Controllers\MetadataProvider\**" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\Kyoo.Common\Kyoo.Common.csproj" />
|
<ProjectReference Include="..\Kyoo.Common\Kyoo.Common.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<Compile Remove="Controllers\MetadataProvider\**" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<Target Name="DebugEnsureNodeEnv" BeforeTargets="Build" Condition=" '$(Configuration)' == 'Debug' And !Exists('$(SpaRoot)node_modules') ">
|
<Target Name="DebugEnsureNodeEnv" BeforeTargets="Build" Condition=" '$(Configuration)' == 'Debug' And !Exists('$(SpaRoot)node_modules') ">
|
||||||
<!-- Ensure Node.js is installed -->
|
<!-- Ensure Node.js is installed -->
|
||||||
|
Loading…
x
Reference in New Issue
Block a user