diff options
Diffstat (limited to 'MediaBrowser.Server.Implementations/FileOrganization/TvFileSorter.cs')
| -rw-r--r-- | MediaBrowser.Server.Implementations/FileOrganization/TvFileSorter.cs | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/MediaBrowser.Server.Implementations/FileOrganization/TvFileSorter.cs b/MediaBrowser.Server.Implementations/FileOrganization/TvFileSorter.cs index 24e2c094b..72f0da207 100644 --- a/MediaBrowser.Server.Implementations/FileOrganization/TvFileSorter.cs +++ b/MediaBrowser.Server.Implementations/FileOrganization/TvFileSorter.cs @@ -1,6 +1,7 @@ using MediaBrowser.Common.IO; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.FileOrganization; +using MediaBrowser.Controller.IO; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Providers; using MediaBrowser.Controller.Resolvers; @@ -24,15 +25,17 @@ namespace MediaBrowser.Server.Implementations.FileOrganization private readonly ILogger _logger; private readonly IFileSystem _fileSystem; private readonly IFileOrganizationService _iFileSortingRepository; + private readonly IDirectoryWatchers _directoryWatchers; private static readonly CultureInfo UsCulture = new CultureInfo("en-US"); - public TvFileSorter(ILibraryManager libraryManager, ILogger logger, IFileSystem fileSystem, IFileOrganizationService iFileSortingRepository) + public TvFileSorter(ILibraryManager libraryManager, ILogger logger, IFileSystem fileSystem, IFileOrganizationService iFileSortingRepository, IDirectoryWatchers directoryWatchers) { _libraryManager = libraryManager; _logger = logger; _fileSystem = fileSystem; _iFileSortingRepository = iFileSortingRepository; + _directoryWatchers = directoryWatchers; } public async Task Sort(TvFileOrganizationOptions options, CancellationToken cancellationToken, IProgress<double> progress) @@ -48,6 +51,8 @@ namespace MediaBrowser.Server.Implementations.FileOrganization progress.Report(10); + var scanLibrary = false; + if (eligibleFiles.Count > 0) { var allSeries = _libraryManager.RootFolder @@ -59,7 +64,12 @@ namespace MediaBrowser.Server.Implementations.FileOrganization foreach (var file in eligibleFiles) { - await SortFile(file.FullName, options, allSeries).ConfigureAwait(false); + var result = await SortFile(file.FullName, options, allSeries).ConfigureAwait(false); + + if (result.Status == FileSortingStatus.Success) + { + scanLibrary = true; + } numComplete++; double percent = numComplete; @@ -88,6 +98,12 @@ namespace MediaBrowser.Server.Implementations.FileOrganization } } + if (scanLibrary) + { + await _libraryManager.ValidateMediaLibrary(new Progress<double>(), CancellationToken.None) + .ConfigureAwait(false); + } + progress.Report(100); } @@ -118,7 +134,7 @@ namespace MediaBrowser.Server.Implementations.FileOrganization /// <param name="path">The path.</param> /// <param name="options">The options.</param> /// <param name="allSeries">All series.</param> - private Task SortFile(string path, TvFileOrganizationOptions options, IEnumerable<Series> allSeries) + private async Task<FileOrganizationResult> SortFile(string path, TvFileOrganizationOptions options, IEnumerable<Series> allSeries) { _logger.Info("Sorting file {0}", path); @@ -169,7 +185,9 @@ namespace MediaBrowser.Server.Implementations.FileOrganization _logger.Warn(msg); } - return LogResult(result); + await LogResult(result).ConfigureAwait(false); + + return result; } /// <summary> @@ -236,6 +254,8 @@ namespace MediaBrowser.Server.Implementations.FileOrganization /// <param name="copy">if set to <c>true</c> [copy].</param> private void PerformFileSorting(TvFileOrganizationOptions options, FileOrganizationResult result, bool copy) { + _directoryWatchers.TemporarilyIgnore(result.TargetPath); + try { if (copy) @@ -250,11 +270,17 @@ namespace MediaBrowser.Server.Implementations.FileOrganization 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; } + finally + { + _directoryWatchers.RemoveTempIgnore(result.TargetPath); + } if (copy) { |
