diff --git a/NzbDrone.Core/NzbDrone.Core.csproj b/NzbDrone.Core/NzbDrone.Core.csproj
index a935d6dfb..f5a464d3b 100644
--- a/NzbDrone.Core/NzbDrone.Core.csproj
+++ b/NzbDrone.Core/NzbDrone.Core.csproj
@@ -219,6 +219,7 @@
+
diff --git a/NzbDrone.Core/Providers/Jobs/PostDownloadScanJob.cs b/NzbDrone.Core/Providers/Jobs/PostDownloadScanJob.cs
index 3d393058f..a2a67aa93 100644
--- a/NzbDrone.Core/Providers/Jobs/PostDownloadScanJob.cs
+++ b/NzbDrone.Core/Providers/Jobs/PostDownloadScanJob.cs
@@ -10,23 +10,12 @@ namespace NzbDrone.Core.Providers.Jobs
{
public class PostDownloadScanJob : IJob
{
- private readonly ConfigProvider _configProvider;
- private readonly DiskProvider _diskProvider;
- private readonly DiskScanProvider _diskScanProvider;
- private readonly SeriesProvider _seriesProvider;
- private readonly EpisodeProvider _episodeProvider;
- private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
+ private readonly PostDownloadProvider _postDownloadProvider;
[Inject]
- public PostDownloadScanJob(ConfigProvider configProvider, DiskProvider diskProvider,
- DiskScanProvider diskScanProvider, SeriesProvider seriesProvider,
- EpisodeProvider episodeProvider)
+ public PostDownloadScanJob(PostDownloadProvider postDownloadProvider)
{
- _configProvider = configProvider;
- _diskProvider = diskProvider;
- _diskScanProvider = diskScanProvider;
- _seriesProvider = seriesProvider;
- _episodeProvider = episodeProvider;
+ _postDownloadProvider = postDownloadProvider;
}
public PostDownloadScanJob()
@@ -45,76 +34,7 @@ namespace NzbDrone.Core.Providers.Jobs
public virtual void Start(ProgressNotification notification, int targetId, int secondaryTargetId)
{
- var dropFolder = _configProvider.SabDropDirectory;
-
- if (String.IsNullOrWhiteSpace(dropFolder))
- {
- Logger.Debug("No drop folder is defined. Skipping.");
- return;
- }
-
- if (!_diskProvider.FolderExists(dropFolder))
- {
- Logger.Warn("Unable to Scan for New Downloads - folder Doesn't exist: [{0}]", dropFolder);
- return;
- }
-
- foreach (var subfolder in _diskProvider.GetDirectories(dropFolder))
- {
- try
- {
- var subfolderInfo = new DirectoryInfo(subfolder);
-
- if (subfolderInfo.Name.StartsWith("_UNPACK_", StringComparison.CurrentCultureIgnoreCase))
- {
- _episodeProvider.SetPostDownloadStatus(subfolderInfo.Name.Substring(8), PostDownloadStatusType.Unpacking);
- Logger.Debug("Folder [{0}] is still being unpacked. skipping.", subfolder);
- continue;
- }
-
- if (subfolderInfo.Name.StartsWith("_FAILED_", StringComparison.CurrentCultureIgnoreCase))
- {
- _episodeProvider.SetPostDownloadStatus(subfolderInfo.Name.Substring(8), PostDownloadStatusType.Failed);
- Logger.Debug("Folder [{0}] is marked as failed. skipping.", subfolder);
- continue;
- }
-
- if (subfolderInfo.Name.StartsWith("_NzbDrone_", StringComparison.CurrentCultureIgnoreCase))
- {
- Logger.Debug("Folder [{0}] is marked as already processedby NzbDrone. skipping.", subfolder);
- continue;
- }
-
- //Parse the Folder name
- var seriesName = Parser.ParseSeriesName(subfolderInfo.Name);
- var series = _seriesProvider.FindSeries(seriesName);
-
- if (series == null)
- {
- Logger.Warn("Unable to Import new download [{0}], series doesn't exist in database.", subfolder);
-
- //Rename the Directory so it's not processed again.
- _diskProvider.MoveDirectory(subfolderInfo.FullName, Path.Combine(subfolderInfo.Parent.FullName, "_NzbDrone_" + subfolderInfo.Name));
- continue;
- }
-
- var importedFiles = _diskScanProvider.Scan(series, subfolder);
- importedFiles.ForEach(file => _diskScanProvider.MoveEpisodeFile(file, true));
-
- //Delete the folder only if folder is small enough
- if (_diskProvider.GetDirectorySize(subfolder) < 10.Megabytes())
- _diskProvider.DeleteFolder(subfolder, true);
-
- //Otherwise rename the folder to say it was already processed once by NzbDrone so it will not be continually processed
- else
- _diskProvider.MoveDirectory(subfolderInfo.FullName,Path.Combine(subfolderInfo.Parent.FullName, "_NzbDrone_" + subfolderInfo.Name));
- }
-
- catch (Exception e)
- {
- Logger.ErrorException("An error has occurred while importing " + subfolder, e);
- }
- }
+ _postDownloadProvider.Start(notification);
}
}
}
\ No newline at end of file
diff --git a/NzbDrone.Core/Providers/PostDownloadProvider.cs b/NzbDrone.Core/Providers/PostDownloadProvider.cs
new file mode 100644
index 000000000..06d9053b4
--- /dev/null
+++ b/NzbDrone.Core/Providers/PostDownloadProvider.cs
@@ -0,0 +1,116 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using NLog;
+using Ninject;
+using NzbDrone.Core.Model;
+using NzbDrone.Core.Model.Notification;
+using NzbDrone.Core.Providers.Core;
+
+namespace NzbDrone.Core.Providers
+{
+ public class PostDownloadProvider
+ {
+ //Used to perform Post Download Processing (Started by PostDownloadScanJob)
+
+ private readonly ConfigProvider _configProvider;
+ private readonly DiskProvider _diskProvider;
+ private readonly DiskScanProvider _diskScanProvider;
+ private readonly SeriesProvider _seriesProvider;
+ private readonly EpisodeProvider _episodeProvider;
+ private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
+
+ [Inject]
+ public PostDownloadProvider(ConfigProvider configProvider, DiskProvider diskProvider,
+ DiskScanProvider diskScanProvider, SeriesProvider seriesProvider,
+ EpisodeProvider episodeProvider)
+ {
+ _configProvider = configProvider;
+ _diskProvider = diskProvider;
+ _diskScanProvider = diskScanProvider;
+ _seriesProvider = seriesProvider;
+ _episodeProvider = episodeProvider;
+ }
+
+ PostDownloadProvider()
+ {
+
+ }
+
+ public virtual void Start(ProgressNotification notification)
+ {
+ var dropFolder = _configProvider.SabDropDirectory;
+
+ if (String.IsNullOrWhiteSpace(dropFolder))
+ {
+ Logger.Debug("No drop folder is defined. Skipping.");
+ return;
+ }
+
+ if (!_diskProvider.FolderExists(dropFolder))
+ {
+ Logger.Warn("Unable to Scan for New Downloads - folder Doesn't exist: [{0}]", dropFolder);
+ return;
+ }
+
+ foreach (var subfolder in _diskProvider.GetDirectories(dropFolder))
+ {
+ try
+ {
+ var subfolderInfo = new DirectoryInfo(subfolder);
+
+ if (subfolderInfo.Name.StartsWith("_UNPACK_", StringComparison.CurrentCultureIgnoreCase))
+ {
+ _episodeProvider.SetPostDownloadStatus(subfolderInfo.Name.Substring(8), PostDownloadStatusType.Unpacking);
+ Logger.Debug("Folder [{0}] is still being unpacked. skipping.", subfolder);
+ continue;
+ }
+
+ if (subfolderInfo.Name.StartsWith("_FAILED_", StringComparison.CurrentCultureIgnoreCase))
+ {
+ _episodeProvider.SetPostDownloadStatus(subfolderInfo.Name.Substring(8), PostDownloadStatusType.Failed);
+ Logger.Debug("Folder [{0}] is marked as failed. skipping.", subfolder);
+ continue;
+ }
+
+ if (subfolderInfo.Name.StartsWith("_NzbDrone_", StringComparison.CurrentCultureIgnoreCase))
+ {
+ Logger.Debug("Folder [{0}] is marked as already processedby NzbDrone. skipping.", subfolder);
+ continue;
+ }
+
+ //Parse the Folder name
+ var seriesName = Parser.ParseSeriesName(subfolderInfo.Name);
+ var series = _seriesProvider.FindSeries(seriesName);
+
+ if (series == null)
+ {
+ Logger.Warn("Unable to Import new download [{0}], series doesn't exist in database.", subfolder);
+
+ //Rename the Directory so it's not processed again.
+ _diskProvider.MoveDirectory(subfolderInfo.FullName, Path.Combine(subfolderInfo.Parent.FullName, "_NzbDrone_" + subfolderInfo.Name));
+ continue;
+ }
+
+ var importedFiles = _diskScanProvider.Scan(series, subfolder);
+ importedFiles.ForEach(file => _diskScanProvider.MoveEpisodeFile(file, true));
+
+ //Delete the folder only if folder is small enough
+ if (_diskProvider.GetDirectorySize(subfolder) < 10.Megabytes())
+ _diskProvider.DeleteFolder(subfolder, true);
+
+ //Otherwise rename the folder to say it was already processed once by NzbDrone so it will not be continually processed
+ else
+ _diskProvider.MoveDirectory(subfolderInfo.FullName, Path.Combine(subfolderInfo.Parent.FullName, "_NzbDrone_" + subfolderInfo.Name));
+ }
+
+ catch (Exception e)
+ {
+ Logger.ErrorException("An error has occurred while importing " + subfolder, e);
+ }
+ }
+ }
+ }
+}