diff options
| author | Luke <luke.pulverenti@gmail.com> | 2017-04-07 15:26:59 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-04-07 15:26:59 -0400 |
| commit | 7c55cd08cbfc1c4a6ba2823007432316e1efce8d (patch) | |
| tree | b045a71d84deeb89a85975d34a7a2ded2642c0d5 /Emby.Server.Implementations/FileOrganization/TvFolderOrganizer.cs | |
| parent | 66e901ef93942c631c3ee3b222cc75265e1b17fb (diff) | |
| parent | 6f7d8bb742f3594bdca16fa5c20c55707edad158 (diff) | |
Merge pull request #2567 from MediaBrowser/beta
Beta
Diffstat (limited to 'Emby.Server.Implementations/FileOrganization/TvFolderOrganizer.cs')
| -rw-r--r-- | Emby.Server.Implementations/FileOrganization/TvFolderOrganizer.cs | 36 |
1 files changed, 31 insertions, 5 deletions
diff --git a/Emby.Server.Implementations/FileOrganization/TvFolderOrganizer.cs b/Emby.Server.Implementations/FileOrganization/TvFolderOrganizer.cs index 2850c3a61..2cbf2613e 100644 --- a/Emby.Server.Implementations/FileOrganization/TvFolderOrganizer.cs +++ b/Emby.Server.Implementations/FileOrganization/TvFolderOrganizer.cs @@ -53,9 +53,29 @@ namespace Emby.Server.Implementations.FileOrganization return false; } + private bool IsValidWatchLocation(string path, List<string> libraryFolderPaths) + { + if (IsPathAlreadyInMediaLibrary(path, libraryFolderPaths)) + { + _logger.Info("Folder {0} is not eligible for auto-organize because it is also part of an Emby library", path); + return false; + } + + return true; + } + + private bool IsPathAlreadyInMediaLibrary(string path, List<string> libraryFolderPaths) + { + return libraryFolderPaths.Any(i => string.Equals(i, path, StringComparison.Ordinal) || _fileSystem.ContainsSubPath(i, path)); + } + public async Task Organize(AutoOrganizeOptions options, CancellationToken cancellationToken, IProgress<double> progress) { - var watchLocations = options.TvOptions.WatchLocations.ToList(); + var libraryFolderPaths = _libraryManager.GetVirtualFolders().SelectMany(i => i.Locations).ToList(); + + var watchLocations = options.TvOptions.WatchLocations + .Where(i => IsValidWatchLocation(i, libraryFolderPaths)) + .ToList(); var eligibleFiles = watchLocations.SelectMany(GetFilesToOrganize) .OrderBy(_fileSystem.GetCreationTimeUtc) @@ -72,17 +92,24 @@ namespace Emby.Server.Implementations.FileOrganization foreach (var file in eligibleFiles) { + cancellationToken.ThrowIfCancellationRequested(); + var organizer = new EpisodeFileOrganizer(_organizationService, _config, _fileSystem, _logger, _libraryManager, _libraryMonitor, _providerManager); try { var result = await organizer.OrganizeEpisodeFile(file.FullName, options, options.TvOptions.OverwriteExistingEpisodes, cancellationToken).ConfigureAwait(false); + if (result.Status == FileSortingStatus.Success && !processedFolders.Contains(file.DirectoryName, StringComparer.OrdinalIgnoreCase)) { processedFolders.Add(file.DirectoryName); } } + catch (OperationCanceledException) + { + break; + } catch (Exception ex) { _logger.ErrorException("Error organizing episode {0}", ex, file.FullName); @@ -151,19 +178,18 @@ namespace Emby.Server.Implementations.FileOrganization /// <param name="extensions">The extensions.</param> private void DeleteLeftOverFiles(string path, IEnumerable<string> extensions) { - var eligibleFiles = _fileSystem.GetFiles(path, true) - .Where(i => extensions.Contains(i.Extension, StringComparer.OrdinalIgnoreCase)) + var eligibleFiles = _fileSystem.GetFilePaths(path, extensions.ToArray(), false, true) .ToList(); foreach (var file in eligibleFiles) { try { - _fileSystem.DeleteFile(file.FullName); + _fileSystem.DeleteFile(file); } catch (Exception ex) { - _logger.ErrorException("Error deleting file {0}", ex, file.FullName); + _logger.ErrorException("Error deleting file {0}", ex, file); } } } |
