aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/FileOrganization/TvFileSorter.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Server.Implementations/FileOrganization/TvFileSorter.cs')
-rw-r--r--MediaBrowser.Server.Implementations/FileOrganization/TvFileSorter.cs34
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)
{