Browse Source

Don't expect `BaseItem` to be a movie/video file.

This fix is mainly so I can mass-add series _and_ movie entries using a
`IMultiItemResolver` without having to resort to complicated logic
using _both_ a `IItemResolver` and a `IMultiItemResolver` by splitting
up what gets added where.

I've also added three new interface methods to the `IDirectoryService`,
one of which is used in the modified
`ResolverHelper.SetInitialItemValues(…)` to get the file system entry
info for the item regardless of which type the file system entry is.

In my local testing so far I haven't found any issues introduced
by this change.
Mikal Stordal 1 year ago
parent
commit
0cf8b376ac

+ 1 - 1
Emby.Server.Implementations/Library/ResolverHelper.cs

@@ -39,7 +39,7 @@ namespace Emby.Server.Implementations.Library
                 item.GetParents().Any(i => i.IsLocked);
 
             // Make sure DateCreated and DateModified have values
-            var fileInfo = directoryService.GetFile(item.Path);
+            var fileInfo = directoryService.GetFileSystemEntry(item.Path);
             if (fileInfo is null)
             {
                 return false;

+ 13 - 1
MediaBrowser.Controller/Providers/DirectoryService.cs

@@ -61,10 +61,22 @@ namespace MediaBrowser.Controller.Providers
         }
 
         public FileSystemMetadata? GetFile(string path)
+        {
+            var entry = GetFileSystemEntry(path);
+            return entry != null && !entry.IsDirectory ? entry : null;
+        }
+
+        public FileSystemMetadata? GetDirectory(string path)
+        {
+            var entry = GetFileSystemEntry(path);
+            return entry != null && entry.IsDirectory ? entry : null;
+        }
+
+        public FileSystemMetadata? GetFileSystemEntry(string path)
         {
             if (!_fileCache.TryGetValue(path, out var result))
             {
-                var file = _fileSystem.GetFileInfo(path);
+                var file = _fileSystem.GetFileSystemInfo(path);
                 if (file.Exists)
                 {
                     result = file;

+ 4 - 0
MediaBrowser.Controller/Providers/IDirectoryService.cs

@@ -15,6 +15,10 @@ namespace MediaBrowser.Controller.Providers
 
         FileSystemMetadata? GetFile(string path);
 
+        FileSystemMetadata? GetDirectory(string path);
+
+        FileSystemMetadata? GetFileSystemEntry(string path);
+
         IReadOnlyList<string> GetFilePaths(string path);
 
         IReadOnlyList<string> GetFilePaths(string path, bool clearCache, bool sort = false);