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;
}
}