From 40e413d575236ce12c7d4824fb07da6d812b8f05 Mon Sep 17 00:00:00 2001 From: Cody Robibero Date: Sun, 27 Feb 2022 19:45:15 -0700 Subject: [PATCH] Only add internal files if the internal metadata path exists Signed-off-by: Cody Robibero --- MediaBrowser.Controller/Providers/DirectoryService.cs | 5 +++++ .../Providers/IDirectoryService.cs | 7 +++++++ MediaBrowser.Providers/MediaInfo/MediaInfoResolver.cs | 8 ++++++-- .../MediaInfo/MediaInfoResolverTests.cs | 11 +++++++++++ 4 files changed, 29 insertions(+), 2 deletions(-) diff --git a/MediaBrowser.Controller/Providers/DirectoryService.cs b/MediaBrowser.Controller/Providers/DirectoryService.cs index d4de97651f..cfbcfa2741 100644 --- a/MediaBrowser.Controller/Providers/DirectoryService.cs +++ b/MediaBrowser.Controller/Providers/DirectoryService.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Concurrent; using System.Collections.Generic; +using System.IO; using System.Linq; using MediaBrowser.Model.IO; @@ -78,5 +79,9 @@ namespace MediaBrowser.Controller.Providers return filePaths; } + + /// + public bool PathExists(string path) + => Directory.Exists(path); } } diff --git a/MediaBrowser.Controller/Providers/IDirectoryService.cs b/MediaBrowser.Controller/Providers/IDirectoryService.cs index 48d6276918..e5428a0356 100644 --- a/MediaBrowser.Controller/Providers/IDirectoryService.cs +++ b/MediaBrowser.Controller/Providers/IDirectoryService.cs @@ -16,5 +16,12 @@ namespace MediaBrowser.Controller.Providers IReadOnlyList GetFilePaths(string path); IReadOnlyList GetFilePaths(string path, bool clearCache, bool sort = false); + + /// + /// Does the path exist. + /// + /// The path. + /// Whether the path exists. + bool PathExists(string path); } } diff --git a/MediaBrowser.Providers/MediaInfo/MediaInfoResolver.cs b/MediaBrowser.Providers/MediaInfo/MediaInfoResolver.cs index 40b45faf52..e4f74d5f28 100644 --- a/MediaBrowser.Providers/MediaInfo/MediaInfoResolver.cs +++ b/MediaBrowser.Providers/MediaInfo/MediaInfoResolver.cs @@ -148,7 +148,7 @@ namespace MediaBrowser.Providers.MediaInfo // Check if video folder exists string folder = video.ContainingFolderPath; - if (!Directory.Exists(folder)) + if (!directoryService.PathExists(folder)) { return Array.Empty(); } @@ -156,7 +156,11 @@ namespace MediaBrowser.Providers.MediaInfo var externalPathInfos = new List(); var files = directoryService.GetFilePaths(folder, clearCache).ToList(); - files.AddRange(directoryService.GetFilePaths(video.GetInternalMetadataPath(), clearCache)); + var internalMetadataPath = video.GetInternalMetadataPath(); + if (directoryService.PathExists(internalMetadataPath)) + { + files.AddRange(directoryService.GetFilePaths(video.GetInternalMetadataPath(), clearCache)); + } if (!files.Any()) { diff --git a/tests/Jellyfin.Providers.Tests/MediaInfo/MediaInfoResolverTests.cs b/tests/Jellyfin.Providers.Tests/MediaInfo/MediaInfoResolverTests.cs index 926ec5c91b..9cc6e5e994 100644 --- a/tests/Jellyfin.Providers.Tests/MediaInfo/MediaInfoResolverTests.cs +++ b/tests/Jellyfin.Providers.Tests/MediaInfo/MediaInfoResolverTests.cs @@ -150,6 +150,8 @@ public class MediaInfoResolverTests var directoryService = new Mock(MockBehavior.Strict); directoryService.Setup(ds => ds.GetFilePaths(It.IsAny(), It.IsAny(), It.IsAny())) .Returns(Array.Empty()); + directoryService.Setup(ds => ds.PathExists(It.IsAny())) + .Returns(true); var mediaEncoder = Mock.Of(MockBehavior.Strict); @@ -299,6 +301,10 @@ public class MediaInfoResolverTests .Returns(files); directoryService.Setup(ds => ds.GetFilePaths(It.IsRegex(MetadataDirectoryRegex), It.IsAny(), It.IsAny())) .Returns(Array.Empty()); + directoryService.Setup(ds => ds.PathExists(It.IsRegex(MetadataDirectoryRegex))) + .Returns(true); + directoryService.Setup(ds => ds.PathExists(It.IsRegex(VideoDirectoryRegex))) + .Returns(true); List GenerateMediaStreams() { @@ -370,6 +376,11 @@ public class MediaInfoResolverTests .Returns(Array.Empty()); } + directoryService.Setup(ds => ds.PathExists(It.IsRegex(MetadataDirectoryRegex))) + .Returns(true); + directoryService.Setup(ds => ds.PathExists(It.IsRegex(VideoDirectoryRegex))) + .Returns(true); + return directoryService.Object; } }