diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-01-19 13:31:03 -0500 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-01-19 13:31:03 -0500 |
| commit | ccf707e57b701b236c1dcb1f12e81486ccaa1aed (patch) | |
| tree | c2ebb593bc30c319b4a1e0d4ad24f54d713f1a77 /MediaBrowser.Server.Implementations/FileSorting/TvFileSorter.cs | |
| parent | d4bdd42acfda160e0a78ac302adc92802b237584 (diff) | |
#680 - Support new episode file sorting
Diffstat (limited to 'MediaBrowser.Server.Implementations/FileSorting/TvFileSorter.cs')
| -rw-r--r-- | MediaBrowser.Server.Implementations/FileSorting/TvFileSorter.cs | 55 |
1 files changed, 45 insertions, 10 deletions
diff --git a/MediaBrowser.Server.Implementations/FileSorting/TvFileSorter.cs b/MediaBrowser.Server.Implementations/FileSorting/TvFileSorter.cs index 679ab2c2d..093a1dba6 100644 --- a/MediaBrowser.Server.Implementations/FileSorting/TvFileSorter.cs +++ b/MediaBrowser.Server.Implementations/FileSorting/TvFileSorter.cs @@ -35,11 +35,13 @@ namespace MediaBrowser.Server.Implementations.FileSorting _iFileSortingRepository = iFileSortingRepository; } - public async Task Sort(FileSortingOptions options, CancellationToken cancellationToken, IProgress<double> progress) + public async Task Sort(TvFileSortingOptions options, CancellationToken cancellationToken, IProgress<double> progress) { var minFileBytes = options.MinFileSizeMb * 1024 * 1024; - var eligibleFiles = options.TvWatchLocations.SelectMany(GetFilesToSort) + var watchLocations = options.WatchLocations.ToList(); + + var eligibleFiles = watchLocations.SelectMany(GetFilesToSort) .OrderBy(_fileSystem.GetCreationTimeUtc) .Where(i => EntityResolutionHelper.IsVideoFile(i.FullName) && i.Length >= minFileBytes) .ToList(); @@ -72,7 +74,7 @@ namespace MediaBrowser.Server.Implementations.FileSorting if (!options.EnableTrialMode) { - foreach (var path in options.TvWatchLocations) + foreach (var path in watchLocations) { if (options.LeftOverFileExtensionsToDelete.Length > 0) { @@ -116,7 +118,7 @@ namespace MediaBrowser.Server.Implementations.FileSorting /// <param name="path">The path.</param> /// <param name="options">The options.</param> /// <param name="allSeries">All series.</param> - private Task SortFile(string path, FileSortingOptions options, IEnumerable<Series> allSeries) + private Task SortFile(string path, TvFileSortingOptions options, IEnumerable<Series> allSeries) { _logger.Info("Sorting file {0}", path); @@ -180,7 +182,7 @@ namespace MediaBrowser.Server.Implementations.FileSorting /// <param name="options">The options.</param> /// <param name="allSeries">All series.</param> /// <param name="result">The result.</param> - private void SortFile(string path, string seriesName, int seasonNumber, int episodeNumber, FileSortingOptions options, IEnumerable<Series> allSeries, FileSortingResult result) + private void SortFile(string path, string seriesName, int seasonNumber, int episodeNumber, TvFileSortingOptions options, IEnumerable<Series> allSeries, FileSortingResult result) { var series = GetMatchingSeries(seriesName, allSeries); @@ -216,13 +218,14 @@ namespace MediaBrowser.Server.Implementations.FileSorting return; } - if (!options.OverwriteExistingEpisodes && File.Exists(result.TargetPath)) + var targetExists = File.Exists(result.TargetPath); + if (!options.OverwriteExistingEpisodes && targetExists) { result.Status = FileSortingStatus.SkippedExisting; return; } - PerformFileSorting(options, result); + PerformFileSorting(options, result, targetExists); } /// <summary> @@ -230,8 +233,40 @@ namespace MediaBrowser.Server.Implementations.FileSorting /// </summary> /// <param name="options">The options.</param> /// <param name="result">The result.</param> - private void PerformFileSorting(FileSortingOptions options, FileSortingResult result) + /// <param name="copy">if set to <c>true</c> [copy].</param> + private void PerformFileSorting(TvFileSortingOptions options, FileSortingResult result, bool copy) { + try + { + if (copy) + { + File.Copy(result.OriginalPath, result.TargetPath, true); + } + else + { + File.Move(result.OriginalPath, result.TargetPath); + } + } + catch (Exception ex) + { + var errorMsg = string.Format("Failed to move file from {0} to {1}", result.OriginalPath, result.TargetPath); + result.Status = FileSortingStatus.Failure; + result.ErrorMessage = errorMsg; + _logger.ErrorException(errorMsg, ex); + return; + } + + if (copy) + { + try + { + File.Delete(result.OriginalPath); + } + catch (Exception ex) + { + _logger.ErrorException("Error deleting {0}", ex, result.OriginalPath); + } + } } /// <summary> @@ -252,7 +287,7 @@ namespace MediaBrowser.Server.Implementations.FileSorting /// <param name="episodeNumber">The episode number.</param> /// <param name="options">The options.</param> /// <returns>System.String.</returns> - private string GetNewPath(Series series, int seasonNumber, int episodeNumber, FileSortingOptions options) + private string GetNewPath(Series series, int seasonNumber, int episodeNumber, TvFileSortingOptions options) { var currentEpisodes = series.RecursiveChildren.OfType<Episode>() .Where(i => i.IndexNumber.HasValue && i.IndexNumber.Value == episodeNumber && i.ParentIndexNumber.HasValue && i.ParentIndexNumber.Value == seasonNumber) @@ -295,7 +330,7 @@ namespace MediaBrowser.Server.Implementations.FileSorting /// <param name="seasonNumber">The season number.</param> /// <param name="options">The options.</param> /// <returns>System.String.</returns> - private string GetSeasonFolderPath(Series series, int seasonNumber, FileSortingOptions options) + private string GetSeasonFolderPath(Series series, int seasonNumber, TvFileSortingOptions options) { // If there's already a season folder, use that var season = series |
