From 3cdd479bb4eaacadbe7f4d532a3fad7a29736f18 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Mon, 27 Aug 2012 03:15:22 -0700 Subject: [PATCH] Import video files from root of unsroted dir New: Import Files directly from unsorted directory (no subfolder required) --- NzbDrone.Core/Providers/DiskScanProvider.cs | 5 +-- .../Providers/PostDownloadProvider.cs | 32 +++++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/NzbDrone.Core/Providers/DiskScanProvider.cs b/NzbDrone.Core/Providers/DiskScanProvider.cs index 429a9b2bf..5c897ffa0 100644 --- a/NzbDrone.Core/Providers/DiskScanProvider.cs +++ b/NzbDrone.Core/Providers/DiskScanProvider.cs @@ -284,11 +284,12 @@ namespace NzbDrone.Core.Providers } } - private List GetVideoFiles(string path) + public List GetVideoFiles(string path, bool allDirectories = true) { Logger.Debug("Scanning '{0}' for video files", path); - var filesOnDisk = _diskProvider.GetFiles(path, SearchOption.AllDirectories); + var searchOption = allDirectories ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly; + var filesOnDisk = _diskProvider.GetFiles(path, searchOption); var mediaFileList = filesOnDisk.Where(c => mediaExtentions.Contains(Path.GetExtension(c).ToLower())).ToList(); diff --git a/NzbDrone.Core/Providers/PostDownloadProvider.cs b/NzbDrone.Core/Providers/PostDownloadProvider.cs index 979231d18..469fc3479 100644 --- a/NzbDrone.Core/Providers/PostDownloadProvider.cs +++ b/NzbDrone.Core/Providers/PostDownloadProvider.cs @@ -49,6 +49,19 @@ namespace NzbDrone.Core.Providers Logger.ErrorException("An error has occurred while importing folder" + subfolder, e); } } + + //Todo: Process files directly in the drop folder + foreach(var videoFile in _diskScanProvider.GetVideoFiles(dropFolder, false)) + { + try + { + ProcessVideoFile(videoFile); + } + catch(Exception ex) + { + Logger.ErrorException("An error has occurred while importing video file" + videoFile, ex); + } + } } public virtual void ProcessDownload(DirectoryInfo subfolderInfo) @@ -109,6 +122,25 @@ namespace NzbDrone.Core.Providers } } + public virtual void ProcessVideoFile(string videoFile) + { + var seriesName = Parser.ParseSeriesName(Path.GetFileNameWithoutExtension(videoFile)); + var series = _seriesProvider.FindSeries(seriesName); + + if (series == null) + { + Logger.Trace("Unknown Series on Import: {0}", videoFile); + return; + } + + var episodeFile = _diskScanProvider.ImportFile(series, videoFile); + if (episodeFile != null) + { + _diskScanProvider.MoveEpisodeFile(episodeFile, true); + _metadataProvider.CreateForEpisodeFile(episodeFile); + } + } + private void TagFolder(DirectoryInfo directory, PostDownloadStatusType status) { //Turning off tagging folder for now, to stop messing people's series folders.