diff --git a/src/NzbDrone.Core/Download/DownloadProcessingService.cs b/src/NzbDrone.Core/Download/DownloadProcessingService.cs index 960194d59..94d4465f6 100644 --- a/src/NzbDrone.Core/Download/DownloadProcessingService.cs +++ b/src/NzbDrone.Core/Download/DownloadProcessingService.cs @@ -1,5 +1,7 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Linq; +using NLog; using NzbDrone.Core.Configuration; using NzbDrone.Core.Download.TrackedDownloads; using NzbDrone.Core.Messaging.Commands; @@ -14,18 +16,21 @@ namespace NzbDrone.Core.Download private readonly IFailedDownloadService _failedDownloadService; private readonly ITrackedDownloadService _trackedDownloadService; private readonly IEventAggregator _eventAggregator; + private readonly ILogger _logger; public DownloadProcessingService(IConfigService configService, ICompletedDownloadService completedDownloadService, IFailedDownloadService failedDownloadService, ITrackedDownloadService trackedDownloadService, - IEventAggregator eventAggregator) + IEventAggregator eventAggregator, + ILogger logger) { _configService = configService; _completedDownloadService = completedDownloadService; _failedDownloadService = failedDownloadService; _trackedDownloadService = trackedDownloadService; _eventAggregator = eventAggregator; + _logger = logger; } private void RemoveCompletedDownloads(List trackedDownloads) @@ -43,15 +48,23 @@ namespace NzbDrone.Core.Download foreach (var trackedDownload in trackedDownloads) { - if (trackedDownload.State == TrackedDownloadState.FailedPending) + try { - _failedDownloadService.ProcessFailed(trackedDownload); + if (trackedDownload.State == TrackedDownloadState.FailedPending) + { + _failedDownloadService.ProcessFailed(trackedDownload); + } + + if (enableCompletedDownloadHandling && trackedDownload.State == TrackedDownloadState.ImportPending) + { + _completedDownloadService.Import(trackedDownload); + } + } + catch (Exception e) + { + _logger.Debug(e, "Failed to process download: {0}", trackedDownload.DownloadItem.Title); } - if (enableCompletedDownloadHandling && trackedDownload.State == TrackedDownloadState.ImportPending) - { - _completedDownloadService.Import(trackedDownload); - } } if (enableCompletedDownloadHandling && _configService.RemoveCompletedDownloads) diff --git a/src/NzbDrone.Core/MediaFiles/DownloadedEpisodesImportService.cs b/src/NzbDrone.Core/MediaFiles/DownloadedEpisodesImportService.cs index 63541212c..1cf73abcc 100644 --- a/src/NzbDrone.Core/MediaFiles/DownloadedEpisodesImportService.cs +++ b/src/NzbDrone.Core/MediaFiles/DownloadedEpisodesImportService.cs @@ -75,6 +75,8 @@ namespace NzbDrone.Core.MediaFiles public List ProcessPath(string path, ImportMode importMode = ImportMode.Auto, Series series = null, DownloadClientItem downloadClientItem = null) { + _logger.Debug("Processing path: {0}", path); + if (_diskProvider.FolderExists(path)) { var directoryInfo = new DirectoryInfo(path); @@ -279,6 +281,12 @@ namespace NzbDrone.Core.MediaFiles var mounts = _diskProvider.GetMounts(); var mount = mounts.FirstOrDefault(m => m.RootDirectory == Path.GetPathRoot(path)); + if (mount == null) + { + _logger.Error("Import failed, path does not exist or is not accessible by Sonarr: {0}. Unable to find a volume mounted for the path. If you're using a mapped network drive see the FAQ for more info", path); + return; + } + if (mount.DriveType == DriveType.Network) { _logger.Error("Import failed, path does not exist or is not accessible by Sonarr: {0}. It's recommended to avoid mapped network drives when running as a Windows service. See the FAQ for more info", path);