1
0
mirror of https://github.com/Sonarr/Sonarr.git synced 2024-12-14 11:23:42 +02:00

Fixed: Parsing release group from file rather than folder in case of season packs

This commit is contained in:
Taloth Saldono 2020-04-27 19:08:14 +02:00
parent d4bcf28d08
commit b4405b0600
2 changed files with 146 additions and 3 deletions

View File

@ -0,0 +1,122 @@

using System.Collections.Generic;
using FizzWare.NBuilder;
using FluentAssertions;
using Moq;
using NUnit.Framework;
using NzbDrone.Core.MediaFiles.EpisodeImport.Aggregation.Aggregators;
using NzbDrone.Core.Parser.Model;
using NzbDrone.Core.Test.Framework;
using NzbDrone.Core.Tv;
using NzbDrone.Test.Common;
namespace NzbDrone.Core.Test.MediaFiles.EpisodeImport.Aggregation.Aggregators
{
[TestFixture]
public class AggregateReleaseGroupFixture : CoreTest<AggregateReleaseGroup>
{
private Series _series;
[SetUp]
public void Setup()
{
_series = Builder<Series>.CreateNew().Build();
}
[Test]
public void should_not_use_downloadclient_for_full_season()
{
var fileEpisodeInfo = Parser.Parser.ParseTitle("Series.Title.S01E01.WEB-DL-Wizzy");
var downloadClientEpisodeInfo = Parser.Parser.ParseTitle("Series.Title.S01.WEB-DL-Viva");
var localEpisode = new LocalEpisode
{
FileEpisodeInfo = fileEpisodeInfo,
DownloadClientEpisodeInfo = downloadClientEpisodeInfo,
Path = @"C:\Test\Unsorted TV\Series.Title.S01\Series.Title.S01E01.WEB-DL.mkv".AsOsAgnostic(),
Series = _series
};
Subject.Aggregate(localEpisode, false);
localEpisode.ReleaseGroup.Should().Be("Wizzy");
}
[Test]
public void should_not_use_folder_for_full_season()
{
var fileEpisodeInfo = Parser.Parser.ParseTitle("Series.Title.S01E01.WEB-DL-Wizzy");
var folderEpisodeInfo = Parser.Parser.ParseTitle("Series.Title.S01.WEB-DL-Drone");
var localEpisode = new LocalEpisode
{
FileEpisodeInfo = fileEpisodeInfo,
FolderEpisodeInfo = folderEpisodeInfo,
Path = @"C:\Test\Unsorted TV\Series.Title.S01\Series.Title.S01E01.WEB-DL.mkv".AsOsAgnostic(),
Series = _series
};
Subject.Aggregate(localEpisode, false);
localEpisode.ReleaseGroup.Should().Be("Wizzy");
}
[Test]
public void should_prefer_downloadclient()
{
var fileEpisodeInfo = Parser.Parser.ParseTitle("Series.Title.S01E01.WEB-DL-Wizzy");
var folderEpisodeInfo = Parser.Parser.ParseTitle("Series.Title.S01E01.WEB-DL-Drone");
var downloadClientEpisodeInfo = Parser.Parser.ParseTitle("Series.Title.S01E01.WEB-DL-Viva");
var localEpisode = new LocalEpisode
{
FileEpisodeInfo = fileEpisodeInfo,
FolderEpisodeInfo = folderEpisodeInfo,
DownloadClientEpisodeInfo = downloadClientEpisodeInfo,
Path = @"C:\Test\Unsorted TV\Series.Title.S01\Series.Title.S01E01.WEB-DL.mkv".AsOsAgnostic(),
Series = _series
};
Subject.Aggregate(localEpisode, false);
localEpisode.ReleaseGroup.Should().Be("Viva");
}
[Test]
public void should_prefer_folder()
{
var fileEpisodeInfo = Parser.Parser.ParseTitle("Series.Title.S01E01.WEB-DL-Wizzy");
var folderEpisodeInfo = Parser.Parser.ParseTitle("Series.Title.S01E01.WEB-DL-Drone");
var downloadClientEpisodeInfo = Parser.Parser.ParseTitle("Series.Title.S01E01.WEB-DL");
var localEpisode = new LocalEpisode
{
FileEpisodeInfo = fileEpisodeInfo,
FolderEpisodeInfo = folderEpisodeInfo,
DownloadClientEpisodeInfo = downloadClientEpisodeInfo,
Path = @"C:\Test\Unsorted TV\Series.Title.S01\Series.Title.S01E01.WEB-DL.mkv".AsOsAgnostic(),
Series = _series
};
Subject.Aggregate(localEpisode, false);
localEpisode.ReleaseGroup.Should().Be("Drone");
}
[Test]
public void should_fallback_to_file()
{
var fileEpisodeInfo = Parser.Parser.ParseTitle("Series.Title.S01E01.WEB-DL-Wizzy");
var folderEpisodeInfo = Parser.Parser.ParseTitle("Series.Title.S01E01.WEB-DL");
var downloadClientEpisodeInfo = Parser.Parser.ParseTitle("Series.Title.S01E01.WEB-DL");
var localEpisode = new LocalEpisode
{
FileEpisodeInfo = fileEpisodeInfo,
FolderEpisodeInfo = folderEpisodeInfo,
DownloadClientEpisodeInfo = downloadClientEpisodeInfo,
Path = @"C:\Test\Unsorted TV\Series.Title.S01\Series.Title.S01E01.mkv".AsOsAgnostic(),
Series = _series
};
Subject.Aggregate(localEpisode, false);
localEpisode.ReleaseGroup.Should().Be("Wizzy");
}
}
}

View File

@ -7,21 +7,42 @@ public class AggregateReleaseGroup : IAggregateLocalEpisode
{
public LocalEpisode Aggregate(LocalEpisode localEpisode, bool otherFiles)
{
var releaseGroup = localEpisode.DownloadClientEpisodeInfo?.ReleaseGroup;
// Prefer ReleaseGroup from DownloadClient/Folder if they're not a season pack
var releaseGroup = GetReleaseGroup(localEpisode.DownloadClientEpisodeInfo, true);
if (releaseGroup.IsNullOrWhiteSpace())
{
releaseGroup = localEpisode.FolderEpisodeInfo?.ReleaseGroup;
releaseGroup = GetReleaseGroup(localEpisode.FolderEpisodeInfo, true);
}
if (releaseGroup.IsNullOrWhiteSpace())
{
releaseGroup = localEpisode.FileEpisodeInfo?.ReleaseGroup;
releaseGroup = GetReleaseGroup(localEpisode.FileEpisodeInfo, false);
}
if (releaseGroup.IsNullOrWhiteSpace())
{
releaseGroup = GetReleaseGroup(localEpisode.DownloadClientEpisodeInfo, false);
}
if (releaseGroup.IsNullOrWhiteSpace())
{
releaseGroup = GetReleaseGroup(localEpisode.FolderEpisodeInfo, false);
}
localEpisode.ReleaseGroup = releaseGroup;
return localEpisode;
}
private string GetReleaseGroup(ParsedEpisodeInfo episodeInfo, bool skipFullSeason)
{
if (episodeInfo == null || episodeInfo.FullSeason && skipFullSeason)
{
return null;
}
return episodeInfo.ReleaseGroup;
}
}
}