Browse Source

Auto-Organize Copy/Move Option, Fix for Overwrite Existing File

Addition of the option in Auto-Organize to copy or move files from watch
folder.
Fix to use the Overwrite Existing File option from the config rather
than hardcoded value.
Tensre 11 năm trước cách đây
mục cha
commit
1bf4447dce

+ 4 - 0
MediaBrowser.Model/Configuration/AutoOrganize.cs

@@ -19,6 +19,8 @@ namespace MediaBrowser.Model.Configuration
 
         public bool DeleteEmptyFolders { get; set; }
 
+        public bool CopyOriginalFile { get; set; }
+
         public TvFileOrganizationOptions()
         {
             MinFileSizeMb = 50;
@@ -31,6 +33,8 @@ namespace MediaBrowser.Model.Configuration
             MultiEpisodeNamePattern = "%sn - %sx%0e-x%0ed - %en.%ext";
             SeasonFolderPattern = "Season %s";
             SeasonZeroFolderName = "Season 0";
+
+            CopyOriginalFile = false;
         }
     }
 }

+ 42 - 7
MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs

@@ -171,14 +171,27 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
             var fileExists = File.Exists(result.TargetPath);
             var otherDuplicatePaths = GetOtherDuplicatePaths(result.TargetPath, series, seasonNumber, episodeNumber, endingEpiosdeNumber);
 
-            if (!overwriteExisting && (fileExists || otherDuplicatePaths.Count > 0))
+            if (!overwriteExisting)
             {
-                result.Status = FileSortingStatus.SkippedExisting;
-                result.StatusMessage = string.Empty;
-                result.DuplicatePaths = otherDuplicatePaths;
-                return;
+                if (fileExists || otherDuplicatePaths.Count > 0)
+                {
+                    result.Status = FileSortingStatus.SkippedExisting;
+                    result.StatusMessage = string.Empty;
+                    result.DuplicatePaths = otherDuplicatePaths;
+                    return;
+                }
+
+                if (options.CopyOriginalFile && fileExists && IsSameEpisode(sourcePath, newPath))
+                {
+                    _logger.Info("File {0} already copied to new path {1}, stopping organization", sourcePath, newPath);
+                    result.Status = FileSortingStatus.SkippedExisting;
+                    result.StatusMessage = string.Empty;
+                    return;
+                }
             }
 
+   
+
             PerformFileSorting(options, result);
 
             if (overwriteExisting)
@@ -266,7 +279,7 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
 
             try
             {
-                if (copy)
+                if (copy || options.CopyOriginalFile)
                 {
                     File.Copy(result.OriginalPath, result.TargetPath, true);
                 }
@@ -293,7 +306,7 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
                 _libraryMonitor.ReportFileSystemChangeComplete(result.TargetPath, true);
             }
 
-            if (copy)
+            if (copy && !options.CopyOriginalFile)
             {
                 try
                 {
@@ -439,5 +452,27 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
                 .Replace("%0e", episodeNumber.ToString("00", _usCulture))
                 .Replace("%00e", episodeNumber.ToString("000", _usCulture));
         }
+
+        private bool IsSameEpisode(string sourcePath, string newPath)
+        {
+
+                FileInfo sourceFileInfo = new FileInfo(sourcePath);
+                FileInfo destinationFileInfo = new FileInfo(newPath);
+
+                try
+                {
+                    if (sourceFileInfo.Length == destinationFileInfo.Length)
+                    {
+                        return true;
+                    }
+                }
+                catch (FileNotFoundException)
+                {
+                    return false;
+                }
+
+                return false;
+
+        }
     }
 }

+ 1 - 1
MediaBrowser.Server.Implementations/FileOrganization/TvFolderOrganizer.cs

@@ -61,7 +61,7 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
                     var organizer = new EpisodeFileOrganizer(_organizationService, _config, _fileSystem, _logger, _libraryManager,
                         _libraryMonitor, _providerManager);
 
-                    var result = await organizer.OrganizeEpisodeFile(file.FullName, options, false, cancellationToken).ConfigureAwait(false);
+                    var result = await organizer.OrganizeEpisodeFile(file.FullName, options, options.OverwriteExistingEpisodes, cancellationToken).ConfigureAwait(false);
 
                     if (result.Status == FileSortingStatus.Success)
                     {