1
0
mirror of https://github.com/Radarr/Radarr.git synced 2026-04-24 22:35:49 -04:00

Fixed: Extrapolate scene numbering but won't auto import.

This commit is contained in:
Taloth Saldono
2015-07-04 20:48:26 +02:00
parent 23bd9440b3
commit 6d046a8df8
8 changed files with 240 additions and 4 deletions
@@ -52,6 +52,7 @@ namespace NzbDrone.Core.DataAugmentation.Xem
episode.SceneAbsoluteEpisodeNumber = null;
episode.SceneSeasonNumber = null;
episode.SceneEpisodeNumber = null;
episode.UnverifiedSceneNumbering = false;
}
foreach (var mapping in mappings)
@@ -71,6 +72,11 @@ namespace NzbDrone.Core.DataAugmentation.Xem
episode.SceneEpisodeNumber = mapping.Scene.Episode;
}
if (episodes.Any(v => v.SceneEpisodeNumber.HasValue && v.SceneSeasonNumber != 0))
{
ExtrapolateMappings(series, episodes, mappings);
}
_episodeService.UpdateEpisodes(episodes);
series.UseSceneNumbering = mappings.Any();
_seriesService.UpdateSeries(series);
@@ -83,6 +89,70 @@ namespace NzbDrone.Core.DataAugmentation.Xem
}
}
private void ExtrapolateMappings(Series series, List<Episode> episodes, List<Model.XemSceneTvdbMapping> mappings)
{
var mappedEpisodes = episodes.Where(v => v.SeasonNumber != 0 && v.SceneEpisodeNumber.HasValue).ToList();
var mappedSeasons = new HashSet<int>(mappedEpisodes.Select(v => v.SeasonNumber).Distinct());
var lastSceneSeason = mappings.Select(v => v.Scene.Season).Max();
var lastTvdbSeason = mappings.Select(v => v.Tvdb.Season).Max();
// Mark all episodes not on the xem as unverified.
foreach (var episode in episodes)
{
if (episode.SeasonNumber == 0) continue;
if (episode.SceneEpisodeNumber.HasValue) continue;
if (mappedSeasons.Contains(episode.SeasonNumber))
{
episode.UnverifiedSceneNumbering = true;
}
if (lastSceneSeason != lastTvdbSeason && episode.SeasonNumber > lastTvdbSeason)
{
episode.UnverifiedSceneNumbering = true;
}
}
foreach (var episode in episodes)
{
if (episode.SeasonNumber == 0) continue;
if (episode.SceneEpisodeNumber.HasValue) continue;
if (episode.SeasonNumber < lastTvdbSeason) continue;
if (!episode.UnverifiedSceneNumbering) continue;
var seasonMappings = mappings.Where(v => v.Tvdb.Season == episode.SeasonNumber).ToList();
if (seasonMappings.Any(v => v.Tvdb.Episode >= episode.EpisodeNumber))
{
continue;
}
if (seasonMappings.Any())
{
var lastEpisodeMapping = seasonMappings.OrderBy(v => v.Tvdb.Episode).Last();
var lastSceneSeasonMapping = mappings.Where(v => v.Scene.Season == lastEpisodeMapping.Scene.Season).OrderBy(v => v.Scene.Episode).Last();
if (lastSceneSeasonMapping.Tvdb.Season == 0)
{
continue;
}
var offset = episode.EpisodeNumber - lastEpisodeMapping.Tvdb.Episode;
episode.SceneSeasonNumber = lastEpisodeMapping.Scene.Season;
episode.SceneEpisodeNumber = lastEpisodeMapping.Scene.Episode + offset;
episode.SceneAbsoluteEpisodeNumber = lastEpisodeMapping.Scene.Absolute + offset;
}
else if (lastTvdbSeason != lastSceneSeason)
{
var offset = episode.SeasonNumber - lastTvdbSeason;
episode.SceneSeasonNumber = lastSceneSeason + offset;
episode.SceneEpisodeNumber = episode.EpisodeNumber;
// TODO: SceneAbsoluteEpisodeNumber.
}
}
}
private void RefreshCache()
{
var ids = _xemProxy.GetXemSeriesIds();