From bcd72367d95985c34339bdfbf4b5b9c77edbb60c Mon Sep 17 00:00:00 2001 From: Qstick Date: Wed, 30 Aug 2017 22:42:40 -0400 Subject: [PATCH] Organize TrackImport Directory and Fix Tests (#72) * Organize TrackImport Folder and Fix Tests * Remove Commented Out Line * Remove Old Code --- .../ManualImport/ManualImportModule.cs | 6 +- .../ManualImport/ManualImportResource.cs | 6 +- .../Music/ArtistBulkImportModule.cs | 6 +- .../CompletedDownloadServiceFixture.cs | 3 +- .../DiskScanServiceTests/ScanFixture.cs | 6 +- .../DownloadedEpisodesImportServiceFixture.cs | 5 +- .../ImportDecisionMakerFixture.cs | 33 +---- .../SampleServiceFixture.cs | 6 +- .../FreeSpaceSpecificationFixture.cs | 56 ++++----- .../NotUnpackingSpecificationFixture.cs | 26 ++-- .../UpgradeSpecificationFixture.cs | 119 +++++++++--------- .../NzbDrone.Core.Test.csproj | 10 +- .../Download/CompletedDownloadService.cs | 3 +- .../MediaFiles/DiskScanService.cs | 5 +- .../DownloadedEpisodesImportService.cs | 5 +- .../SameEpisodesImportSpecification.cs | 38 ------ .../DetectSample.cs | 4 +- .../IImportDecisionEngineSpecification.cs | 5 +- .../ImportApprovedEpisodes.cs | 6 +- .../TrackImport/ImportApprovedTracks.cs | 3 +- .../ImportDecisionMaker.cs | 52 +------- .../Manual/ManualImportCommand.cs | 5 +- .../Manual/ManualImportFile.cs | 4 +- .../Manual/ManualImportItem.cs | 4 +- .../Manual/ManualImportService.cs | 5 +- .../Manual/ManuallyImportedFile.cs | 5 +- .../Specifications/FreeSpaceSpecification.cs | 49 +------- .../NotUnpackingSpecification.cs | 24 ++-- .../SameTracksImportSpecification.cs | 8 +- .../Specifications/UpgradeSpecification.cs | 16 +-- src/NzbDrone.Core/NzbDrone.Core.csproj | 25 ++-- 31 files changed, 177 insertions(+), 371 deletions(-) rename src/NzbDrone.Core.Test/MediaFiles/{EpisodeImport => TrackImport}/ImportDecisionMakerFixture.cs (91%) rename src/NzbDrone.Core.Test/MediaFiles/{EpisodeImport => TrackImport}/SampleServiceFixture.cs (97%) rename src/NzbDrone.Core.Test/MediaFiles/{EpisodeImport => TrackImport}/Specifications/FreeSpaceSpecificationFixture.cs (65%) rename src/NzbDrone.Core.Test/MediaFiles/{EpisodeImport => TrackImport}/Specifications/NotUnpackingSpecificationFixture.cs (67%) rename src/NzbDrone.Core.Test/MediaFiles/{EpisodeImport => TrackImport}/Specifications/UpgradeSpecificationFixture.cs (63%) delete mode 100644 src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/SameEpisodesImportSpecification.cs rename src/NzbDrone.Core/MediaFiles/{EpisodeImport => TrackImport}/DetectSample.cs (98%) rename src/NzbDrone.Core/MediaFiles/{EpisodeImport => TrackImport}/IImportDecisionEngineSpecification.cs (52%) rename src/NzbDrone.Core/MediaFiles/{EpisodeImport => TrackImport}/ImportApprovedEpisodes.cs (96%) rename src/NzbDrone.Core/MediaFiles/{EpisodeImport => TrackImport}/ImportDecisionMaker.cs (78%) rename src/NzbDrone.Core/MediaFiles/{EpisodeImport => TrackImport}/Manual/ManualImportCommand.cs (66%) rename src/NzbDrone.Core/MediaFiles/{EpisodeImport => TrackImport}/Manual/ManualImportFile.cs (77%) rename src/NzbDrone.Core/MediaFiles/{EpisodeImport => TrackImport}/Manual/ManualImportItem.cs (86%) rename src/NzbDrone.Core/MediaFiles/{EpisodeImport => TrackImport}/Manual/ManualImportService.cs (99%) rename src/NzbDrone.Core/MediaFiles/{EpisodeImport => TrackImport}/Manual/ManuallyImportedFile.cs (53%) rename src/NzbDrone.Core/MediaFiles/{EpisodeImport => TrackImport}/Specifications/FreeSpaceSpecification.cs (56%) rename src/NzbDrone.Core/MediaFiles/{EpisodeImport => TrackImport}/Specifications/NotUnpackingSpecification.cs (77%) rename src/NzbDrone.Core/MediaFiles/{EpisodeImport => TrackImport}/Specifications/UpgradeSpecification.cs (58%) diff --git a/src/NzbDrone.Api/ManualImport/ManualImportModule.cs b/src/NzbDrone.Api/ManualImport/ManualImportModule.cs index 024b8e452..bcd99de1b 100644 --- a/src/NzbDrone.Api/ManualImport/ManualImportModule.cs +++ b/src/NzbDrone.Api/ManualImport/ManualImportModule.cs @@ -1,6 +1,6 @@ -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; -using NzbDrone.Core.MediaFiles.EpisodeImport.Manual; +using NzbDrone.Core.MediaFiles.TrackImport.Manual; using NzbDrone.Core.Qualities; namespace NzbDrone.Api.ManualImport @@ -40,4 +40,4 @@ namespace NzbDrone.Api.ManualImport return item; } } -} \ No newline at end of file +} diff --git a/src/NzbDrone.Api/ManualImport/ManualImportResource.cs b/src/NzbDrone.Api/ManualImport/ManualImportResource.cs index bc7b87408..99aeb0897 100644 --- a/src/NzbDrone.Api/ManualImport/ManualImportResource.cs +++ b/src/NzbDrone.Api/ManualImport/ManualImportResource.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using NzbDrone.Api.Episodes; using NzbDrone.Api.REST; @@ -26,7 +26,7 @@ namespace NzbDrone.Api.ManualImport public static class ManualImportResourceMapper { - public static ManualImportResource ToResource(this Core.MediaFiles.EpisodeImport.Manual.ManualImportItem model) + public static ManualImportResource ToResource(this Core.MediaFiles.TrackImport.Manual.ManualImportItem model) { if (model == null) return null; @@ -48,7 +48,7 @@ namespace NzbDrone.Api.ManualImport }; } - public static List ToResource(this IEnumerable models) + public static List ToResource(this IEnumerable models) { return models.Select(ToResource).ToList(); } diff --git a/src/NzbDrone.Api/Music/ArtistBulkImportModule.cs b/src/NzbDrone.Api/Music/ArtistBulkImportModule.cs index 530a4b281..c2d92aae7 100644 --- a/src/NzbDrone.Api/Music/ArtistBulkImportModule.cs +++ b/src/NzbDrone.Api/Music/ArtistBulkImportModule.cs @@ -1,4 +1,4 @@ -using System.Collections; +using System.Collections; using System.Collections.Generic; using Nancy; using NzbDrone.Api.REST; @@ -12,7 +12,7 @@ using Marr.Data; using NzbDrone.Common.Extensions; using NzbDrone.Core.Datastore; using NzbDrone.Core.MediaFiles; -using NzbDrone.Core.MediaFiles.EpisodeImport; +using NzbDrone.Core.MediaFiles.TrackImport; using NzbDrone.Core.RootFolders; using NzbDrone.Common.Cache; using NzbDrone.Core.Music; @@ -149,4 +149,4 @@ namespace NzbDrone.Api.Music } } } -} \ No newline at end of file +} diff --git a/src/NzbDrone.Core.Test/Download/CompletedDownloadServiceFixture.cs b/src/NzbDrone.Core.Test/Download/CompletedDownloadServiceFixture.cs index 37ff6416c..164120012 100644 --- a/src/NzbDrone.Core.Test/Download/CompletedDownloadServiceFixture.cs +++ b/src/NzbDrone.Core.Test/Download/CompletedDownloadServiceFixture.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System.Collections.Generic; using FizzWare.NBuilder; using FluentAssertions; using Moq; @@ -10,7 +10,6 @@ using NzbDrone.Core.Download; using NzbDrone.Core.Download.TrackedDownloads; using NzbDrone.Core.History; using NzbDrone.Core.MediaFiles; -using NzbDrone.Core.MediaFiles.EpisodeImport; using NzbDrone.Core.MediaFiles.TrackImport; using NzbDrone.Core.Messaging.Events; using NzbDrone.Core.Parser; diff --git a/src/NzbDrone.Core.Test/MediaFiles/DiskScanServiceTests/ScanFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/DiskScanServiceTests/ScanFixture.cs index 0ff3abfe5..399cff69b 100644 --- a/src/NzbDrone.Core.Test/MediaFiles/DiskScanServiceTests/ScanFixture.cs +++ b/src/NzbDrone.Core.Test/MediaFiles/DiskScanServiceTests/ScanFixture.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System.Collections.Generic; using System.IO; using System.Linq; using FizzWare.NBuilder; @@ -7,7 +7,7 @@ using NUnit.Framework; using NzbDrone.Common.Disk; using NzbDrone.Core.Configuration; using NzbDrone.Core.MediaFiles; -using NzbDrone.Core.MediaFiles.EpisodeImport; +using NzbDrone.Core.MediaFiles.TrackImport; using NzbDrone.Core.Test.Framework; using NzbDrone.Core.Music; using NzbDrone.Test.Common; @@ -360,4 +360,4 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests .Verify(v => v.GetImportDecisions(It.Is>(l => l.Count == 1), _artist), Times.Once()); } } -} \ No newline at end of file +} diff --git a/src/NzbDrone.Core.Test/MediaFiles/DownloadedEpisodesImportServiceFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/DownloadedEpisodesImportServiceFixture.cs index f8c06c8ce..d2d517caa 100644 --- a/src/NzbDrone.Core.Test/MediaFiles/DownloadedEpisodesImportServiceFixture.cs +++ b/src/NzbDrone.Core.Test/MediaFiles/DownloadedEpisodesImportServiceFixture.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System.Collections.Generic; using System.IO; using System.Linq; using FizzWare.NBuilder; @@ -7,7 +7,6 @@ using NUnit.Framework; using NzbDrone.Common.Disk; using NzbDrone.Core.MediaFiles; using NzbDrone.Core.MediaFiles.TrackImport; -using NzbDrone.Core.MediaFiles.EpisodeImport; using NzbDrone.Core.Parser; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Qualities; @@ -376,4 +375,4 @@ namespace NzbDrone.Core.Test.MediaFiles Times.Once()); } } -} \ No newline at end of file +} diff --git a/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/ImportDecisionMakerFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/TrackImport/ImportDecisionMakerFixture.cs similarity index 91% rename from src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/ImportDecisionMakerFixture.cs rename to src/NzbDrone.Core.Test/MediaFiles/TrackImport/ImportDecisionMakerFixture.cs index 89b62f5e0..451c2cf45 100644 --- a/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/ImportDecisionMakerFixture.cs +++ b/src/NzbDrone.Core.Test/MediaFiles/TrackImport/ImportDecisionMakerFixture.cs @@ -1,11 +1,11 @@ -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using FluentAssertions; using Moq; using NUnit.Framework; using NzbDrone.Core.DecisionEngine; using NzbDrone.Core.MediaFiles; -using NzbDrone.Core.MediaFiles.EpisodeImport; +using NzbDrone.Core.MediaFiles.TrackImport; using NzbDrone.Core.Parser; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Profiles; @@ -15,7 +15,7 @@ using NzbDrone.Core.Music; using NzbDrone.Test.Common; using FizzWare.NBuilder; -namespace NzbDrone.Core.Test.MediaFiles.EpisodeImport +namespace NzbDrone.Core.Test.MediaFiles.TrackImport { [TestFixture] public class ImportDecisionMakerFixture : CoreTest @@ -318,33 +318,6 @@ namespace NzbDrone.Core.Test.MediaFiles.EpisodeImport .Verify(c => c.GetLocalTrack(It.IsAny(), It.IsAny(), null), Times.Never()); } - //[Test] - //public void should_use_folder_when_only_one_video_file_and_a_sample() /// WE DONT HAVE SAMPLES IN MUSIC - //{ - // var audioFiles = new[] - // { - // @"C:\Test\Unsorted\Artist.Name.S01E01\S01E01.mkv".AsOsAgnostic(), - // @"C:\Test\Unsorted\Artist.Name.S01E01\S01E01.sample.mkv".AsOsAgnostic() - // }; - - // GivenSpecifications(_pass1); - // GivenVideoFiles(audioFiles.ToList()); - - // Mocker.GetMock() - // .Setup(s => s.IsSample(_artist, It.IsAny(), It.Is(c => c.Contains("sample")), It.IsAny(), It.IsAny())) - // .Returns(true); - - // var folderInfo = Parser.Parser.ParseMusicTitle("Artist.Name.S01E01"); - - // Subject.GetImportDecisions(_audioFiles, _artist, folderInfo); - - // Mocker.GetMock() - // .Verify(c => c.GetLocalTrack(It.IsAny(), It.IsAny(), It.IsAny()), Times.Exactly(2)); - - // Mocker.GetMock() - // .Verify(c => c.GetLocalTrack(It.IsAny(), It.IsAny(), null), Times.Never()); - //} - [Test] public void should_not_use_folder_name_if_file_name_is_scene_name() { diff --git a/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/SampleServiceFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/TrackImport/SampleServiceFixture.cs similarity index 97% rename from src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/SampleServiceFixture.cs rename to src/NzbDrone.Core.Test/MediaFiles/TrackImport/SampleServiceFixture.cs index 4bd76f6e8..0b9070b17 100644 --- a/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/SampleServiceFixture.cs +++ b/src/NzbDrone.Core.Test/MediaFiles/TrackImport/SampleServiceFixture.cs @@ -1,17 +1,17 @@ -using System; +using System; using System.Linq; using FizzWare.NBuilder; using FluentAssertions; using Moq; using NUnit.Framework; -using NzbDrone.Core.MediaFiles.EpisodeImport; +using NzbDrone.Core.MediaFiles.TrackImport; using NzbDrone.Core.MediaFiles.MediaInfo; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Qualities; using NzbDrone.Core.Test.Framework; using NzbDrone.Core.Tv; -namespace NzbDrone.Core.Test.MediaFiles.EpisodeImport +namespace NzbDrone.Core.Test.MediaFiles.TrackImport { [TestFixture] public class SampleServiceFixture : CoreTest diff --git a/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/FreeSpaceSpecificationFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/TrackImport/Specifications/FreeSpaceSpecificationFixture.cs similarity index 65% rename from src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/FreeSpaceSpecificationFixture.cs rename to src/NzbDrone.Core.Test/MediaFiles/TrackImport/Specifications/FreeSpaceSpecificationFixture.cs index a6f1afca1..dab5fe358 100644 --- a/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/FreeSpaceSpecificationFixture.cs +++ b/src/NzbDrone.Core.Test/MediaFiles/TrackImport/Specifications/FreeSpaceSpecificationFixture.cs @@ -1,4 +1,4 @@ -using System.IO; +using System.IO; using System.Linq; using FizzWare.NBuilder; using FluentAssertions; @@ -6,48 +6,46 @@ using Moq; using NUnit.Framework; using NzbDrone.Common.Disk; using NzbDrone.Core.Configuration; -using NzbDrone.Core.MediaFiles.EpisodeImport.Specifications; +using NzbDrone.Core.MediaFiles.TrackImport.Specifications; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Test.Framework; -using NzbDrone.Core.Tv; +using NzbDrone.Core.Music; using NzbDrone.Test.Common; -namespace NzbDrone.Core.Test.MediaFiles.EpisodeImport.Specifications +namespace NzbDrone.Core.Test.MediaFiles.TrackImport.Specifications { [TestFixture] public class FreeSpaceSpecificationFixture : CoreTest { - private Series _series; - private LocalEpisode _localEpisode; + private Artist _artist; + private LocalTrack _localTrack; private string _rootFolder; [SetUp] public void Setup() { - _rootFolder = @"C:\Test\TV".AsOsAgnostic(); + _rootFolder = @"C:\Test\Music".AsOsAgnostic(); - _series = Builder.CreateNew() - .With(s => s.SeriesType = SeriesTypes.Standard) - .With(s => s.Path = Path.Combine(_rootFolder, "30 Rock")) + _artist = Builder.CreateNew() + .With(s => s.Path = Path.Combine(_rootFolder, "Alice in Chains")) .Build(); - var episodes = Builder.CreateListOfSize(1) + var tracks = Builder.CreateListOfSize(1) .All() - .With(e => e.SeasonNumber = 1) .Build() .ToList(); - _localEpisode = new LocalEpisode + _localTrack = new LocalTrack { - Path = @"C:\Test\Unsorted\30 Rock\30.rock.s01e01.avi".AsOsAgnostic(), - Episodes = episodes, - Series = _series + Path = @"C:\Test\Unsorted\Alice in Chains\Alice in Chains - track1.mp3".AsOsAgnostic(), + Tracks = tracks, + Artist = _artist }; } private void GivenFileSize(long size) { - _localEpisode.Size = size; + _localTrack.Size = size; } private void GivenFreeSpace(long? size) @@ -63,7 +61,7 @@ namespace NzbDrone.Core.Test.MediaFiles.EpisodeImport.Specifications GivenFileSize(100.Megabytes()); GivenFreeSpace(80.Megabytes()); - Subject.IsSatisfiedBy(_localEpisode).Accepted.Should().BeFalse(); + Subject.IsSatisfiedBy(_localTrack).Accepted.Should().BeFalse(); ExceptionVerification.ExpectedWarns(1); } @@ -73,7 +71,7 @@ namespace NzbDrone.Core.Test.MediaFiles.EpisodeImport.Specifications GivenFileSize(100.Megabytes()); GivenFreeSpace(150.Megabytes()); - Subject.IsSatisfiedBy(_localEpisode).Accepted.Should().BeFalse(); + Subject.IsSatisfiedBy(_localTrack).Accepted.Should().BeFalse(); ExceptionVerification.ExpectedWarns(1); } @@ -83,16 +81,16 @@ namespace NzbDrone.Core.Test.MediaFiles.EpisodeImport.Specifications GivenFileSize(100.Megabytes()); GivenFreeSpace(1.Gigabytes()); - Subject.IsSatisfiedBy(_localEpisode).Accepted.Should().BeTrue(); + Subject.IsSatisfiedBy(_localTrack).Accepted.Should().BeTrue(); } [Test] - public void should_use_series_paths_parent_for_free_space_check() + public void should_use_artist_paths_parent_for_free_space_check() { GivenFileSize(100.Megabytes()); GivenFreeSpace(1.Gigabytes()); - Subject.IsSatisfiedBy(_localEpisode).Accepted.Should().BeTrue(); + Subject.IsSatisfiedBy(_localTrack).Accepted.Should().BeTrue(); Mocker.GetMock() .Verify(v => v.GetAvailableSpace(_rootFolder), Times.Once()); @@ -104,7 +102,7 @@ namespace NzbDrone.Core.Test.MediaFiles.EpisodeImport.Specifications GivenFileSize(100.Megabytes()); GivenFreeSpace(null); - Subject.IsSatisfiedBy(_localEpisode).Accepted.Should().BeTrue(); + Subject.IsSatisfiedBy(_localTrack).Accepted.Should().BeTrue(); } [Test] @@ -116,16 +114,16 @@ namespace NzbDrone.Core.Test.MediaFiles.EpisodeImport.Specifications .Setup(s => s.GetAvailableSpace(It.IsAny())) .Throws(new TestException()); - Subject.IsSatisfiedBy(_localEpisode).Accepted.Should().BeTrue(); + Subject.IsSatisfiedBy(_localTrack).Accepted.Should().BeTrue(); ExceptionVerification.ExpectedErrors(1); } [Test] - public void should_skip_check_for_files_under_series_folder() + public void should_skip_check_for_files_under_artist_folder() { - _localEpisode.ExistingFile = true; + _localTrack.ExistingFile = true; - Subject.IsSatisfiedBy(_localEpisode).Accepted.Should().BeTrue(); + Subject.IsSatisfiedBy(_localTrack).Accepted.Should().BeTrue(); Mocker.GetMock() .Verify(s => s.GetAvailableSpace(It.IsAny()), Times.Never()); @@ -140,7 +138,7 @@ namespace NzbDrone.Core.Test.MediaFiles.EpisodeImport.Specifications .Setup(s => s.GetAvailableSpace(It.IsAny())) .Returns(freeSpace); - Subject.IsSatisfiedBy(_localEpisode).Accepted.Should().BeTrue(); + Subject.IsSatisfiedBy(_localTrack).Accepted.Should().BeTrue(); } [Test] @@ -150,7 +148,7 @@ namespace NzbDrone.Core.Test.MediaFiles.EpisodeImport.Specifications .Setup(s => s.SkipFreeSpaceCheckWhenImporting) .Returns(true); - Subject.IsSatisfiedBy(_localEpisode).Accepted.Should().BeTrue(); + Subject.IsSatisfiedBy(_localTrack).Accepted.Should().BeTrue(); } } } diff --git a/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/NotUnpackingSpecificationFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/TrackImport/Specifications/NotUnpackingSpecificationFixture.cs similarity index 67% rename from src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/NotUnpackingSpecificationFixture.cs rename to src/NzbDrone.Core.Test/MediaFiles/TrackImport/Specifications/NotUnpackingSpecificationFixture.cs index ad27e402f..cfdec1aa4 100644 --- a/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/NotUnpackingSpecificationFixture.cs +++ b/src/NzbDrone.Core.Test/MediaFiles/TrackImport/Specifications/NotUnpackingSpecificationFixture.cs @@ -1,22 +1,22 @@ -using System; +using System; using FizzWare.NBuilder; using FluentAssertions; using Moq; using NUnit.Framework; using NzbDrone.Common.Disk; using NzbDrone.Core.Configuration; -using NzbDrone.Core.MediaFiles.EpisodeImport.Specifications; +using NzbDrone.Core.MediaFiles.TrackImport.Specifications; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Test.Framework; -using NzbDrone.Core.Tv; +using NzbDrone.Core.Music; using NzbDrone.Test.Common; -namespace NzbDrone.Core.Test.MediaFiles.EpisodeImport.Specifications +namespace NzbDrone.Core.Test.MediaFiles.TrackImport.Specifications { [TestFixture] public class NotUnpackingSpecificationFixture : CoreTest { - private LocalEpisode _localEpisode; + private LocalTrack _localTrack; [SetUp] public void Setup() @@ -25,17 +25,17 @@ namespace NzbDrone.Core.Test.MediaFiles.EpisodeImport.Specifications .SetupGet(s => s.DownloadClientWorkingFolders) .Returns("_UNPACK_|_FAILED_"); - _localEpisode = new LocalEpisode + _localTrack = new LocalTrack { - Path = @"C:\Test\Unsorted TV\30.rock\30.rock.s01e01.avi".AsOsAgnostic(), + Path = @"C:\Test\Unsorted Music\Kid.Rock\Kid.Rock.Cowboy.mp3".AsOsAgnostic(), Size = 100, - Series = Builder.CreateNew().Build() + Artist = Builder.CreateNew().Build() }; } private void GivenInWorkingFolder() { - _localEpisode.Path = @"C:\Test\Unsorted TV\_UNPACK_30.rock\someSubFolder\30.rock.s01e01.avi".AsOsAgnostic(); + _localTrack.Path = @"C:\Test\Unsorted Music\_UNPACK_Kid.Rock\someSubFolder\Kid.Rock.Cowboy.mp3".AsOsAgnostic(); } private void GivenLastWriteTimeUtc(DateTime time) @@ -48,7 +48,7 @@ namespace NzbDrone.Core.Test.MediaFiles.EpisodeImport.Specifications [Test] public void should_return_true_if_not_in_working_folder() { - Subject.IsSatisfiedBy(_localEpisode).Accepted.Should().BeTrue(); + Subject.IsSatisfiedBy(_localTrack).Accepted.Should().BeTrue(); } [Test] @@ -59,7 +59,7 @@ namespace NzbDrone.Core.Test.MediaFiles.EpisodeImport.Specifications GivenInWorkingFolder(); GivenLastWriteTimeUtc(DateTime.UtcNow.AddHours(-1)); - Subject.IsSatisfiedBy(_localEpisode).Accepted.Should().BeTrue(); + Subject.IsSatisfiedBy(_localTrack).Accepted.Should().BeTrue(); } [Test] @@ -68,7 +68,7 @@ namespace NzbDrone.Core.Test.MediaFiles.EpisodeImport.Specifications GivenInWorkingFolder(); GivenLastWriteTimeUtc(DateTime.UtcNow); - Subject.IsSatisfiedBy(_localEpisode).Accepted.Should().BeFalse(); + Subject.IsSatisfiedBy(_localTrack).Accepted.Should().BeFalse(); } [Test] @@ -79,7 +79,7 @@ namespace NzbDrone.Core.Test.MediaFiles.EpisodeImport.Specifications GivenInWorkingFolder(); GivenLastWriteTimeUtc(DateTime.UtcNow.AddDays(-5)); - Subject.IsSatisfiedBy(_localEpisode).Accepted.Should().BeFalse(); + Subject.IsSatisfiedBy(_localTrack).Accepted.Should().BeFalse(); } } } diff --git a/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/UpgradeSpecificationFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/TrackImport/Specifications/UpgradeSpecificationFixture.cs similarity index 63% rename from src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/UpgradeSpecificationFixture.cs rename to src/NzbDrone.Core.Test/MediaFiles/TrackImport/Specifications/UpgradeSpecificationFixture.cs index 5e738664d..fc21f0b62 100644 --- a/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/UpgradeSpecificationFixture.cs +++ b/src/NzbDrone.Core.Test/MediaFiles/TrackImport/Specifications/UpgradeSpecificationFixture.cs @@ -1,156 +1,155 @@ -using System.Linq; +using System.Linq; using FizzWare.NBuilder; using FluentAssertions; using Marr.Data; using NUnit.Framework; using NzbDrone.Core.MediaFiles; -using NzbDrone.Core.MediaFiles.EpisodeImport.Specifications; +using NzbDrone.Core.MediaFiles.TrackImport.Specifications; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Profiles; using NzbDrone.Core.Qualities; using NzbDrone.Core.Test.Framework; -using NzbDrone.Core.Tv; +using NzbDrone.Core.Music; -namespace NzbDrone.Core.Test.MediaFiles.EpisodeImport.Specifications +namespace NzbDrone.Core.Test.MediaFiles.TrackImport.Specifications { [TestFixture] public class UpgradeSpecificationFixture : CoreTest { - private Series _series; - private LocalEpisode _localEpisode; + private Artist _artist; + private LocalTrack _localTrack; [SetUp] public void Setup() { - _series = Builder.CreateNew() - .With(s => s.SeriesType = SeriesTypes.Standard) + _artist = Builder.CreateNew() .With(e => e.Profile = new Profile { Items = Qualities.QualityFixture.GetDefaultQualities() }) .Build(); - _localEpisode = new LocalEpisode + _localTrack = new LocalTrack { - Path = @"C:\Test\30 Rock\30.rock.s01e01.avi", + Path = @"C:\Test\Imagine Dragons\Imagine.Dragons.Song.1.mp3", Quality = new QualityModel(Quality.MP3_256, new Revision(version: 1)), - Series = _series + Artist = _artist }; } [Test] - public void should_return_true_if_no_existing_episodeFile() + public void should_return_true_if_no_existing_trackFile() { - _localEpisode.Episodes = Builder.CreateListOfSize(1) + _localTrack.Tracks = Builder.CreateListOfSize(1) .All() - .With(e => e.EpisodeFileId = 0) - .With(e => e.EpisodeFile = null) + .With(e => e.TrackFileId = 0) + .With(e => e.TrackFile = null) .Build() .ToList(); - Subject.IsSatisfiedBy(_localEpisode).Accepted.Should().BeTrue(); + Subject.IsSatisfiedBy(_localTrack).Accepted.Should().BeTrue(); } [Test] - public void should_return_true_if_no_existing_episodeFile_for_multi_episodes() + public void should_return_true_if_no_existing_trackFile_for_multi_tracks() { - _localEpisode.Episodes = Builder.CreateListOfSize(2) + _localTrack.Tracks = Builder.CreateListOfSize(2) .All() - .With(e => e.EpisodeFileId = 0) - .With(e => e.EpisodeFile = null) + .With(e => e.TrackFileId = 0) + .With(e => e.TrackFile = null) .Build() .ToList(); - Subject.IsSatisfiedBy(_localEpisode).Accepted.Should().BeTrue(); + Subject.IsSatisfiedBy(_localTrack).Accepted.Should().BeTrue(); } [Test] - public void should_return_true_if_upgrade_for_existing_episodeFile() + public void should_return_true_if_upgrade_for_existing_trackFile() { - _localEpisode.Episodes = Builder.CreateListOfSize(1) + _localTrack.Tracks = Builder.CreateListOfSize(1) .All() - .With(e => e.EpisodeFileId = 1) - .With(e => e.EpisodeFile = new LazyLoaded( - new EpisodeFile + .With(e => e.TrackFileId = 1) + .With(e => e.TrackFile = new LazyLoaded( + new TrackFile { - Quality = new QualityModel(Quality.MP3_256, new Revision(version: 1)) + Quality = new QualityModel(Quality.MP3_192, new Revision(version: 1)) })) .Build() .ToList(); - Subject.IsSatisfiedBy(_localEpisode).Accepted.Should().BeTrue(); + Subject.IsSatisfiedBy(_localTrack).Accepted.Should().BeTrue(); } [Test] - public void should_return_true_if_upgrade_for_existing_episodeFile_for_multi_episodes() + public void should_return_true_if_upgrade_for_existing_trackFile_for_multi_tracks() { - _localEpisode.Episodes = Builder.CreateListOfSize(2) + _localTrack.Tracks = Builder.CreateListOfSize(2) .All() - .With(e => e.EpisodeFileId = 1) - .With(e => e.EpisodeFile = new LazyLoaded( - new EpisodeFile + .With(e => e.TrackFileId = 1) + .With(e => e.TrackFile = new LazyLoaded( + new TrackFile { - Quality = new QualityModel(Quality.MP3_256, new Revision(version: 1)) + Quality = new QualityModel(Quality.MP3_192, new Revision(version: 1)) })) .Build() .ToList(); - Subject.IsSatisfiedBy(_localEpisode).Accepted.Should().BeTrue(); + Subject.IsSatisfiedBy(_localTrack).Accepted.Should().BeTrue(); } [Test] - public void should_return_false_if_not_an_upgrade_for_existing_episodeFile() + public void should_return_false_if_not_an_upgrade_for_existing_trackFile() { - _localEpisode.Episodes = Builder.CreateListOfSize(1) + _localTrack.Tracks = Builder.CreateListOfSize(1) .All() - .With(e => e.EpisodeFileId = 1) - .With(e => e.EpisodeFile = new LazyLoaded( - new EpisodeFile + .With(e => e.TrackFileId = 1) + .With(e => e.TrackFile = new LazyLoaded( + new TrackFile { - Quality = new QualityModel(Quality.MP3_256, new Revision(version: 1)) + Quality = new QualityModel(Quality.FLAC, new Revision(version: 1)) })) .Build() .ToList(); - Subject.IsSatisfiedBy(_localEpisode).Accepted.Should().BeFalse(); + Subject.IsSatisfiedBy(_localTrack).Accepted.Should().BeFalse(); } [Test] - public void should_return_false_if_not_an_upgrade_for_existing_episodeFile_for_multi_episodes() + public void should_return_false_if_not_an_upgrade_for_existing_trackFile_for_multi_tracks() { - _localEpisode.Episodes = Builder.CreateListOfSize(2) + _localTrack.Tracks = Builder.CreateListOfSize(2) .All() - .With(e => e.EpisodeFileId = 1) - .With(e => e.EpisodeFile = new LazyLoaded( - new EpisodeFile + .With(e => e.TrackFileId = 1) + .With(e => e.TrackFile = new LazyLoaded( + new TrackFile { - Quality = new QualityModel(Quality.MP3_256, new Revision(version: 1)) + Quality = new QualityModel(Quality.FLAC, new Revision(version: 1)) })) .Build() .ToList(); - Subject.IsSatisfiedBy(_localEpisode).Accepted.Should().BeFalse(); + Subject.IsSatisfiedBy(_localTrack).Accepted.Should().BeFalse(); } [Test] - public void should_return_false_if_not_an_upgrade_for_one_existing_episodeFile_for_multi_episode() + public void should_return_false_if_not_an_upgrade_for_one_existing_trackFile_for_multi_track() { - _localEpisode.Episodes = Builder.CreateListOfSize(2) + _localTrack.Tracks = Builder.CreateListOfSize(2) .TheFirst(1) - .With(e => e.EpisodeFileId = 1) - .With(e => e.EpisodeFile = new LazyLoaded( - new EpisodeFile + .With(e => e.TrackFileId = 1) + .With(e => e.TrackFile = new LazyLoaded( + new TrackFile { - Quality = new QualityModel(Quality.MP3_256, new Revision(version: 1)) + Quality = new QualityModel(Quality.MP3_192, new Revision(version: 1)) })) .TheNext(1) - .With(e => e.EpisodeFileId = 2) - .With(e => e.EpisodeFile = new LazyLoaded( - new EpisodeFile + .With(e => e.TrackFileId = 2) + .With(e => e.TrackFile = new LazyLoaded( + new TrackFile { - Quality = new QualityModel(Quality.MP3_256, new Revision(version: 1)) + Quality = new QualityModel(Quality.FLAC, new Revision(version: 1)) })) .Build() .ToList(); - Subject.IsSatisfiedBy(_localEpisode).Accepted.Should().BeFalse(); + Subject.IsSatisfiedBy(_localTrack).Accepted.Should().BeFalse(); } } } diff --git a/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj b/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj index dcc0e6b13..0c088e8d5 100644 --- a/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj +++ b/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj @@ -282,11 +282,11 @@ - - - - - + + + + + diff --git a/src/NzbDrone.Core/Download/CompletedDownloadService.cs b/src/NzbDrone.Core/Download/CompletedDownloadService.cs index 841da6ae1..9f56132b5 100644 --- a/src/NzbDrone.Core/Download/CompletedDownloadService.cs +++ b/src/NzbDrone.Core/Download/CompletedDownloadService.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.IO; using System.Linq; using NLog; @@ -9,7 +9,6 @@ using NzbDrone.Core.Configuration; using NzbDrone.Core.Download.TrackedDownloads; using NzbDrone.Core.History; using NzbDrone.Core.MediaFiles; -using NzbDrone.Core.MediaFiles.EpisodeImport; using NzbDrone.Core.Messaging.Events; using NzbDrone.Core.Parser; using NzbDrone.Core.Tv; diff --git a/src/NzbDrone.Core/MediaFiles/DiskScanService.cs b/src/NzbDrone.Core/MediaFiles/DiskScanService.cs index e2e53c301..32b52f9e7 100644 --- a/src/NzbDrone.Core/MediaFiles/DiskScanService.cs +++ b/src/NzbDrone.Core/MediaFiles/DiskScanService.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; @@ -10,7 +10,6 @@ using NzbDrone.Common.Extensions; using NzbDrone.Common.Instrumentation.Extensions; using NzbDrone.Core.Configuration; using NzbDrone.Core.MediaFiles.Commands; -using NzbDrone.Core.MediaFiles.EpisodeImport; using NzbDrone.Core.MediaFiles.Events; using NzbDrone.Core.Messaging.Commands; using NzbDrone.Core.Messaging.Events; @@ -212,4 +211,4 @@ namespace NzbDrone.Core.MediaFiles } } } -} \ No newline at end of file +} diff --git a/src/NzbDrone.Core/MediaFiles/DownloadedEpisodesImportService.cs b/src/NzbDrone.Core/MediaFiles/DownloadedEpisodesImportService.cs index d48d5c596..583d50708 100644 --- a/src/NzbDrone.Core/MediaFiles/DownloadedEpisodesImportService.cs +++ b/src/NzbDrone.Core/MediaFiles/DownloadedEpisodesImportService.cs @@ -1,10 +1,9 @@ -using System.Collections.Generic; +using System.Collections.Generic; using System.IO; using System.Linq; using NLog; using NzbDrone.Common.Disk; using NzbDrone.Core.DecisionEngine; -using NzbDrone.Core.MediaFiles.EpisodeImport; using NzbDrone.Core.Parser; using NzbDrone.Core.Tv; using NzbDrone.Core.Download; @@ -268,4 +267,4 @@ namespace NzbDrone.Core.MediaFiles //return new ImportResult(new ImportDecision(localEpisode, new Rejection("Unknown Series")), message); } } -} \ No newline at end of file +} diff --git a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/SameEpisodesImportSpecification.cs b/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/SameEpisodesImportSpecification.cs deleted file mode 100644 index e7a93c0d1..000000000 --- a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/SameEpisodesImportSpecification.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using NLog; -using NzbDrone.Core.DecisionEngine; -using NzbDrone.Core.Parser.Model; - -namespace NzbDrone.Core.MediaFiles.EpisodeImport.Specifications -{ - public class SameEpisodesImportSpecification : IImportDecisionEngineSpecification - { - private readonly SameEpisodesSpecification _sameEpisodesSpecification; - private readonly Logger _logger; - - public SameEpisodesImportSpecification(SameEpisodesSpecification sameEpisodesSpecification, Logger logger) - { - _sameEpisodesSpecification = sameEpisodesSpecification; - _logger = logger; - } - - public RejectionType Type => RejectionType.Permanent; - - public Decision IsSatisfiedBy(LocalEpisode localEpisode) - { - if (_sameEpisodesSpecification.IsSatisfiedBy(localEpisode.Episodes)) - { - return Decision.Accept(); - } - - _logger.Debug("Episode file on disk contains more episodes than this file contains"); - return Decision.Reject("Episode file on disk contains more episodes than this file contains"); - } - - public Decision IsSatisfiedBy(LocalTrack localTrack) - { - return Decision.Accept(); - throw new NotImplementedException(); - } - } -} diff --git a/src/NzbDrone.Core/MediaFiles/EpisodeImport/DetectSample.cs b/src/NzbDrone.Core/MediaFiles/TrackImport/DetectSample.cs similarity index 98% rename from src/NzbDrone.Core/MediaFiles/EpisodeImport/DetectSample.cs rename to src/NzbDrone.Core/MediaFiles/TrackImport/DetectSample.cs index 36c1fcb2e..d93839701 100644 --- a/src/NzbDrone.Core/MediaFiles/EpisodeImport/DetectSample.cs +++ b/src/NzbDrone.Core/MediaFiles/TrackImport/DetectSample.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.IO; using NLog; @@ -6,7 +6,7 @@ using NzbDrone.Core.MediaFiles.MediaInfo; using NzbDrone.Core.Qualities; using NzbDrone.Core.Tv; -namespace NzbDrone.Core.MediaFiles.EpisodeImport +namespace NzbDrone.Core.MediaFiles.TrackImport { public interface IDetectSample { diff --git a/src/NzbDrone.Core/MediaFiles/EpisodeImport/IImportDecisionEngineSpecification.cs b/src/NzbDrone.Core/MediaFiles/TrackImport/IImportDecisionEngineSpecification.cs similarity index 52% rename from src/NzbDrone.Core/MediaFiles/EpisodeImport/IImportDecisionEngineSpecification.cs rename to src/NzbDrone.Core/MediaFiles/TrackImport/IImportDecisionEngineSpecification.cs index 50f491ca6..6fff3ba23 100644 --- a/src/NzbDrone.Core/MediaFiles/EpisodeImport/IImportDecisionEngineSpecification.cs +++ b/src/NzbDrone.Core/MediaFiles/TrackImport/IImportDecisionEngineSpecification.cs @@ -1,11 +1,10 @@ -using NzbDrone.Core.DecisionEngine; +using NzbDrone.Core.DecisionEngine; using NzbDrone.Core.Parser.Model; -namespace NzbDrone.Core.MediaFiles.EpisodeImport +namespace NzbDrone.Core.MediaFiles.TrackImport { public interface IImportDecisionEngineSpecification { - Decision IsSatisfiedBy(LocalEpisode localEpisode); Decision IsSatisfiedBy(LocalTrack localTrack); } } diff --git a/src/NzbDrone.Core/MediaFiles/EpisodeImport/ImportApprovedEpisodes.cs b/src/NzbDrone.Core/MediaFiles/TrackImport/ImportApprovedEpisodes.cs similarity index 96% rename from src/NzbDrone.Core/MediaFiles/EpisodeImport/ImportApprovedEpisodes.cs rename to src/NzbDrone.Core/MediaFiles/TrackImport/ImportApprovedEpisodes.cs index f3cc3404a..685df77d5 100644 --- a/src/NzbDrone.Core/MediaFiles/EpisodeImport/ImportApprovedEpisodes.cs +++ b/src/NzbDrone.Core/MediaFiles/TrackImport/ImportApprovedEpisodes.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.IO; using System.Linq; @@ -12,10 +12,10 @@ using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Qualities; using NzbDrone.Core.Download; using NzbDrone.Core.Extras; -using NzbDrone.Core.MediaFiles.TrackImport; -namespace NzbDrone.Core.MediaFiles.EpisodeImport +namespace NzbDrone.Core.MediaFiles.TrackImport { + [Obsolete("Used by Sonarr, not by Lidarr")] public interface IImportApprovedEpisodes { List Import(List decisions, bool newDownload, DownloadClientItem downloadClientItem = null, ImportMode importMode = ImportMode.Auto); diff --git a/src/NzbDrone.Core/MediaFiles/TrackImport/ImportApprovedTracks.cs b/src/NzbDrone.Core/MediaFiles/TrackImport/ImportApprovedTracks.cs index 0c783593e..e652e09e7 100644 --- a/src/NzbDrone.Core/MediaFiles/TrackImport/ImportApprovedTracks.cs +++ b/src/NzbDrone.Core/MediaFiles/TrackImport/ImportApprovedTracks.cs @@ -1,8 +1,7 @@ -using NLog; +using NLog; using NzbDrone.Common.Disk; using NzbDrone.Common.Extensions; using NzbDrone.Core.Download; -using NzbDrone.Core.MediaFiles.EpisodeImport; using NzbDrone.Core.MediaFiles.Events; using NzbDrone.Core.Messaging.Events; using NzbDrone.Core.Qualities; diff --git a/src/NzbDrone.Core/MediaFiles/EpisodeImport/ImportDecisionMaker.cs b/src/NzbDrone.Core/MediaFiles/TrackImport/ImportDecisionMaker.cs similarity index 78% rename from src/NzbDrone.Core/MediaFiles/EpisodeImport/ImportDecisionMaker.cs rename to src/NzbDrone.Core/MediaFiles/TrackImport/ImportDecisionMaker.cs index 4209e98c7..8fa2b2f3f 100644 --- a/src/NzbDrone.Core/MediaFiles/EpisodeImport/ImportDecisionMaker.cs +++ b/src/NzbDrone.Core/MediaFiles/TrackImport/ImportDecisionMaker.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.IO; using System.Linq; @@ -9,18 +9,14 @@ using NzbDrone.Core.DecisionEngine; using NzbDrone.Core.Parser; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Qualities; -using NzbDrone.Core.Tv; using NzbDrone.Core.MediaFiles.MediaInfo; using NzbDrone.Core.Music; -using NzbDrone.Core.MediaFiles.TrackImport; -namespace NzbDrone.Core.MediaFiles.EpisodeImport +namespace NzbDrone.Core.MediaFiles.TrackImport { public interface IMakeImportDecision { - //List GetImportDecisions(List videoFiles, Series series); List GetImportDecisions(List musicFiles, Artist artist); - //List GetImportDecisions(List videoFiles, Series series, ParsedEpisodeInfo folderInfo, bool sceneSource); List GetImportDecisions(List musicFiles, Artist artist, ParsedTrackInfo folderInfo); } @@ -51,28 +47,6 @@ namespace NzbDrone.Core.MediaFiles.EpisodeImport _logger = logger; } - //public List GetImportDecisions(List videoFiles, Series series) - //{ - // return GetImportDecisions(videoFiles, series, null, false); - //} - - //public List GetImportDecisions(List videoFiles, Artist series, ParsedEpisodeInfo folderInfo, bool sceneSource) - //{ - // var newFiles = _mediaFileService.FilterExistingFiles(videoFiles.ToList(), series); - - // _logger.Debug("Analyzing {0}/{1} files.", newFiles.Count, videoFiles.Count()); - - // var shouldUseFolderName = ShouldUseFolderName(videoFiles, series, folderInfo); - // var decisions = new List(); - - // foreach (var file in newFiles) - // { - // decisions.AddIfNotNull(GetDecision(file, series, folderInfo, sceneSource, shouldUseFolderName)); - // } - - // return decisions; - //} - public List GetImportDecisions(List musicFiles, Artist artist) { return GetImportDecisions(musicFiles, artist, null); @@ -171,28 +145,6 @@ namespace NzbDrone.Core.MediaFiles.EpisodeImport return null; } - private Rejection EvaluateSpec(IImportDecisionEngineSpecification spec, LocalEpisode localEpisode) - { - try - { - var result = spec.IsSatisfiedBy(localEpisode); - - if (!result.Accepted) - { - return new Rejection(result.Reason); - } - } - catch (Exception e) - { - //e.Data.Add("report", remoteEpisode.Report.ToJson()); - //e.Data.Add("parsed", remoteEpisode.ParsedEpisodeInfo.ToJson()); - _logger.Error(e, "Couldn't evaluate decision on {0}", localEpisode.Path); - return new Rejection($"{spec.GetType().Name}: {e.Message}"); - } - - return null; - } - private bool ShouldUseFolderName(List musicFiles, Artist artist, ParsedTrackInfo folderInfo) { if (folderInfo == null) diff --git a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Manual/ManualImportCommand.cs b/src/NzbDrone.Core/MediaFiles/TrackImport/Manual/ManualImportCommand.cs similarity index 66% rename from src/NzbDrone.Core/MediaFiles/EpisodeImport/Manual/ManualImportCommand.cs rename to src/NzbDrone.Core/MediaFiles/TrackImport/Manual/ManualImportCommand.cs index 28168385f..bf7851268 100644 --- a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Manual/ManualImportCommand.cs +++ b/src/NzbDrone.Core/MediaFiles/TrackImport/Manual/ManualImportCommand.cs @@ -1,8 +1,7 @@ -using System.Collections.Generic; +using System.Collections.Generic; using NzbDrone.Core.Messaging.Commands; -using NzbDrone.Core.MediaFiles.TrackImport; -namespace NzbDrone.Core.MediaFiles.EpisodeImport.Manual +namespace NzbDrone.Core.MediaFiles.TrackImport.Manual { public class ManualImportCommand : Command { diff --git a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Manual/ManualImportFile.cs b/src/NzbDrone.Core/MediaFiles/TrackImport/Manual/ManualImportFile.cs similarity index 77% rename from src/NzbDrone.Core/MediaFiles/EpisodeImport/Manual/ManualImportFile.cs rename to src/NzbDrone.Core/MediaFiles/TrackImport/Manual/ManualImportFile.cs index 4c9fecc7c..44eb491c3 100644 --- a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Manual/ManualImportFile.cs +++ b/src/NzbDrone.Core/MediaFiles/TrackImport/Manual/ManualImportFile.cs @@ -1,7 +1,7 @@ -using System.Collections.Generic; +using System.Collections.Generic; using NzbDrone.Core.Qualities; -namespace NzbDrone.Core.MediaFiles.EpisodeImport.Manual +namespace NzbDrone.Core.MediaFiles.TrackImport.Manual { public class ManualImportFile { diff --git a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Manual/ManualImportItem.cs b/src/NzbDrone.Core/MediaFiles/TrackImport/Manual/ManualImportItem.cs similarity index 86% rename from src/NzbDrone.Core/MediaFiles/EpisodeImport/Manual/ManualImportItem.cs rename to src/NzbDrone.Core/MediaFiles/TrackImport/Manual/ManualImportItem.cs index bd3954816..9d335f258 100644 --- a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Manual/ManualImportItem.cs +++ b/src/NzbDrone.Core/MediaFiles/TrackImport/Manual/ManualImportItem.cs @@ -1,9 +1,9 @@ -using System.Collections.Generic; +using System.Collections.Generic; using NzbDrone.Core.DecisionEngine; using NzbDrone.Core.Qualities; using NzbDrone.Core.Tv; -namespace NzbDrone.Core.MediaFiles.EpisodeImport.Manual +namespace NzbDrone.Core.MediaFiles.TrackImport.Manual { public class ManualImportItem { diff --git a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Manual/ManualImportService.cs b/src/NzbDrone.Core/MediaFiles/TrackImport/Manual/ManualImportService.cs similarity index 99% rename from src/NzbDrone.Core/MediaFiles/EpisodeImport/Manual/ManualImportService.cs rename to src/NzbDrone.Core/MediaFiles/TrackImport/Manual/ManualImportService.cs index a12c841ea..b259d7745 100644 --- a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Manual/ManualImportService.cs +++ b/src/NzbDrone.Core/MediaFiles/TrackImport/Manual/ManualImportService.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.IO; using System.Linq; @@ -15,9 +15,8 @@ using NzbDrone.Core.Messaging.Events; using NzbDrone.Core.Parser; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Tv; -using NzbDrone.Core.MediaFiles.TrackImport; -namespace NzbDrone.Core.MediaFiles.EpisodeImport.Manual +namespace NzbDrone.Core.MediaFiles.TrackImport.Manual { public interface IManualImportService { diff --git a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Manual/ManuallyImportedFile.cs b/src/NzbDrone.Core/MediaFiles/TrackImport/Manual/ManuallyImportedFile.cs similarity index 53% rename from src/NzbDrone.Core/MediaFiles/EpisodeImport/Manual/ManuallyImportedFile.cs rename to src/NzbDrone.Core/MediaFiles/TrackImport/Manual/ManuallyImportedFile.cs index 4780240e2..d5c3b622e 100644 --- a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Manual/ManuallyImportedFile.cs +++ b/src/NzbDrone.Core/MediaFiles/TrackImport/Manual/ManuallyImportedFile.cs @@ -1,7 +1,6 @@ -using NzbDrone.Core.Download.TrackedDownloads; -using NzbDrone.Core.MediaFiles.TrackImport; +using NzbDrone.Core.Download.TrackedDownloads; -namespace NzbDrone.Core.MediaFiles.EpisodeImport.Manual +namespace NzbDrone.Core.MediaFiles.TrackImport.Manual { public class ManuallyImportedFile { diff --git a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/FreeSpaceSpecification.cs b/src/NzbDrone.Core/MediaFiles/TrackImport/Specifications/FreeSpaceSpecification.cs similarity index 56% rename from src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/FreeSpaceSpecification.cs rename to src/NzbDrone.Core/MediaFiles/TrackImport/Specifications/FreeSpaceSpecification.cs index 6e9695d34..adaa4a0bf 100644 --- a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/FreeSpaceSpecification.cs +++ b/src/NzbDrone.Core/MediaFiles/TrackImport/Specifications/FreeSpaceSpecification.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.IO; using NLog; using NzbDrone.Common.Disk; @@ -6,7 +6,7 @@ using NzbDrone.Core.Configuration; using NzbDrone.Core.DecisionEngine; using NzbDrone.Core.Parser.Model; -namespace NzbDrone.Core.MediaFiles.EpisodeImport.Specifications +namespace NzbDrone.Core.MediaFiles.TrackImport.Specifications { public class FreeSpaceSpecification : IImportDecisionEngineSpecification { @@ -21,49 +21,6 @@ namespace NzbDrone.Core.MediaFiles.EpisodeImport.Specifications _logger = logger; } - public Decision IsSatisfiedBy(LocalEpisode localEpisode) - { - if (_configService.SkipFreeSpaceCheckWhenImporting) - { - _logger.Debug("Skipping free space check when importing"); - return Decision.Accept(); - } - - try - { - if (localEpisode.ExistingFile) - { - _logger.Debug("Skipping free space check for existing episode"); - return Decision.Accept(); - } - - var path = Directory.GetParent(localEpisode.Series.Path); - var freeSpace = _diskProvider.GetAvailableSpace(path.FullName); - - if (!freeSpace.HasValue) - { - _logger.Debug("Free space check returned an invalid result for: {0}", path); - return Decision.Accept(); - } - - if (freeSpace < localEpisode.Size + 100.Megabytes()) - { - _logger.Warn("Not enough free space ({0}) to import: {1} ({2})", freeSpace, localEpisode, localEpisode.Size); - return Decision.Reject("Not enough free space"); - } - } - catch (DirectoryNotFoundException ex) - { - _logger.Error(ex, "Unable to check free disk space while importing."); - } - catch (Exception ex) - { - _logger.Error(ex, "Unable to check free disk space while importing. {0}", localEpisode.Path); - } - - return Decision.Accept(); - } - public Decision IsSatisfiedBy(LocalTrack localTrack) { if (_configService.SkipFreeSpaceCheckWhenImporting) @@ -76,7 +33,7 @@ namespace NzbDrone.Core.MediaFiles.EpisodeImport.Specifications { if (localTrack.ExistingFile) { - _logger.Debug("Skipping free space check for existing episode"); + _logger.Debug("Skipping free space check for existing track"); return Decision.Accept(); } diff --git a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/NotUnpackingSpecification.cs b/src/NzbDrone.Core/MediaFiles/TrackImport/Specifications/NotUnpackingSpecification.cs similarity index 77% rename from src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/NotUnpackingSpecification.cs rename to src/NzbDrone.Core/MediaFiles/TrackImport/Specifications/NotUnpackingSpecification.cs index 2694b89d0..37e1139fb 100644 --- a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/NotUnpackingSpecification.cs +++ b/src/NzbDrone.Core/MediaFiles/TrackImport/Specifications/NotUnpackingSpecification.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.IO; using NLog; using NzbDrone.Common.Disk; @@ -7,7 +7,7 @@ using NzbDrone.Core.Configuration; using NzbDrone.Core.DecisionEngine; using NzbDrone.Core.Parser.Model; -namespace NzbDrone.Core.MediaFiles.EpisodeImport.Specifications +namespace NzbDrone.Core.MediaFiles.TrackImport.Specifications { public class NotUnpackingSpecification : IImportDecisionEngineSpecification { @@ -22,30 +22,30 @@ namespace NzbDrone.Core.MediaFiles.EpisodeImport.Specifications _logger = logger; } - public Decision IsSatisfiedBy(LocalEpisode localEpisode) + public Decision IsSatisfiedBy(LocalTrack localTrack) { - if (localEpisode.ExistingFile) + if (localTrack.ExistingFile) { - _logger.Debug("{0} is in series folder, skipping unpacking check", localEpisode.Path); + _logger.Debug("{0} is in artist folder, skipping unpacking check", localTrack.Path); return Decision.Accept(); } foreach (var workingFolder in _configService.DownloadClientWorkingFolders.Split('|')) { - DirectoryInfo parent = Directory.GetParent(localEpisode.Path); + DirectoryInfo parent = Directory.GetParent(localTrack.Path); while (parent != null) { if (parent.Name.StartsWith(workingFolder)) { if (OsInfo.IsNotWindows) { - _logger.Debug("{0} is still being unpacked", localEpisode.Path); + _logger.Debug("{0} is still being unpacked", localTrack.Path); return Decision.Reject("File is still being unpacked"); } - if (_diskProvider.FileGetLastWrite(localEpisode.Path) > DateTime.UtcNow.AddMinutes(-5)) + if (_diskProvider.FileGetLastWrite(localTrack.Path) > DateTime.UtcNow.AddMinutes(-5)) { - _logger.Debug("{0} appears to be unpacking still", localEpisode.Path); + _logger.Debug("{0} appears to be unpacking still", localTrack.Path); return Decision.Reject("File is still being unpacked"); } } @@ -56,11 +56,5 @@ namespace NzbDrone.Core.MediaFiles.EpisodeImport.Specifications return Decision.Accept(); } - - public Decision IsSatisfiedBy(LocalTrack localTrack) - { - return Decision.Accept(); - throw new NotImplementedException(); - } } } diff --git a/src/NzbDrone.Core/MediaFiles/TrackImport/Specifications/SameTracksImportSpecification.cs b/src/NzbDrone.Core/MediaFiles/TrackImport/Specifications/SameTracksImportSpecification.cs index fd6cf794d..28815e87d 100644 --- a/src/NzbDrone.Core/MediaFiles/TrackImport/Specifications/SameTracksImportSpecification.cs +++ b/src/NzbDrone.Core/MediaFiles/TrackImport/Specifications/SameTracksImportSpecification.cs @@ -1,10 +1,9 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text; using NLog; using NzbDrone.Core.DecisionEngine; -using NzbDrone.Core.MediaFiles.EpisodeImport; using NzbDrone.Core.Parser.Model; namespace NzbDrone.Core.MediaFiles.TrackImport.Specifications @@ -22,11 +21,6 @@ namespace NzbDrone.Core.MediaFiles.TrackImport.Specifications public RejectionType Type => RejectionType.Permanent; - public Decision IsSatisfiedBy(LocalEpisode localEpisode) - { - throw new NotImplementedException(); - } - public Decision IsSatisfiedBy(LocalTrack localTrack) { if (_sameTracksSpecification.IsSatisfiedBy(localTrack.Tracks)) diff --git a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/UpgradeSpecification.cs b/src/NzbDrone.Core/MediaFiles/TrackImport/Specifications/UpgradeSpecification.cs similarity index 58% rename from src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/UpgradeSpecification.cs rename to src/NzbDrone.Core/MediaFiles/TrackImport/Specifications/UpgradeSpecification.cs index c0eaa6a92..5e1ec2f74 100644 --- a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/UpgradeSpecification.cs +++ b/src/NzbDrone.Core/MediaFiles/TrackImport/Specifications/UpgradeSpecification.cs @@ -1,11 +1,11 @@ -using System; +using System; using System.Linq; using NLog; using NzbDrone.Core.DecisionEngine; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Qualities; -namespace NzbDrone.Core.MediaFiles.EpisodeImport.Specifications +namespace NzbDrone.Core.MediaFiles.TrackImport.Specifications { public class UpgradeSpecification : IImportDecisionEngineSpecification { @@ -27,17 +27,5 @@ namespace NzbDrone.Core.MediaFiles.EpisodeImport.Specifications return Decision.Accept(); } - - public Decision IsSatisfiedBy(LocalEpisode localEpisode) - { - var qualityComparer = new QualityModelComparer(localEpisode.Series.Profile); - if (localEpisode.Episodes.Any(e => e.EpisodeFileId != 0 && qualityComparer.Compare(e.EpisodeFile.Value.Quality, localEpisode.Quality) > 0)) - { - _logger.Debug("This file isn't an upgrade for all episodes. Skipping {0}", localEpisode.Path); - return Decision.Reject("Not an upgrade for existing episode file(s)"); - } - - return Decision.Accept(); - } } } diff --git a/src/NzbDrone.Core/NzbDrone.Core.csproj b/src/NzbDrone.Core/NzbDrone.Core.csproj index 30d7b7cfe..737531f03 100644 --- a/src/NzbDrone.Core/NzbDrone.Core.csproj +++ b/src/NzbDrone.Core/NzbDrone.Core.csproj @@ -743,20 +743,19 @@ - - - + + + - - - - - - - - - - + + + + + + + + +