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.
pull/4/head
kay.one 13 years ago
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…
Cancel
Save