mirror of
https://github.com/Radarr/Radarr.git
synced 2026-04-26 22:46:53 -04:00
Fixed: Improved special episode parsing for multiple matching titles
This commit is contained in:
@@ -357,9 +357,12 @@ namespace NzbDrone.Core.Parser
|
||||
|
||||
public static string NormalizeEpisodeTitle(string title)
|
||||
{
|
||||
return SpecialEpisodeWordRegex.Replace(title, String.Empty)
|
||||
.Trim()
|
||||
.ToLower();
|
||||
title = SpecialEpisodeWordRegex.Replace(title, String.Empty);
|
||||
title = PunctuationRegex.Replace(title, " ");
|
||||
title = DuplicateSpacesRegex.Replace(title, " ");
|
||||
|
||||
return title.Trim()
|
||||
.ToLower();
|
||||
}
|
||||
|
||||
public static string NormalizeTitle(string title)
|
||||
|
||||
@@ -17,7 +17,7 @@ namespace NzbDrone.Core.Tv
|
||||
List<Episode> GetEpisodes(IEnumerable<Int32> ids);
|
||||
Episode FindEpisode(int seriesId, int seasonNumber, int episodeNumber);
|
||||
Episode FindEpisode(int seriesId, int absoluteEpisodeNumber);
|
||||
Episode FindEpisodeByTitle(int seriesId, int seasonNumber, string episodeTitle);
|
||||
Episode FindEpisodeByTitle(int seriesId, int seasonNumber, string releaseTitle);
|
||||
List<Episode> FindEpisodesBySceneNumbering(int seriesId, int seasonNumber, int episodeNumber);
|
||||
Episode FindEpisodeBySceneNumbering(int seriesId, int sceneAbsoluteEpisodeNumber);
|
||||
Episode GetEpisode(int seriesId, String date);
|
||||
@@ -103,19 +103,25 @@ namespace NzbDrone.Core.Tv
|
||||
return _episodeRepository.GetEpisodes(seriesId, seasonNumber);
|
||||
}
|
||||
|
||||
public Episode FindEpisodeByTitle(int seriesId, int seasonNumber, string episodeTitle)
|
||||
public Episode FindEpisodeByTitle(int seriesId, int seasonNumber, string releaseTitle)
|
||||
{
|
||||
// TODO: can replace this search mechanism with something smarter/faster/better
|
||||
var search = Parser.Parser.NormalizeEpisodeTitle(episodeTitle).Replace(".", " ");
|
||||
var normalizedReleaseTitle = Parser.Parser.NormalizeEpisodeTitle(releaseTitle).Replace(".", " ");
|
||||
var episodes = _episodeRepository.GetEpisodes(seriesId, seasonNumber);
|
||||
|
||||
return _episodeRepository.GetEpisodes(seriesId, seasonNumber)
|
||||
.FirstOrDefault(e =>
|
||||
{
|
||||
// normalize episode title
|
||||
var title = Parser.Parser.NormalizeEpisodeTitle(e.Title);
|
||||
// find episode title within search string
|
||||
return (title.Length > 0) && search.Contains(title);
|
||||
});
|
||||
var query = episodes.Select(
|
||||
episode => new
|
||||
{
|
||||
Position = normalizedReleaseTitle.IndexOf(Parser.Parser.NormalizeEpisodeTitle(episode.Title), StringComparison.CurrentCultureIgnoreCase),
|
||||
Length = Parser.Parser.NormalizeEpisodeTitle(episode.Title).Length,
|
||||
Episode = episode
|
||||
})
|
||||
.Where(e => e.Episode.Title.Length > 0 && e.Position >= 0)
|
||||
.OrderBy(e => e.Position)
|
||||
.ThenByDescending(e => e.Length)
|
||||
.ToList();
|
||||
|
||||
return query.First().Episode;
|
||||
}
|
||||
|
||||
public List<Episode> EpisodesWithFiles(int seriesId)
|
||||
|
||||
Reference in New Issue
Block a user