From 72aac6e551a8f2d6526fde07e235369a9377a2fc Mon Sep 17 00:00:00 2001 From: Tim Turner Date: Wed, 25 Jan 2017 19:03:40 -0500 Subject: [PATCH] Update Rename Preview to support folder renaming --- .../MediaFiles/RenameMovieFileService.cs | 5 +-- .../Organizer/FileNameBuilder.cs | 31 +++++++++++++++++-- src/UI/Rename/RenamePreviewFormatView.js | 1 + .../RenamePreviewFormatViewTemplate.hbs | 1 + src/UI/Rename/RenamePreviewLayoutTemplate.hbs | 2 +- 5 files changed, 34 insertions(+), 6 deletions(-) diff --git a/src/NzbDrone.Core/MediaFiles/RenameMovieFileService.cs b/src/NzbDrone.Core/MediaFiles/RenameMovieFileService.cs index 9a4019f56c..38036cf5a2 100644 --- a/src/NzbDrone.Core/MediaFiles/RenameMovieFileService.cs +++ b/src/NzbDrone.Core/MediaFiles/RenameMovieFileService.cs @@ -71,8 +71,9 @@ private IEnumerable GetPreviews(Movie movie, List>(FileNameBuilderTokenEqualityComparer.Instance); AddMovieTokens(tokenHandlers, movie); - AddReleaseDateTokens(tokenHandlers, movie.Year); //In case we want to separate the year + AddReleaseDateTokens(tokenHandlers, movie.Year); AddImdbIdTokens(tokenHandlers, movie.ImdbId); AddQualityTokens(tokenHandlers, movie, movieFile); AddMediaInfoTokens(tokenHandlers, movieFile); @@ -186,11 +185,37 @@ public string BuildFilePath(Movie movie, string fileName, string extension) { Ensure.That(extension, () => extension).IsNotNullOrWhiteSpace(); - var path = movie.Path; + var path = BuildMoviePath(movie); return Path.Combine(path, fileName + extension); } + public string BuildMoviePath(Movie movie) + { + var path = movie.Path; + var directory = new DirectoryInfo(path).Name; + var parentDirectoryPath = new DirectoryInfo(path).Parent.FullName; + var namingConfig = _namingConfigService.GetConfig(); + + var movieFile = movie.MovieFile; + + var pattern = namingConfig.MovieFolderFormat; + var tokenHandlers = new Dictionary>(FileNameBuilderTokenEqualityComparer.Instance); + + AddMovieTokens(tokenHandlers, movie); + AddReleaseDateTokens(tokenHandlers, movie.Year); + AddImdbIdTokens(tokenHandlers, movie.ImdbId); + AddQualityTokens(tokenHandlers, movie, movieFile); + AddMediaInfoTokens(tokenHandlers, movieFile); + AddMovieFileTokens(tokenHandlers, movieFile); + + var directoryName = ReplaceTokens(pattern, tokenHandlers, namingConfig).Trim(); + directoryName = FileNameCleanupRegex.Replace(directoryName, match => match.Captures[0].Value[0].ToString()); + directoryName = TrimSeparatorsRegex.Replace(directoryName, string.Empty); + + return Path.Combine(parentDirectoryPath, directoryName); + } + public string BuildSeasonPath(Series series, int seasonNumber) { var path = series.Path; diff --git a/src/UI/Rename/RenamePreviewFormatView.js b/src/UI/Rename/RenamePreviewFormatView.js index 5796e67485..141b42f8bd 100644 --- a/src/UI/Rename/RenamePreviewFormatView.js +++ b/src/UI/Rename/RenamePreviewFormatView.js @@ -9,6 +9,7 @@ module.exports = Marionette.ItemView.extend({ //var type = this.model.get('seriesType'); return { rename : this.naming.get('renameEpisodes'), + folderFormat: this.naming.get('movieFolderFormat'), format : this.naming.get('standardMovieFormat') }; }, diff --git a/src/UI/Rename/RenamePreviewFormatViewTemplate.hbs b/src/UI/Rename/RenamePreviewFormatViewTemplate.hbs index 77297f56b6..99a1f6462b 100644 --- a/src/UI/Rename/RenamePreviewFormatViewTemplate.hbs +++ b/src/UI/Rename/RenamePreviewFormatViewTemplate.hbs @@ -1,3 +1,4 @@ {{#if rename}} +Folder Naming pattern: {{folderFormat}}
Naming pattern: {{format}} {{/if}} diff --git a/src/UI/Rename/RenamePreviewLayoutTemplate.hbs b/src/UI/Rename/RenamePreviewLayoutTemplate.hbs index a3aa41d519..ee1f2571c7 100644 --- a/src/UI/Rename/RenamePreviewLayoutTemplate.hbs +++ b/src/UI/Rename/RenamePreviewLayoutTemplate.hbs @@ -9,7 +9,7 @@