mirror of https://github.com/Sonarr/Sonarr
ParseSeriesName will now return normalized version of the title if it doesn't match any predefined
PostDownload provider will skip subfolders that are known series folders.
This commit is contained in:
parent
f5a8c3de87
commit
e269494ff8
|
@ -115,7 +115,7 @@
|
||||||
<Compile Include="ProviderTests\DiskProviderTests\ExtractArchiveFixture.cs" />
|
<Compile Include="ProviderTests\DiskProviderTests\ExtractArchiveFixture.cs" />
|
||||||
<Compile Include="ProviderTests\PostDownloadProviderTests\PostDownloadProviderFixture.cs" />
|
<Compile Include="ProviderTests\PostDownloadProviderTests\PostDownloadProviderFixture.cs" />
|
||||||
<Compile Include="JobTests\SearchJobTest.cs" />
|
<Compile Include="JobTests\SearchJobTest.cs" />
|
||||||
<Compile Include="ProviderTests\PostDownloadProviderTests\ProcessDownloadFixture.cs" />
|
<Compile Include="ProviderTests\PostDownloadProviderTests\ProcessDownloadProviderFixture.cs" />
|
||||||
<Compile Include="ProviderTests\JobProviderTests\TestJobs.cs" />
|
<Compile Include="ProviderTests\JobProviderTests\TestJobs.cs" />
|
||||||
<Compile Include="JobTests\AppUpdateJobFixture.cs" />
|
<Compile Include="JobTests\AppUpdateJobFixture.cs" />
|
||||||
<Compile Include="ProviderTests\UpdateProviderTests\GetUpdateLogFixture.cs" />
|
<Compile Include="ProviderTests\UpdateProviderTests\GetUpdateLogFixture.cs" />
|
||||||
|
|
|
@ -288,9 +288,10 @@ namespace NzbDrone.Core.Test
|
||||||
|
|
||||||
[TestCase("Chuck - 4x05 - Title", "Chuck")]
|
[TestCase("Chuck - 4x05 - Title", "Chuck")]
|
||||||
[TestCase("Law & Order - 4x05 - Title", "laworder")]
|
[TestCase("Law & Order - 4x05 - Title", "laworder")]
|
||||||
[TestCase("This Isn't a Valid Post", "")]
|
[TestCase("Bad Format", "badformat")]
|
||||||
[TestCase("Mad Men - Season 1 [Bluray720p]", "madmen")]
|
[TestCase("Mad Men - Season 1 [Bluray720p]", "madmen")]
|
||||||
[TestCase("Mad Men - Season 1 [Bluray1080p]", "madmen")]
|
[TestCase("Mad Men - Season 1 [Bluray1080p]", "madmen")]
|
||||||
|
[TestCase("The Daily Show With Jon Stewart -", "dailyshowwithjonstewart")]
|
||||||
public void parse_series_name(string postTitle, string title)
|
public void parse_series_name(string postTitle, string title)
|
||||||
{
|
{
|
||||||
var result = Parser.ParseSeriesName(postTitle);
|
var result = Parser.ParseSeriesName(postTitle);
|
||||||
|
|
|
@ -10,7 +10,6 @@ using NUnit.Framework;
|
||||||
using NzbDrone.Common;
|
using NzbDrone.Common;
|
||||||
using NzbDrone.Core.Model;
|
using NzbDrone.Core.Model;
|
||||||
using NzbDrone.Core.Providers;
|
using NzbDrone.Core.Providers;
|
||||||
using NzbDrone.Core.Providers.Core;
|
|
||||||
using NzbDrone.Core.Repository;
|
using NzbDrone.Core.Repository;
|
||||||
using NzbDrone.Core.Test.Framework;
|
using NzbDrone.Core.Test.Framework;
|
||||||
using NzbDrone.Test.Common;
|
using NzbDrone.Test.Common;
|
||||||
|
@ -19,7 +18,7 @@ using NzbDrone.Test.Common.AutoMoq;
|
||||||
namespace NzbDrone.Core.Test.ProviderTests.PostDownloadProviderTests
|
namespace NzbDrone.Core.Test.ProviderTests.PostDownloadProviderTests
|
||||||
{
|
{
|
||||||
[TestFixture]
|
[TestFixture]
|
||||||
public class ProcessDownloadFixture : CoreTest
|
public class ProcessDownloadProviderFixture : CoreTest
|
||||||
{
|
{
|
||||||
[Test]
|
[Test]
|
||||||
public void should_skip_if_folder_is_tagged_and_too_fresh()
|
public void should_skip_if_folder_is_tagged_and_too_fresh()
|
||||||
|
@ -245,5 +244,44 @@ namespace NzbDrone.Core.Test.ProviderTests.PostDownloadProviderTests
|
||||||
Times.Exactly(fakeEpisodeFiles.Count));
|
Times.Exactly(fakeEpisodeFiles.Count));
|
||||||
mocker.VerifyAllMocks();
|
mocker.VerifyAllMocks();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void ProcessDropFolder_should_only_process_folders_that_arent_known_series_folders()
|
||||||
|
{
|
||||||
|
var subFolders = new List<string>
|
||||||
|
{
|
||||||
|
@"c:\drop\episode1",
|
||||||
|
@"c:\drop\episode2",
|
||||||
|
@"c:\drop\episode3",
|
||||||
|
@"c:\drop\episode4"
|
||||||
|
};
|
||||||
|
|
||||||
|
Mocker.GetMock<DiskProvider>()
|
||||||
|
.Setup(c => c.GetDirectories(It.IsAny<String>()))
|
||||||
|
.Returns(subFolders);
|
||||||
|
|
||||||
|
Mocker.GetMock<SeriesProvider>()
|
||||||
|
.Setup(c => c.SeriesPathExists(subFolders[1]))
|
||||||
|
.Returns(true);
|
||||||
|
|
||||||
|
Mocker.GetMock<SeriesProvider>()
|
||||||
|
.Setup(c => c.FindSeries(It.IsAny<String>()))
|
||||||
|
.Returns(new Series());
|
||||||
|
|
||||||
|
Mocker.GetMock<DiskScanProvider>()
|
||||||
|
.Setup(c => c.Scan(It.IsAny<Series>(), It.IsAny<String>()))
|
||||||
|
.Returns(new List<EpisodeFile>());
|
||||||
|
|
||||||
|
//Act
|
||||||
|
Mocker.Resolve<PostDownloadProvider>().ProcessDropFolder(@"C:\drop\");
|
||||||
|
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
Mocker.GetMock<DiskScanProvider>().Verify(c => c.Scan(It.IsAny<Series>(), subFolders[0]), Times.Once());
|
||||||
|
Mocker.GetMock<DiskScanProvider>().Verify(c => c.Scan(It.IsAny<Series>(), subFolders[1]), Times.Never());
|
||||||
|
Mocker.GetMock<DiskScanProvider>().Verify(c => c.Scan(It.IsAny<Series>(), subFolders[2]), Times.Once());
|
||||||
|
Mocker.GetMock<DiskScanProvider>().Verify(c => c.Scan(It.IsAny<Series>(), subFolders[3]), Times.Once());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -185,12 +185,7 @@ namespace NzbDrone.Core
|
||||||
return parsedEpisode;
|
return parsedEpisode;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
public static string ParseSeriesName(string title)
|
||||||
/// Parses a post title to find the series that relates to it
|
|
||||||
/// </summary>
|
|
||||||
/// <param name = "title">Title of the report</param>
|
|
||||||
/// <returns>Normalized Series Name</returns>
|
|
||||||
internal static string ParseSeriesName(string title)
|
|
||||||
{
|
{
|
||||||
Logger.Trace("Parsing string '{0}'", title);
|
Logger.Trace("Parsing string '{0}'", title);
|
||||||
|
|
||||||
|
@ -207,7 +202,7 @@ namespace NzbDrone.Core
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return String.Empty;
|
return NormalizeTitle(title);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static Quality ParseQuality(string name)
|
internal static Quality ParseQuality(string name)
|
||||||
|
|
|
@ -35,9 +35,12 @@ namespace NzbDrone.Core.Providers
|
||||||
foreach (var subfolder in _diskProvider.GetDirectories(dropFolder))
|
foreach (var subfolder in _diskProvider.GetDirectories(dropFolder))
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
{
|
||||||
|
if (!_seriesProvider.SeriesPathExists(subfolder))
|
||||||
{
|
{
|
||||||
ProcessDownload(new DirectoryInfo(subfolder));
|
ProcessDownload(new DirectoryInfo(subfolder));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
Logger.ErrorException("An error has occurred while importing folder" + subfolder, e);
|
Logger.ErrorException("An error has occurred while importing folder" + subfolder, e);
|
||||||
|
|
|
@ -3,6 +3,7 @@ using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using NLog;
|
using NLog;
|
||||||
|
using NzbDrone.Common;
|
||||||
using NzbDrone.Core.Providers.Core;
|
using NzbDrone.Core.Providers.Core;
|
||||||
using NzbDrone.Core.Repository;
|
using NzbDrone.Core.Repository;
|
||||||
using NzbDrone.Core.Repository.Quality;
|
using NzbDrone.Core.Repository.Quality;
|
||||||
|
@ -176,12 +177,11 @@ namespace NzbDrone.Core.Providers
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual bool SeriesPathExists(string cleanPath)
|
public virtual bool SeriesPathExists(string path)
|
||||||
{
|
{
|
||||||
if (GetAllSeries().Any(s => s.Path.ToLower() == cleanPath.ToLower()))
|
var normilizedPath = path.NormalizePath();
|
||||||
return true;
|
|
||||||
|
|
||||||
return false;
|
return GetAllSeries().Any(s => s.Path.NormalizePath() == normilizedPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual List<Series> SearchForSeries(string title)
|
public virtual List<Series> SearchForSeries(string title)
|
||||||
|
|
Loading…
Reference in New Issue