diff --git a/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj b/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj
index c71240b78..2d9d28c4c 100644
--- a/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj
+++ b/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj
@@ -91,7 +91,6 @@
-
diff --git a/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTest.cs b/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTest.cs
index 5c90daa12..692dc4aee 100644
--- a/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTest.cs
+++ b/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTest.cs
@@ -15,7 +15,7 @@ namespace NzbDrone.Core.Test.ProviderTests
public class DiskScanProviderTest : TestBase
{
[Test]
- public void scan_series_should_update_last_scan_date()
+ public void scan_series_should_update_the_last_scan_date()
{
var mocker = new AutoMoqer();
@@ -26,6 +26,8 @@ namespace NzbDrone.Core.Test.ProviderTests
.Setup(c => c.GetEpisodeBySeries(It.IsAny()))
.Returns(new List { new Episode() });
+ mocker.GetMock().Setup(c => c.FolderExists(It.IsAny())).Returns(true);
+
mocker.GetMock()
.Setup(c => c.GetSeriesFiles(It.IsAny()))
diff --git a/NzbDrone.Core.Test/ProviderTests/MediaFileProviderTests.cs b/NzbDrone.Core.Test/ProviderTests/MediaFileProviderTests.cs
index 91f12c5bc..f17ad78f6 100644
--- a/NzbDrone.Core.Test/ProviderTests/MediaFileProviderTests.cs
+++ b/NzbDrone.Core.Test/ProviderTests/MediaFileProviderTests.cs
@@ -82,10 +82,14 @@ namespace NzbDrone.Core.Test.ProviderTests
mocker.GetMock()
.Setup(e => e.RepairLinks()).Returns(0);
+
mocker.GetMock()
.Setup(e => e.DeleteOrphaned()).Returns(0);
-
+ mocker.GetMock()
+ .Setup(c => c.FolderExists(It.IsAny()))
+ .Returns(true);
+
var series = Builder.CreateNew()
.With(s => s.SeriesId = 12).Build();
@@ -127,7 +131,7 @@ namespace NzbDrone.Core.Test.ProviderTests
result.Should().HaveSameCount(episodes);
result.Should().OnlyContain(e => e.EpisodeFileId == 0);
removedLinks.Should().Be(10);
- }
+ }
[Test]
public void DeleteOrphanedEpisodeFiles()
diff --git a/NzbDrone.Core.Test/ProviderTests/PostDownloadProviderTest.cs b/NzbDrone.Core.Test/ProviderTests/PostDownloadProviderTest.cs
index 01d7ff6a6..419933984 100644
--- a/NzbDrone.Core.Test/ProviderTests/PostDownloadProviderTest.cs
+++ b/NzbDrone.Core.Test/ProviderTests/PostDownloadProviderTest.cs
@@ -54,7 +54,7 @@ namespace NzbDrone.Core.Test.ProviderTests
s => s.SetPostDownloadStatus(expectedEpisodesNumbers, postDownloadStatus)).Verifiable();
//Act
- mocker.Resolve().ProcessFailedOrUnpackingDownload(new DirectoryInfo(Path.Combine(Directory.GetCurrentDirectory(), folderName)),postDownloadStatus);
+ mocker.Resolve().ProcessFailedOrUnpackingDownload(new DirectoryInfo(Path.Combine(Directory.GetCurrentDirectory(), folderName)), postDownloadStatus);
//Assert
mocker.GetMock().Verify(c => c.SetPostDownloadStatus(expectedEpisodesNumbers, postDownloadStatus), Times.Once());
@@ -116,26 +116,6 @@ namespace NzbDrone.Core.Test.ProviderTests
mocker.VerifyAllMocks();
}
- [TestCase(PostDownloadStatusType.Unpacking, 8)]
- [TestCase(PostDownloadStatusType.Failed, 8)]
- [TestCase(PostDownloadStatusType.InvalidSeries, 24)]
- [TestCase(PostDownloadStatusType.ParseError, 21)]
- [TestCase(PostDownloadStatusType.Unknown, 10)]
- [TestCase(PostDownloadStatusType.Processed, 0)]
- [TestCase(PostDownloadStatusType.InvalidEpisode, 25)]
- [TestCase(PostDownloadStatusType.NoError, 0)]
- public void GetPrefixLength(PostDownloadStatusType postDownloadStatus, int expected)
- {
- //Setup
- var mocker = new AutoMoqer();
-
- //Act
- var result = mocker.Resolve().GetPrefixLength(postDownloadStatus);
-
- //Assert
- result.Should().Be(expected);
- }
-
[Test]
public void ProcessDownload_InvalidSeries()
{
@@ -346,5 +326,14 @@ namespace NzbDrone.Core.Test.ProviderTests
//Assert
result.Should().Be(expectedResult);
}
+
+ [TestCase("_NzbDrone_ParseError_The Office (US) - S01E01 - Episode Title", "The Office (US) - S01E01 - Episode Title")]
+ [TestCase("_Status_The Office (US) - S01E01 - Episode Title", "The Office (US) - S01E01 - Episode Title")]
+ [TestCase("The Office (US) - S01E01 - Episode Title", "The Office (US) - S01E01 - Episode Title")]
+ [TestCase("_The Office (US) - S01E01 - Episode Title", "_The Office (US) - S01E01 - Episode Title")]
+ public void RemoveStatus_should_remove_status_string_from_folder_name(string folderName, string cleanFolderName)
+ {
+ PostDownloadProvider.RemoveStatusFromFolderName(folderName).Should().Be(cleanFolderName);
+ }
}
}
\ No newline at end of file
diff --git a/NzbDrone.Core/Model/PostDownloadStatusType.cs b/NzbDrone.Core/Model/PostDownloadStatusType.cs
index 3a5cf2bc2..3094b7772 100644
--- a/NzbDrone.Core/Model/PostDownloadStatusType.cs
+++ b/NzbDrone.Core/Model/PostDownloadStatusType.cs
@@ -2,44 +2,14 @@
{
public enum PostDownloadStatusType
{
- ///
- /// Unknown (Default)
- ///
- Unknown = 0,
- ///
- /// Unpacking
- ///
+ Unknown = 0,
Unpacking = 1,
-
- ///
- /// Failed
- ///
Failed = 2,
-
- ///
- /// Processed
- ///
Processed = 3,
-
- ///
- /// InvalidSeries
- ///
InvalidSeries = 4,
-
- ///
- /// ParseError
- ///
ParseError = 5,
-
- ///
- /// InvalidEpisode
- ///
InvalidEpisode = 6,
-
- ///
- /// NoError
- ///
NoError = 7,
}
}
\ No newline at end of file
diff --git a/NzbDrone.Core/Parser.cs b/NzbDrone.Core/Parser.cs
index a5e37785a..64cc16c58 100644
--- a/NzbDrone.Core/Parser.cs
+++ b/NzbDrone.Core/Parser.cs
@@ -394,17 +394,6 @@ namespace NzbDrone.Core
return info.FullName.Trim('/', '\\', ' ');
}
- public static string UppercaseFirst(string s)
- {
- // Check for empty string.
- if (string.IsNullOrEmpty(s))
- {
- return string.Empty;
- }
- // Return char and concat substring.
- return char.ToUpper(s[0]) + s.Substring(1);
- }
-
public static long GetReportSize(string sizeString)
{
var match = ReportSizeRegex.Matches(sizeString);
diff --git a/NzbDrone.Core/Providers/Jobs/PostDownloadScanJob.cs b/NzbDrone.Core/Providers/Jobs/PostDownloadScanJob.cs
index 741b79e89..47d85f9da 100644
--- a/NzbDrone.Core/Providers/Jobs/PostDownloadScanJob.cs
+++ b/NzbDrone.Core/Providers/Jobs/PostDownloadScanJob.cs
@@ -1,10 +1,5 @@
-using System;
-using System.IO;
-using Ninject;
-using NLog;
-using NzbDrone.Core.Model;
+using Ninject;
using NzbDrone.Core.Model.Notification;
-using NzbDrone.Core.Providers.Core;
namespace NzbDrone.Core.Providers.Jobs
{
diff --git a/NzbDrone.Core/Providers/PostDownloadProvider.cs b/NzbDrone.Core/Providers/PostDownloadProvider.cs
index 3d0709c59..ef072a89e 100644
--- a/NzbDrone.Core/Providers/PostDownloadProvider.cs
+++ b/NzbDrone.Core/Providers/PostDownloadProvider.cs
@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
+using System.Text.RegularExpressions;
using NLog;
using Ninject;
using NzbDrone.Core.Model;
@@ -21,6 +22,8 @@ namespace NzbDrone.Core.Providers
private readonly EpisodeProvider _episodeProvider;
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
+ private static readonly Regex StatusRegex = new Regex(@"^_[\w_]*_", RegexOptions.Compiled);
+
private static readonly List InfoList = new List();
[Inject]
@@ -69,6 +72,8 @@ namespace NzbDrone.Core.Providers
var folderStatus = GetPostDownloadStatusForFolder(subfolderInfo.Name);
+
+
if (folderStatus == PostDownloadStatusType.Unpacking)
{
ProcessFailedOrUnpackingDownload(subfolderInfo, PostDownloadStatusType.Unpacking);
@@ -86,8 +91,7 @@ namespace NzbDrone.Core.Providers
if (folderStatus != PostDownloadStatusType.NoError)
{
//Retry processing on the download
- ReProcessDownload(new PostDownloadInfoModel{ Name = subfolderInfo.FullName, Status = folderStatus });
-
+ ReProcessDownload(new PostDownloadInfoModel { Name = subfolderInfo.FullName, Status = folderStatus });
continue;
}
@@ -131,7 +135,7 @@ namespace NzbDrone.Core.Providers
if (importedFiles.Count == 0)
{
Logger.Warn("Unable to Import new download [{0}], unable to parse episode file(s).", subfolderInfo.FullName);
- _diskProvider.MoveDirectory(subfolderInfo.FullName,
+ _diskProvider.MoveDirectory(subfolderInfo.FullName,
GetNewFolderNameWithPostDownloadStatus(subfolderInfo, PostDownloadStatusType.ParseError));
}
@@ -165,7 +169,7 @@ namespace NzbDrone.Core.Providers
}
//Remove the error prefix before processing
- var parseResult = Parser.ParseTitle(directoryInfo.Name.Substring(GetPrefixLength(postDownloadStatus)));
+ var parseResult = Parser.ParseTitle(RemoveStatusFromFolderName(directoryInfo.Name));
parseResult.Series = _seriesProvider.FindSeries(parseResult.CleanTitle);
@@ -215,25 +219,6 @@ namespace NzbDrone.Core.Providers
ProcessDownload(directoryInfo);
}
- public int GetPrefixLength(PostDownloadStatusType postDownloadStatus)
- {
- //_UNPACK_ & _FAILED_ have a length of 8
- if (postDownloadStatus == PostDownloadStatusType.Unpacking || postDownloadStatus == PostDownloadStatusType.Failed)
- return 8;
-
- if (postDownloadStatus == PostDownloadStatusType.Unknown)
- return 10;
-
- if (postDownloadStatus == PostDownloadStatusType.Processed)
- return 0;
-
- if (postDownloadStatus == PostDownloadStatusType.NoError)
- return 0;
-
- //Return the 11 (_NzbDrone_) + trailing underscore + postDownloadStatus length
- return 11 + postDownloadStatus.ToString().Length;
- }
-
public void Add(PostDownloadInfoModel model)
{
InfoList.Add(model);
@@ -278,7 +263,7 @@ namespace NzbDrone.Core.Providers
var error = String.Format("_NzbDrone_{0}_", postDownloadStatus.ToString());
if (existingError != PostDownloadStatusType.NoError)
- newFolderName = directoryInfo.Name.Substring(GetPrefixLength(existingError));
+ newFolderName = RemoveStatusFromFolderName(directoryInfo.Name);
if (postDownloadStatus == PostDownloadStatusType.Unknown)
error = "_NzbDrone_";
@@ -294,5 +279,10 @@ namespace NzbDrone.Core.Providers
return Path.Combine(parent, newName);
}
+
+ public static string RemoveStatusFromFolderName(string folderName)
+ {
+ return StatusRegex.Replace(folderName, string.Empty);
+ }
}
}