From 584a96a4f20530d3c091c9f0a0acc72c1716e3f5 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Tue, 21 Jun 2011 20:40:24 -0700 Subject: [PATCH] CalculateFilePath will use configured season folder, with tests. MoveFile creates folder before move. --- NzbDrone.Core.Test/MediaFileProviderTests.cs | 28 +++++++++++++++++--- NzbDrone.Core/Providers/DiskScanProvider.cs | 5 ++-- NzbDrone.Core/Providers/MediaFileProvider.cs | 6 ++++- 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/NzbDrone.Core.Test/MediaFileProviderTests.cs b/NzbDrone.Core.Test/MediaFileProviderTests.cs index 999359d97..2dfd46b31 100644 --- a/NzbDrone.Core.Test/MediaFileProviderTests.cs +++ b/NzbDrone.Core.Test/MediaFileProviderTests.cs @@ -25,9 +25,6 @@ namespace NzbDrone.Core.Test // ReSharper disable InconsistentNaming public class MediaFileProviderTests : TestBase { - - - [Test] public void get_series_files() { @@ -136,5 +133,30 @@ namespace NzbDrone.Core.Test result.Should().OnlyContain(e => e.EpisodeFileId > 0); ExceptionVerification.ExcpectedWarns(1); } + + [Test] + [TestCase("30 Rock - S01E05 - Episode Title", 1, true, "Season %0s", @"C:\Test\30 Rock\Season 01\30 Rock - S01E05 - Episode Title.mkv")] + [TestCase("30 Rock - S01E05 - Episode Title", 1, true, "Season %s", @"C:\Test\30 Rock\Season 1\30 Rock - S01E05 - Episode Title.mkv")] + [TestCase("30 Rock - S01E05 - Episode Title", 1, false, "Season %0s", @"C:\Test\30 Rock\30 Rock - S01E05 - Episode Title.mkv")] + [TestCase("30 Rock - S01E05 - Episode Title", 1, false, "Season %s", @"C:\Test\30 Rock\30 Rock - S01E05 - Episode Title.mkv")] + [TestCase("30 Rock - S01E05 - Episode Title", 1, true, "ReallyUglySeasonFolder %s", @"C:\Test\30 Rock\ReallyUglySeasonFolder 1\30 Rock - S01E05 - Episode Title.mkv")] + public void CalculateFilePath_SeasonFolder_SingleNumber(string filename, int seasonNumber, bool useSeasonFolder, string seasonFolderFormat, string expectedPath) + { + //Setup + var fakeSeries = Builder.CreateNew() + .With(s => s.Title = "30 Rock") + .With(s => s.Path = @"C:\Test\30 Rock") + .With(s => s.SeasonFolder = useSeasonFolder) + .Build(); + + var mocker = new AutoMoqer(); + mocker.GetMock().Setup(e => e.SeasonFolderFormat).Returns(seasonFolderFormat); + + //Act + var result = mocker.Resolve().CalculateFilePath(fakeSeries, 1, filename, ".mkv"); + + //Assert + Assert.AreEqual(expectedPath, result.FullName); + } } } \ No newline at end of file diff --git a/NzbDrone.Core/Providers/DiskScanProvider.cs b/NzbDrone.Core/Providers/DiskScanProvider.cs index be123a816..b1b20a908 100644 --- a/NzbDrone.Core/Providers/DiskScanProvider.cs +++ b/NzbDrone.Core/Providers/DiskScanProvider.cs @@ -142,7 +142,6 @@ namespace NzbDrone.Core.Providers return episodeFile; } - public virtual bool MoveEpisodeFile(EpisodeFile episodeFile) { if (episodeFile == null) @@ -153,6 +152,9 @@ namespace NzbDrone.Core.Providers string newFileName = _mediaFileProvider.GetNewFilename(episodes, series.Title, episodeFile.Quality); var newFile = _mediaFileProvider.CalculateFilePath(series, episodes.First().SeasonNumber, newFileName, Path.GetExtension(episodeFile.Path)); + //Ensure the folder Exists before trying to move it (No error is thrown if the folder already exists) + _diskProvider.CreateDirectory(newFile.DirectoryName); + //Do the rename Logger.Trace("Attempting to rename {0} to {1}", episodeFile.Path, newFile.FullName); _diskProvider.MoveFile(episodeFile.Path, newFile.FullName); @@ -164,7 +166,6 @@ namespace NzbDrone.Core.Providers return true; } - /// /// Removes files that no longer exist on disk from the database /// diff --git a/NzbDrone.Core/Providers/MediaFileProvider.cs b/NzbDrone.Core/Providers/MediaFileProvider.cs index d734bb988..81dc4c9ff 100644 --- a/NzbDrone.Core/Providers/MediaFileProvider.cs +++ b/NzbDrone.Core/Providers/MediaFileProvider.cs @@ -83,7 +83,11 @@ namespace NzbDrone.Core.Providers string path = series.Path; if (series.SeasonFolder) { - path = Path.Combine(path, "Season " + seasonNumber); + var seasonFolder = _configProvider.SeasonFolderFormat + .Replace("%0s", seasonNumber.ToString("00")) + .Replace("%s", seasonNumber.ToString()); + + path = Path.Combine(path, seasonFolder); } path = Path.Combine(path, fileName + extention);