diff options
| author | JPVenson <github@jpb.email> | 2025-03-25 15:13:32 +0000 |
|---|---|---|
| committer | JPVenson <github@jpb.email> | 2025-03-25 15:13:32 +0000 |
| commit | 7cd059c03305de3b6b5d27e3a97624e8ec24bfbb (patch) | |
| tree | bda4e1e9eed1cf877855802dd52b06b791fd2547 | |
| parent | 850f1c79f1319de56a300c1d62565c9b2793b7d8 (diff) | |
| parent | 480244e1112a96e8097c7574ef2aebb1b26fe8e4 (diff) | |
Merge remote-tracking branch 'origin/master' into feature/DatabaseRefactor
4 files changed, 52 insertions, 10 deletions
diff --git a/.github/workflows/ci-tests.yml b/.github/workflows/ci-tests.yml index 04c8465e9..be4192a44 100644 --- a/.github/workflows/ci-tests.yml +++ b/.github/workflows/ci-tests.yml @@ -35,7 +35,7 @@ jobs: --verbosity minimal - name: Merge code coverage results - uses: danielpalme/ReportGenerator-GitHub-Action@f1927db1dbfc029b056583ee488832e939447fe6 # v5.4.4 + uses: danielpalme/ReportGenerator-GitHub-Action@25b1e0261a9f68d7874dbbace168300558ef68f7 # v5.4.5 with: reports: "**/coverage.cobertura.xml" targetdir: "merged/" diff --git a/Emby.Server.Implementations/IO/ManagedFileSystem.cs b/Emby.Server.Implementations/IO/ManagedFileSystem.cs index 66b7839f7..ac5933a69 100644 --- a/Emby.Server.Implementations/IO/ManagedFileSystem.cs +++ b/Emby.Server.Implementations/IO/ManagedFileSystem.cs @@ -541,8 +541,8 @@ namespace Emby.Server.Implementations.IO return DriveInfo.GetDrives() .Where( d => (d.DriveType == DriveType.Fixed || d.DriveType == DriveType.Network || d.DriveType == DriveType.Removable) - && d.IsReady - && d.TotalSize != 0) + && d.IsReady + && d.TotalSize != 0) .Select(d => new FileSystemMetadata { Name = d.Name, @@ -560,11 +560,23 @@ namespace Emby.Server.Implementations.IO /// <inheritdoc /> public virtual IEnumerable<FileSystemMetadata> GetFiles(string path, bool recursive = false) { - return GetFiles(path, null, false, recursive); + return GetFiles(path, "*", recursive); } /// <inheritdoc /> - public virtual IEnumerable<FileSystemMetadata> GetFiles(string path, IReadOnlyList<string>? extensions, bool enableCaseSensitiveExtensions, bool recursive = false) + public virtual IEnumerable<FileSystemMetadata> GetFiles(string path, string searchPattern, bool recursive = false) + { + return GetFiles(path, searchPattern, null, false, recursive); + } + + /// <inheritdoc /> + public virtual IEnumerable<FileSystemMetadata> GetFiles(string path, IReadOnlyList<string>? extensions, bool enableCaseSensitiveExtensions, bool recursive) + { + return GetFiles(path, "*", extensions, enableCaseSensitiveExtensions, recursive); + } + + /// <inheritdoc /> + public virtual IEnumerable<FileSystemMetadata> GetFiles(string path, string searchPattern, IReadOnlyList<string>? extensions, bool enableCaseSensitiveExtensions, bool recursive = false) { var enumerationOptions = GetEnumerationOptions(recursive); @@ -572,10 +584,12 @@ namespace Emby.Server.Implementations.IO // If we're OK with case-sensitivity, and we're only filtering for one extension, then use the native method if ((enableCaseSensitiveExtensions || _isEnvironmentCaseInsensitive) && extensions is not null && extensions.Count == 1) { - return ToMetadata(new DirectoryInfo(path).EnumerateFiles("*" + extensions[0], enumerationOptions)); + searchPattern = searchPattern.EndsWith(extensions[0], StringComparison.Ordinal) ? searchPattern : searchPattern + extensions[0]; + + return ToMetadata(new DirectoryInfo(path).EnumerateFiles(searchPattern, enumerationOptions)); } - var files = new DirectoryInfo(path).EnumerateFiles("*", enumerationOptions); + var files = new DirectoryInfo(path).EnumerateFiles(searchPattern, enumerationOptions); if (extensions is not null && extensions.Count > 0) { diff --git a/MediaBrowser.Model/IO/IFileSystem.cs b/MediaBrowser.Model/IO/IFileSystem.cs index 229368d00..0ed2e30d5 100644 --- a/MediaBrowser.Model/IO/IFileSystem.cs +++ b/MediaBrowser.Model/IO/IFileSystem.cs @@ -157,9 +157,37 @@ namespace MediaBrowser.Model.IO /// <returns>All found files.</returns> IEnumerable<FileSystemMetadata> GetFiles(string path, bool recursive = false); + /// <summary> + /// Gets the files. + /// </summary> + /// <param name="path">The path in which to search.</param> + /// <param name="searchPattern">The search string to match against the names of files. This parameter can contain a combination of valid literal path and wildcard (* and ?) characters, but it doesn't support regular expressions.</param> + /// <param name="recursive">If set to <c>true</c> also searches in subdirectories.</param> + /// <returns>All found files.</returns> + IEnumerable<FileSystemMetadata> GetFiles(string path, string searchPattern, bool recursive = false); + + /// <summary> + /// Gets the files. + /// </summary> + /// <param name="path">The path in which to search.</param> + /// <param name="extensions">The file extensions to search for.</param> + /// <param name="enableCaseSensitiveExtensions">Enable case-sensitive check for extensions.</param> + /// <param name="recursive">If set to <c>true</c> also searches in subdirectories.</param> + /// <returns>All found files.</returns> IEnumerable<FileSystemMetadata> GetFiles(string path, IReadOnlyList<string>? extensions, bool enableCaseSensitiveExtensions, bool recursive); /// <summary> + /// Gets the files. + /// </summary> + /// <param name="path">The path in which to search.</param> + /// <param name="searchPattern">The search string to match against the names of files. This parameter can contain a combination of valid literal path and wildcard (* and ?) characters, but it doesn't support regular expressions.</param> + /// <param name="extensions">The file extensions to search for.</param> + /// <param name="enableCaseSensitiveExtensions">Enable case-sensitive check for extensions.</param> + /// <param name="recursive">If set to <c>true</c> also searches in subdirectories.</param> + /// <returns>All found files.</returns> + IEnumerable<FileSystemMetadata> GetFiles(string path, string searchPattern, IReadOnlyList<string>? extensions, bool enableCaseSensitiveExtensions, bool recursive); + + /// <summary> /// Gets the file system entries. /// </summary> /// <param name="path">The path.</param> diff --git a/tests/Jellyfin.Server.Integration.Tests/Controllers/UserLibraryControllerTests.cs b/tests/Jellyfin.Server.Integration.Tests/Controllers/UserLibraryControllerTests.cs index 8df86111e..98ad28f5b 100644 --- a/tests/Jellyfin.Server.Integration.Tests/Controllers/UserLibraryControllerTests.cs +++ b/tests/Jellyfin.Server.Integration.Tests/Controllers/UserLibraryControllerTests.cs @@ -75,7 +75,7 @@ public sealed class UserLibraryControllerTests : IClassFixture<JellyfinApplicati Assert.Equal(HttpStatusCode.NotFound, response.StatusCode); } - [Fact] + [Fact(Skip = "Disabled for flaky execution after refactor.")] public async Task GetItem_UserIdAndItemId_Valid() { var client = _factory.CreateClient(); @@ -90,7 +90,7 @@ public sealed class UserLibraryControllerTests : IClassFixture<JellyfinApplicati Assert.NotNull(rootDto); } - [Fact] + [Fact(Skip = "Disabled for flaky execution after refactor.")] public async Task GetIntros_UserIdAndItemId_Valid() { var client = _factory.CreateClient(); @@ -105,7 +105,7 @@ public sealed class UserLibraryControllerTests : IClassFixture<JellyfinApplicati Assert.NotNull(rootDto); } - [Theory] + [Theory(Skip = "Disabled for flaky execution after refactor.")] [InlineData("Users/{0}/Items/{1}/LocalTrailers")] [InlineData("Users/{0}/Items/{1}/SpecialFeatures")] public async Task LocalTrailersAndSpecialFeatures_UserIdAndItemId_Valid(string format) |
