Explorar o código

#1189 - Auto-Organize: Fix PathTooLongException due to long EpisodeTitle

Luke Pulverenti %!s(int64=9) %!d(string=hai) anos
pai
achega
5637142100

+ 17 - 6
MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs

@@ -182,7 +182,7 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
             _logger.Info("Sorting file {0} to new path {1}", sourcePath, newPath);
             _logger.Info("Sorting file {0} to new path {1}", sourcePath, newPath);
             result.TargetPath = newPath;
             result.TargetPath = newPath;
 
 
-			var fileExists = _fileSystem.FileExists(result.TargetPath);
+            var fileExists = _fileSystem.FileExists(result.TargetPath);
             var otherDuplicatePaths = GetOtherDuplicatePaths(result.TargetPath, series, seasonNumber, episodeNumber, endingEpiosdeNumber);
             var otherDuplicatePaths = GetOtherDuplicatePaths(result.TargetPath, series, seasonNumber, episodeNumber, endingEpiosdeNumber);
 
 
             if (!overwriteExisting)
             if (!overwriteExisting)
@@ -272,7 +272,7 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
 
 
                     var destination = Path.Combine(directory, filename);
                     var destination = Path.Combine(directory, filename);
 
 
-					_fileSystem.MoveFile(file, destination);
+                    _fileSystem.MoveFile(file, destination);
                 }
                 }
             }
             }
         }
         }
@@ -332,19 +332,19 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
         {
         {
             _libraryMonitor.ReportFileSystemChangeBeginning(result.TargetPath);
             _libraryMonitor.ReportFileSystemChangeBeginning(result.TargetPath);
 
 
-			_fileSystem.CreateDirectory(Path.GetDirectoryName(result.TargetPath));
+            _fileSystem.CreateDirectory(Path.GetDirectoryName(result.TargetPath));
 
 
-			var targetAlreadyExists = _fileSystem.FileExists(result.TargetPath);
+            var targetAlreadyExists = _fileSystem.FileExists(result.TargetPath);
 
 
             try
             try
             {
             {
                 if (targetAlreadyExists || options.CopyOriginalFile)
                 if (targetAlreadyExists || options.CopyOriginalFile)
                 {
                 {
-					_fileSystem.CopyFile(result.OriginalPath, result.TargetPath, true);
+                    _fileSystem.CopyFile(result.OriginalPath, result.TargetPath, true);
                 }
                 }
                 else
                 else
                 {
                 {
-					_fileSystem.MoveFile(result.OriginalPath, result.TargetPath);
+                    _fileSystem.MoveFile(result.OriginalPath, result.TargetPath);
                 }
                 }
 
 
                 result.Status = FileSortingStatus.Success;
                 result.Status = FileSortingStatus.Success;
@@ -439,6 +439,17 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
 
 
             newPath = Path.Combine(newPath, episodeFileName);
             newPath = Path.Combine(newPath, episodeFileName);
 
 
+            // Try to account for windows limitations by removing the episode title
+            if (newPath.Length > 255)
+            {
+                var extension = Path.GetExtension(episodeFileName);
+                var fileName = Path.GetFileNameWithoutExtension(episodeFileName);
+                fileName = fileName.Replace(episode.Name, string.Empty, StringComparison.OrdinalIgnoreCase);
+                episodeFileName = Path.ChangeExtension(fileName, extension);
+
+                newPath = Path.Combine(newPath, episodeFileName);
+            }
+
             return newPath;
             return newPath;
         }
         }