diff --git a/src/NzbDrone.Core.Test/Download/CompletedDownloadServiceTests/ImportFixture.cs b/src/NzbDrone.Core.Test/Download/CompletedDownloadServiceTests/ImportFixture.cs index 92ca8407f..529dc5de4 100644 --- a/src/NzbDrone.Core.Test/Download/CompletedDownloadServiceTests/ImportFixture.cs +++ b/src/NzbDrone.Core.Test/Download/CompletedDownloadServiceTests/ImportFixture.cs @@ -37,7 +37,6 @@ namespace NzbDrone.Core.Test.Download _trackedDownload = Builder.CreateNew() .With(c => c.State = TrackedDownloadState.Downloading) - .With(c => c.ImportItem = completed) .With(c => c.DownloadItem = completed) .With(c => c.RemoteMovie = remoteMovie) .Build(); @@ -61,6 +60,10 @@ namespace NzbDrone.Core.Test.Download Mocker.GetMock() .Setup(s => s.FindByDownloadId(It.IsAny())) .Returns(new List()); + + Mocker.GetMock() + .Setup(s => s.ProvideImportItem(It.IsAny(), It.IsAny())) + .Returns((i, p) => i); } private RemoteMovie BuildRemoteMovie() diff --git a/src/NzbDrone.Core/Download/CompletedDownloadService.cs b/src/NzbDrone.Core/Download/CompletedDownloadService.cs index b4ff3719d..5b6b45fbf 100644 --- a/src/NzbDrone.Core/Download/CompletedDownloadService.cs +++ b/src/NzbDrone.Core/Download/CompletedDownloadService.cs @@ -27,7 +27,7 @@ namespace NzbDrone.Core.Download { private readonly IEventAggregator _eventAggregator; private readonly IHistoryService _historyService; - private readonly IProvideImportItemService _importItemService; + private readonly IProvideImportItemService _provideImportItemService; private readonly IDownloadedMovieImportService _downloadedMovieImportService; private readonly IParsingService _parsingService; private readonly IMovieService _movieService; @@ -36,7 +36,7 @@ namespace NzbDrone.Core.Download public CompletedDownloadService(IEventAggregator eventAggregator, IHistoryService historyService, - IProvideImportItemService importItemService, + IProvideImportItemService provideImportItemService, IDownloadedMovieImportService downloadedMovieImportService, IParsingService parsingService, IMovieService movieService, @@ -45,7 +45,7 @@ namespace NzbDrone.Core.Download { _eventAggregator = eventAggregator; _historyService = historyService; - _importItemService = importItemService; + _provideImportItemService = provideImportItemService; _downloadedMovieImportService = downloadedMovieImportService; _parsingService = parsingService; _movieService = movieService; @@ -60,7 +60,7 @@ namespace NzbDrone.Core.Download return; } - trackedDownload.ImportItem = _importItemService.ProvideImportItem(trackedDownload.DownloadItem, trackedDownload.ImportItem); + SetImportItem(trackedDownload); // Only process tracked downloads that are still downloading if (trackedDownload.State != TrackedDownloadState.Downloading) @@ -76,18 +76,8 @@ namespace NzbDrone.Core.Download return; } - var downloadItemOutputPath = trackedDownload.ImportItem.OutputPath; - - if (downloadItemOutputPath.IsEmpty) - { - trackedDownload.Warn("Download doesn't contain intermediate path, Skipping."); - return; - } - - if ((OsInfo.IsWindows && !downloadItemOutputPath.IsWindowsPath) || - (OsInfo.IsNotWindows && !downloadItemOutputPath.IsUnixPath)) + if (!ValidatePath(trackedDownload)) { - trackedDownload.Warn("[{0}] is not a valid local path. You may need a Remote Path Mapping.", downloadItemOutputPath); return; } @@ -112,6 +102,13 @@ namespace NzbDrone.Core.Download public void Import(TrackedDownload trackedDownload) { + SetImportItem(trackedDownload); + + if (!ValidatePath(trackedDownload)) + { + return; + } + trackedDownload.State = TrackedDownloadState.Importing; var outputPath = trackedDownload.ImportItem.OutputPath.FullPath; @@ -202,5 +199,30 @@ namespace NzbDrone.Core.Download _logger.Debug("Not all movies have been imported for {0}", trackedDownload.DownloadItem.Title); return false; } + + private void SetImportItem(TrackedDownload trackedDownload) + { + trackedDownload.ImportItem = _provideImportItemService.ProvideImportItem(trackedDownload.DownloadItem, trackedDownload.ImportItem); + } + + private bool ValidatePath(TrackedDownload trackedDownload) + { + var downloadItemOutputPath = trackedDownload.ImportItem.OutputPath; + + if (downloadItemOutputPath.IsEmpty) + { + trackedDownload.Warn("Download doesn't contain intermediate path, Skipping."); + return false; + } + + if ((OsInfo.IsWindows && !downloadItemOutputPath.IsWindowsPath) || + (OsInfo.IsNotWindows && !downloadItemOutputPath.IsUnixPath)) + { + trackedDownload.Warn("[{0}] is not a valid local path. You may need a Remote Path Mapping.", downloadItemOutputPath); + return false; + } + + return true; + } } } diff --git a/src/NzbDrone.Core/Download/PrepareImportService.cs b/src/NzbDrone.Core/Download/ProvideImportItemService.cs similarity index 100% rename from src/NzbDrone.Core/Download/PrepareImportService.cs rename to src/NzbDrone.Core/Download/ProvideImportItemService.cs