1
0
mirror of https://github.com/Sonarr/Sonarr.git synced 2026-03-05 13:20:20 -05:00

New: Parse series if year is added to known alias

Closes #8408
This commit is contained in:
Mark McDowall
2026-02-14 19:32:35 -08:00
parent 5bac016f0c
commit fcfdac99d5
2 changed files with 75 additions and 0 deletions

View File

@@ -293,5 +293,55 @@ namespace NzbDrone.Core.Test.ParserTests.ParsingServiceTests
result.MappedSeasonNumber.Should().Be(sceneMapping.SceneSeasonNumber);
}
[Test]
public void should_use_tvdbid_matching_when_alias_without_year_is_found()
{
var alias = "Series Alias";
_parsedEpisodeInfo.SeriesTitle = $"{alias} {_series.Year}";
_parsedEpisodeInfo.SeriesTitleInfo.TitleWithoutYear = alias;
_parsedEpisodeInfo.SeriesTitleInfo.Year = _series.Year;
Mocker.GetMock<ISceneMappingService>()
.Setup(s => s.FindTvdbId(alias, It.IsAny<string>(), It.IsAny<int>()))
.Returns(_series.TvdbId);
Mocker.GetMock<ISeriesService>()
.Setup(s => s.FindByTvdbId(_series.Id))
.Returns(_series);
var result = Subject.Map(_parsedEpisodeInfo, _series.TvdbId, _series.TvRageId, _series.ImdbId, null);
result.Series.Should().Be(_series);
Mocker.GetMock<ISeriesService>()
.Verify(v => v.FindByTvdbId(It.IsAny<int>()), Times.Once());
}
[Test]
public void should_not_use_tvdbid_matching_when_alias_without_year_is_found_with_wrong_year()
{
var alias = "Series Alias";
_parsedEpisodeInfo.SeriesTitle = $"{alias} {_series.Year}";
_parsedEpisodeInfo.SeriesTitleInfo.TitleWithoutYear = alias;
_parsedEpisodeInfo.SeriesTitleInfo.Year = _series.Year + 1;
Mocker.GetMock<ISceneMappingService>()
.Setup(s => s.FindTvdbId(alias, It.IsAny<string>(), It.IsAny<int>()))
.Returns(_series.TvdbId);
Mocker.GetMock<ISeriesService>()
.Setup(s => s.FindByTvdbId(_series.Id))
.Returns(_series);
var result = Subject.Map(_parsedEpisodeInfo, 0, 0, "", null);
result.Series.Should().BeNull();
Mocker.GetMock<ISeriesService>()
.Verify(v => v.FindByTvdbId(It.IsAny<int>()), Times.Once());
}
}
}

View File

@@ -116,6 +116,25 @@ namespace NzbDrone.Core.Parser
return foundSeries;
}
private Series GetSeriesAliasTitleAndYear(ParsedEpisodeInfo parsedEpisodeInfo)
{
var year = parsedEpisodeInfo.SeriesTitleInfo.Year;
var titleWithoutyear = parsedEpisodeInfo.SeriesTitleInfo.TitleWithoutYear;
var tvdbId = _sceneMappingService.FindTvdbId(titleWithoutyear, parsedEpisodeInfo.ReleaseTitle, parsedEpisodeInfo.SeasonNumber);
if (tvdbId.HasValue)
{
var series = _seriesService.FindByTvdbId(tvdbId.Value);
if (series.Year == year)
{
return series;
}
}
return null;
}
public RemoteEpisode Map(ParsedEpisodeInfo parsedEpisodeInfo, int tvdbId, int tvRageId, string imdbId, SearchCriteriaBase searchCriteria = null)
{
return Map(parsedEpisodeInfo, tvdbId, tvRageId, imdbId, null, searchCriteria);
@@ -449,6 +468,12 @@ namespace NzbDrone.Core.Parser
{
series = _seriesService.FindByTitle(parsedEpisodeInfo.SeriesTitleInfo.TitleWithoutYear, parsedEpisodeInfo.SeriesTitleInfo.Year);
matchType = SeriesMatchType.Title;
if (series == null)
{
series = GetSeriesAliasTitleAndYear(parsedEpisodeInfo);
matchType = SeriesMatchType.Alias;
}
}
if (series == null && tvdbId > 0)