mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-07-09 03:04:24 -04:00
Merge pull request #11204 from revam/fix-resolver-helper-init-values
Don't expect `BaseItem` to be a movie/video file.
This commit is contained in:
commit
79e9fe112c
@ -39,7 +39,7 @@ namespace Emby.Server.Implementations.Library
|
|||||||
item.GetParents().Any(i => i.IsLocked);
|
item.GetParents().Any(i => i.IsLocked);
|
||||||
|
|
||||||
// Make sure DateCreated and DateModified have values
|
// Make sure DateCreated and DateModified have values
|
||||||
var fileInfo = directoryService.GetFile(item.Path);
|
var fileInfo = directoryService.GetFileSystemEntry(item.Path);
|
||||||
if (fileInfo is null)
|
if (fileInfo is null)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
@ -61,11 +61,23 @@ namespace MediaBrowser.Controller.Providers
|
|||||||
}
|
}
|
||||||
|
|
||||||
public FileSystemMetadata? GetFile(string path)
|
public FileSystemMetadata? GetFile(string path)
|
||||||
|
{
|
||||||
|
var entry = GetFileSystemEntry(path);
|
||||||
|
return entry is not null && !entry.IsDirectory ? entry : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public FileSystemMetadata? GetDirectory(string path)
|
||||||
|
{
|
||||||
|
var entry = GetFileSystemEntry(path);
|
||||||
|
return entry is not null && entry.IsDirectory ? entry : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public FileSystemMetadata? GetFileSystemEntry(string path)
|
||||||
{
|
{
|
||||||
if (!_fileCache.TryGetValue(path, out var result))
|
if (!_fileCache.TryGetValue(path, out var result))
|
||||||
{
|
{
|
||||||
var file = _fileSystem.GetFileInfo(path);
|
var file = _fileSystem.GetFileSystemInfo(path);
|
||||||
if (file.Exists)
|
if (file?.Exists ?? false)
|
||||||
{
|
{
|
||||||
result = file;
|
result = file;
|
||||||
_fileCache.TryAdd(path, result);
|
_fileCache.TryAdd(path, result);
|
||||||
|
@ -15,6 +15,10 @@ namespace MediaBrowser.Controller.Providers
|
|||||||
|
|
||||||
FileSystemMetadata? GetFile(string path);
|
FileSystemMetadata? GetFile(string path);
|
||||||
|
|
||||||
|
FileSystemMetadata? GetDirectory(string path);
|
||||||
|
|
||||||
|
FileSystemMetadata? GetFileSystemEntry(string path);
|
||||||
|
|
||||||
IReadOnlyList<string> GetFilePaths(string path);
|
IReadOnlyList<string> GetFilePaths(string path);
|
||||||
|
|
||||||
IReadOnlyList<string> GetFilePaths(string path, bool clearCache, bool sort = false);
|
IReadOnlyList<string> GetFilePaths(string path, bool clearCache, bool sort = false);
|
||||||
|
@ -79,6 +79,21 @@ namespace Jellyfin.Controller.Tests
|
|||||||
Assert.Equal(_lowerCaseFileSystemMetadata.Where(f => !f.IsDirectory), lowerCaseResult);
|
Assert.Equal(_lowerCaseFileSystemMetadata.Where(f => !f.IsDirectory), lowerCaseResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void GetDirectories_GivenPathsWithDifferentCasing_ReturnsCorrectDirectories()
|
||||||
|
{
|
||||||
|
var fileSystemMock = new Mock<IFileSystem>();
|
||||||
|
fileSystemMock.Setup(f => f.GetFileSystemEntries(It.Is<string>(x => x == UpperCasePath), false)).Returns(_upperCaseFileSystemMetadata);
|
||||||
|
fileSystemMock.Setup(f => f.GetFileSystemEntries(It.Is<string>(x => x == LowerCasePath), false)).Returns(_lowerCaseFileSystemMetadata);
|
||||||
|
var directoryService = new DirectoryService(fileSystemMock.Object);
|
||||||
|
|
||||||
|
var upperCaseResult = directoryService.GetDirectories(UpperCasePath);
|
||||||
|
var lowerCaseResult = directoryService.GetDirectories(LowerCasePath);
|
||||||
|
|
||||||
|
Assert.Equal(_upperCaseFileSystemMetadata.Where(f => f.IsDirectory), upperCaseResult);
|
||||||
|
Assert.Equal(_lowerCaseFileSystemMetadata.Where(f => f.IsDirectory), lowerCaseResult);
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void GetFile_GivenFilePathsWithDifferentCasing_ReturnsCorrectFile()
|
public void GetFile_GivenFilePathsWithDifferentCasing_ReturnsCorrectFile()
|
||||||
{
|
{
|
||||||
@ -95,15 +110,52 @@ namespace Jellyfin.Controller.Tests
|
|||||||
Exists = false
|
Exists = false
|
||||||
};
|
};
|
||||||
var fileSystemMock = new Mock<IFileSystem>();
|
var fileSystemMock = new Mock<IFileSystem>();
|
||||||
fileSystemMock.Setup(f => f.GetFileInfo(It.Is<string>(x => x == upperCasePath))).Returns(upperCaseFileSystemMetadata);
|
fileSystemMock.Setup(f => f.GetFileSystemInfo(It.Is<string>(x => x == upperCasePath))).Returns(upperCaseFileSystemMetadata);
|
||||||
fileSystemMock.Setup(f => f.GetFileInfo(It.Is<string>(x => x == lowerCasePath))).Returns(lowerCaseFileSystemMetadata);
|
fileSystemMock.Setup(f => f.GetFileSystemInfo(It.Is<string>(x => x == lowerCasePath))).Returns(lowerCaseFileSystemMetadata);
|
||||||
var directoryService = new DirectoryService(fileSystemMock.Object);
|
var directoryService = new DirectoryService(fileSystemMock.Object);
|
||||||
|
|
||||||
var lowerCaseResult = directoryService.GetFile(lowerCasePath);
|
var lowerCaseDirResult = directoryService.GetDirectory(lowerCasePath);
|
||||||
var upperCaseResult = directoryService.GetFile(upperCasePath);
|
var lowerCaseFileResult = directoryService.GetFile(lowerCasePath);
|
||||||
|
var upperCaseDirResult = directoryService.GetDirectory(upperCasePath);
|
||||||
|
var upperCaseFileResult = directoryService.GetFile(upperCasePath);
|
||||||
|
|
||||||
Assert.Equal(lowerCaseFileSystemMetadata, lowerCaseResult);
|
Assert.Null(lowerCaseDirResult);
|
||||||
Assert.Null(upperCaseResult);
|
Assert.Equal(lowerCaseFileSystemMetadata, lowerCaseFileResult);
|
||||||
|
Assert.Null(upperCaseDirResult);
|
||||||
|
Assert.Null(upperCaseFileResult);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void GetDirectory_GivenFilePathsWithDifferentCasing_ReturnsCorrectDirectory()
|
||||||
|
{
|
||||||
|
const string lowerCasePath = "/music/someartist/Lyrics";
|
||||||
|
var lowerCaseFileSystemMetadata = new FileSystemMetadata
|
||||||
|
{
|
||||||
|
FullName = lowerCasePath,
|
||||||
|
IsDirectory = true,
|
||||||
|
Exists = true
|
||||||
|
};
|
||||||
|
const string upperCasePath = "/music/SOMEARTIST/LYRICS";
|
||||||
|
var upperCaseFileSystemMetadata = new FileSystemMetadata
|
||||||
|
{
|
||||||
|
FullName = upperCasePath,
|
||||||
|
IsDirectory = true,
|
||||||
|
Exists = false
|
||||||
|
};
|
||||||
|
var fileSystemMock = new Mock<IFileSystem>();
|
||||||
|
fileSystemMock.Setup(f => f.GetFileSystemInfo(It.Is<string>(x => x == upperCasePath))).Returns(upperCaseFileSystemMetadata);
|
||||||
|
fileSystemMock.Setup(f => f.GetFileSystemInfo(It.Is<string>(x => x == lowerCasePath))).Returns(lowerCaseFileSystemMetadata);
|
||||||
|
var directoryService = new DirectoryService(fileSystemMock.Object);
|
||||||
|
|
||||||
|
var lowerCaseDirResult = directoryService.GetDirectory(lowerCasePath);
|
||||||
|
var lowerCaseFileResult = directoryService.GetFile(lowerCasePath);
|
||||||
|
var upperCaseDirResult = directoryService.GetDirectory(upperCasePath);
|
||||||
|
var upperCaseFileResult = directoryService.GetFile(upperCasePath);
|
||||||
|
|
||||||
|
Assert.Equal(lowerCaseFileSystemMetadata, lowerCaseDirResult);
|
||||||
|
Assert.Null(lowerCaseFileResult);
|
||||||
|
Assert.Null(upperCaseDirResult);
|
||||||
|
Assert.Null(upperCaseFileResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
@ -122,11 +174,11 @@ namespace Jellyfin.Controller.Tests
|
|||||||
};
|
};
|
||||||
|
|
||||||
var fileSystemMock = new Mock<IFileSystem>();
|
var fileSystemMock = new Mock<IFileSystem>();
|
||||||
fileSystemMock.Setup(f => f.GetFileInfo(It.Is<string>(x => x == path))).Returns(cachedFileSystemMetadata);
|
fileSystemMock.Setup(f => f.GetFileSystemInfo(It.Is<string>(x => x == path))).Returns(cachedFileSystemMetadata);
|
||||||
var directoryService = new DirectoryService(fileSystemMock.Object);
|
var directoryService = new DirectoryService(fileSystemMock.Object);
|
||||||
|
|
||||||
var result = directoryService.GetFile(path);
|
var result = directoryService.GetFile(path);
|
||||||
fileSystemMock.Setup(f => f.GetFileInfo(It.Is<string>(x => x == path))).Returns(newFileSystemMetadata);
|
fileSystemMock.Setup(f => f.GetFileSystemInfo(It.Is<string>(x => x == path))).Returns(newFileSystemMetadata);
|
||||||
var secondResult = directoryService.GetFile(path);
|
var secondResult = directoryService.GetFile(path);
|
||||||
|
|
||||||
Assert.Equal(cachedFileSystemMetadata, result);
|
Assert.Equal(cachedFileSystemMetadata, result);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user