From d8c62420bfa61d89dc5667251375f2746b491c1a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 1 Oct 2025 22:51:24 +0000 Subject: [PATCH 01/28] Update peter-evans/find-comment action to v4 --- .github/workflows/ci-compat.yml | 2 +- .github/workflows/ci-openapi.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-compat.yml b/.github/workflows/ci-compat.yml index 702dd29b82..d2be083eb0 100644 --- a/.github/workflows/ci-compat.yml +++ b/.github/workflows/ci-compat.yml @@ -115,7 +115,7 @@ jobs: } >> $GITHUB_OUTPUT - name: Find difference comment - uses: peter-evans/find-comment@3eae4d37986fb5a8592848f6a574fdf654e61f9e # v3.1.0 + uses: peter-evans/find-comment@b30e6a3c0ed37e7c023ccd3f1db5c6c0b0c23aad # v4.0.0 id: find-comment with: issue-number: ${{ github.event.pull_request.number }} diff --git a/.github/workflows/ci-openapi.yml b/.github/workflows/ci-openapi.yml index 262582dfc7..c231003a39 100644 --- a/.github/workflows/ci-openapi.yml +++ b/.github/workflows/ci-openapi.yml @@ -120,7 +120,7 @@ jobs: echo "" >> openapi-changes-reply.md echo "" >> openapi-changes-reply.md - name: Find difference comment - uses: peter-evans/find-comment@3eae4d37986fb5a8592848f6a574fdf654e61f9e # v3.1.0 + uses: peter-evans/find-comment@b30e6a3c0ed37e7c023ccd3f1db5c6c0b0c23aad # v4.0.0 id: find-comment with: issue-number: ${{ github.event.pull_request.number }} From c8b97bf5336cb90395033a8d8443946a8f932203 Mon Sep 17 00:00:00 2001 From: JPVenson Date: Fri, 3 Oct 2025 02:33:01 +0300 Subject: [PATCH 02/28] Readd wildcard search (#14934) --- .../Item/BaseItemRepository.cs | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs b/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs index 4d17e37699..aaff9e5d75 100644 --- a/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs +++ b/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs @@ -75,6 +75,7 @@ public sealed class BaseItemRepository private static readonly IReadOnlyList _getAlbumArtistValueTypes = [ItemValueType.AlbumArtist]; private static readonly IReadOnlyList _getStudiosValueTypes = [ItemValueType.Studios]; private static readonly IReadOnlyList _getGenreValueTypes = [ItemValueType.Genre]; + private static readonly IReadOnlyList SearchWildcardTerms = ['%', '_', '[', ']', '^']; /// /// Initializes a new instance of the class. @@ -1693,7 +1694,15 @@ public sealed class BaseItemRepository if (!string.IsNullOrEmpty(filter.SearchTerm)) { var searchTerm = filter.SearchTerm.ToLower(); - baseQuery = baseQuery.Where(e => e.CleanName!.ToLower().Contains(searchTerm) || (e.OriginalTitle != null && e.OriginalTitle.ToLower().Contains(searchTerm))); + if (SearchWildcardTerms.Any(f => searchTerm.Contains(f))) + { + searchTerm = $"%{searchTerm.Trim('%')}%"; + baseQuery = baseQuery.Where(e => EF.Functions.Like(e.CleanName!.ToLower(), searchTerm) || (e.OriginalTitle != null && EF.Functions.Like(e.OriginalTitle.ToLower(), searchTerm))); + } + else + { + baseQuery = baseQuery.Where(e => e.CleanName!.ToLower().Contains(searchTerm) || (e.OriginalTitle != null && e.OriginalTitle.ToLower().Contains(searchTerm))); + } } if (filter.IsFolder.HasValue) @@ -1904,9 +1913,17 @@ public sealed class BaseItemRepository var nameContains = filter.NameContains; if (!string.IsNullOrWhiteSpace(nameContains)) { - baseQuery = baseQuery.Where(e => - e.CleanName!.Contains(nameContains) - || e.OriginalTitle!.ToLower().Contains(nameContains!)); + if (SearchWildcardTerms.Any(f => nameContains.Contains(f))) + { + nameContains = $"%{nameContains.Trim('%')}%"; + baseQuery = baseQuery.Where(e => EF.Functions.Like(e.CleanName, nameContains) || EF.Functions.Like(e.OriginalTitle, nameContains)); + } + else + { + baseQuery = baseQuery.Where(e => + e.CleanName!.Contains(nameContains) + || e.OriginalTitle!.ToLower().Contains(nameContains!)); + } } if (!string.IsNullOrWhiteSpace(filter.NameStartsWith)) From 0a0aaefad55ed16f88d3a3d61549331342e52377 Mon Sep 17 00:00:00 2001 From: gnattu Date: Fri, 3 Oct 2025 07:33:31 +0800 Subject: [PATCH 03/28] Fix mka-style tagging key (#14936) --- .../MediaInfo/AudioFileProber.cs | 36 +++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/MediaBrowser.Providers/MediaInfo/AudioFileProber.cs b/MediaBrowser.Providers/MediaInfo/AudioFileProber.cs index 587cb4092b..869e3f292e 100644 --- a/MediaBrowser.Providers/MediaInfo/AudioFileProber.cs +++ b/MediaBrowser.Providers/MediaInfo/AudioFileProber.cs @@ -533,14 +533,14 @@ namespace MediaBrowser.Providers.MediaInfo private bool TryGetSanitizedAdditionalFields(Track track, string field, out string? value) { - var hasField = track.AdditionalFields.TryGetValue(field, out value); + var hasField = TryGetAdditionalFieldWithFallback(track, field, out value); value = GetSanitizedStringTag(value, track.Path); return hasField; } private bool TryGetSanitizedUFIDFields(Track track, out string? owner, out string? identifier) { - var hasField = track.AdditionalFields.TryGetValue("UFID", out string? value); + var hasField = TryGetAdditionalFieldWithFallback(track, "UFID", out string? value); if (hasField && !string.IsNullOrEmpty(value)) { string[] parts = value.Split('\0'); @@ -556,5 +556,37 @@ namespace MediaBrowser.Providers.MediaInfo identifier = null; return false; } + + // Build the explicit mka-style fallback key (e.g., ARTISTS -> track.artists, "MusicBrainz Artist Id" -> track.musicbrainz_artist_id) + private static string GetMkaFallbackKey(string key) + { + if (string.IsNullOrWhiteSpace(key)) + { + return key; + } + + var normalized = key.Trim().Replace(' ', '_').ToLowerInvariant(); + return "track." + normalized; + } + + // First try the normal key exactly; if missing, try the mka-style fallback key. + private bool TryGetAdditionalFieldWithFallback(Track track, string key, out string? value) + { + // Prefer the normal key (as-is, case-sensitive) + if (track.AdditionalFields.TryGetValue(key, out value)) + { + return true; + } + + // Fallback to mka-style: "track." + lower-case(original key) + var fallbackKey = GetMkaFallbackKey(key); + if (track.AdditionalFields.TryGetValue(fallbackKey, out value)) + { + return true; + } + + value = null; + return false; + } } } From 894ba1a410a97a846b9d5f7167190a79337a3f67 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 2 Oct 2025 17:33:37 -0600 Subject: [PATCH 04/28] Update github/codeql-action action to v3.30.6 (#14932) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/ci-codeql-analysis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci-codeql-analysis.yml b/.github/workflows/ci-codeql-analysis.yml index 89d59e4c4a..6bbbbd2a8b 100644 --- a/.github/workflows/ci-codeql-analysis.yml +++ b/.github/workflows/ci-codeql-analysis.yml @@ -27,11 +27,11 @@ jobs: dotnet-version: '9.0.x' - name: Initialize CodeQL - uses: github/codeql-action/init@3599b3baa15b485a2e49ef411a7a4bb2452e7f93 # v3.30.5 + uses: github/codeql-action/init@64d10c13136e1c5bce3e5fbde8d4906eeaafc885 # v3.30.6 with: languages: ${{ matrix.language }} queries: +security-extended - name: Autobuild - uses: github/codeql-action/autobuild@3599b3baa15b485a2e49ef411a7a4bb2452e7f93 # v3.30.5 + uses: github/codeql-action/autobuild@64d10c13136e1c5bce3e5fbde8d4906eeaafc885 # v3.30.6 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@3599b3baa15b485a2e49ef411a7a4bb2452e7f93 # v3.30.5 + uses: github/codeql-action/analyze@64d10c13136e1c5bce3e5fbde8d4906eeaafc885 # v3.30.6 From 97ec4c1da272b047d8076e871dd2ce5bc535d9d7 Mon Sep 17 00:00:00 2001 From: lostb1t Date: Fri, 3 Oct 2025 01:33:50 +0200 Subject: [PATCH 05/28] fix: get total count after grouping (#14931) --- Jellyfin.Server.Implementations/Item/BaseItemRepository.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs b/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs index aaff9e5d75..0884efa434 100644 --- a/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs +++ b/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs @@ -267,12 +267,13 @@ public sealed class BaseItemRepository IQueryable dbQuery = PrepareItemQuery(context, filter); dbQuery = TranslateQuery(dbQuery, context, filter); + dbQuery = ApplyGroupingFilter(context, dbQuery, filter); + if (filter.EnableTotalRecordCount) { result.TotalRecordCount = dbQuery.Count(); } - dbQuery = ApplyGroupingFilter(context, dbQuery, filter); dbQuery = ApplyQueryPaging(dbQuery, filter); result.Items = dbQuery.AsEnumerable().Where(e => e is not null).Select(w => DeserializeBaseItem(w, filter.SkipDeserialization)).ToArray(); From ba80f5e4169a446158ad5b7e99dfa1ace814baf4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 2 Oct 2025 17:33:54 -0600 Subject: [PATCH 06/28] Update peter-evans/create-or-update-comment action to v5 (#14933) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/ci-compat.yml | 4 ++-- .github/workflows/ci-openapi.yml | 4 ++-- .github/workflows/commands.yml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci-compat.yml b/.github/workflows/ci-compat.yml index d2be083eb0..a8104a917d 100644 --- a/.github/workflows/ci-compat.yml +++ b/.github/workflows/ci-compat.yml @@ -123,7 +123,7 @@ jobs: body-includes: abi-diff-workflow-comment - name: Reply or edit difference comment (changed) - uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4.0.0 + uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5.0.0 if: ${{ steps.diff.outputs.body != '' }} with: issue-number: ${{ github.event.pull_request.number }} @@ -142,7 +142,7 @@ jobs: - name: Reply or edit difference comment (unchanged) - uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4.0.0 + uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5.0.0 if: ${{ steps.diff.outputs.body == '' && steps.find-comment.outputs.comment-id != '' }} with: issue-number: ${{ github.event.pull_request.number }} diff --git a/.github/workflows/ci-openapi.yml b/.github/workflows/ci-openapi.yml index c231003a39..7cca2af274 100644 --- a/.github/workflows/ci-openapi.yml +++ b/.github/workflows/ci-openapi.yml @@ -127,7 +127,7 @@ jobs: direction: last body-includes: openapi-diff-workflow-comment - name: Reply or edit difference comment (changed) - uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4.0.0 + uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5.0.0 if: ${{ steps.read-diff.outputs.ApiChanged == '1' }} with: issue-number: ${{ github.event.pull_request.number }} @@ -135,7 +135,7 @@ jobs: edit-mode: replace body-path: openapi-changes-reply.md - name: Edit difference comment (unchanged) - uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4.0.0 + uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5.0.0 if: ${{ steps.read-diff.outputs.ApiChanged == '0' && steps.find-comment.outputs.comment-id != '' }} with: issue-number: ${{ github.event.pull_request.number }} diff --git a/.github/workflows/commands.yml b/.github/workflows/commands.yml index 68715897df..a2e37e7d53 100644 --- a/.github/workflows/commands.yml +++ b/.github/workflows/commands.yml @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Notify as seen - uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4.0.0 + uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5.0.0 with: token: ${{ secrets.JF_BOT_TOKEN }} comment-id: ${{ github.event.comment.id }} From 056b92dbd5d46ade6cff635398d54b9ef356e1cf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 2 Oct 2025 17:34:06 -0600 Subject: [PATCH 07/28] Update dependency Microsoft.NET.Test.Sdk to v18 (#14930) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Directory.Packages.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 35f8ed4cdc..d387cca6d5 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -52,7 +52,7 @@ - + From b59e9f90f0acbbf35f7ca16e86c0e0d9f9fb583e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 3 Oct 2025 22:04:26 +0000 Subject: [PATCH 08/28] Update actions/stale action to v10.1.0 --- .github/workflows/issue-stale.yml | 2 +- .github/workflows/pull-request-stale.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/issue-stale.yml b/.github/workflows/issue-stale.yml index 46b56c7067..db22848c3f 100644 --- a/.github/workflows/issue-stale.yml +++ b/.github/workflows/issue-stale.yml @@ -16,7 +16,7 @@ jobs: runs-on: ubuntu-latest if: ${{ contains(github.repository, 'jellyfin/') }} steps: - - uses: actions/stale@3a9db7e6a41a89f618792c92c0e97cc736e1b13f # v10.0.0 + - uses: actions/stale@5f858e3efba33a5ca4407a664cc011ad407f2008 # v10.1.0 with: repo-token: ${{ secrets.JF_BOT_TOKEN }} ascending: true diff --git a/.github/workflows/pull-request-stale.yaml b/.github/workflows/pull-request-stale.yaml index f5598797c0..223ffc590b 100644 --- a/.github/workflows/pull-request-stale.yaml +++ b/.github/workflows/pull-request-stale.yaml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest if: ${{ contains(github.repository, 'jellyfin/') }} steps: - - uses: actions/stale@3a9db7e6a41a89f618792c92c0e97cc736e1b13f # v10.0.0 + - uses: actions/stale@5f858e3efba33a5ca4407a664cc011ad407f2008 # v10.1.0 with: repo-token: ${{ secrets.JF_BOT_TOKEN }} ascending: true From badf22fcc21e41090ee164de372fa5badc675b5f Mon Sep 17 00:00:00 2001 From: Nyanmisaka Date: Sat, 4 Oct 2025 22:04:25 +0800 Subject: [PATCH 09/28] Limit decoder thread count on AMD AMF to save VRAM (#14943) --- MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs index 8d3977103b..c81e639a22 100644 --- a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs +++ b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs @@ -6552,7 +6552,7 @@ namespace MediaBrowser.Controller.MediaEncoding if (isD3d11Supported && isCodecAvailable) { return " -hwaccel d3d11va" + (outputHwSurface ? " -hwaccel_output_format d3d11 -noautorotate" + stripRotationDataArgs : string.Empty) - + (profileMismatch ? " -hwaccel_flags +allow_profile_mismatch" : string.Empty) + (isAv1 ? " -c:v av1" : string.Empty); + + (profileMismatch ? " -hwaccel_flags +allow_profile_mismatch" : string.Empty) + " -threads 2" + (isAv1 ? " -c:v av1" : string.Empty); } } From bf69f9d8a8162d6de8a0c23a158a4ea0570fa93e Mon Sep 17 00:00:00 2001 From: Thomas Jones Date: Sat, 4 Oct 2025 08:58:51 -0600 Subject: [PATCH 10/28] Validate wizard-created libraries immediately instead of only doing it after a library refresh was triggered (#14942) Co-authored-by: Derpipose <90276123+Derpipose@users.noreply.github.com> --- Emby.Server.Implementations/Library/LibraryManager.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Emby.Server.Implementations/Library/LibraryManager.cs b/Emby.Server.Implementations/Library/LibraryManager.cs index ef497726e2..e2d8325fe1 100644 --- a/Emby.Server.Implementations/Library/LibraryManager.cs +++ b/Emby.Server.Implementations/Library/LibraryManager.cs @@ -3051,10 +3051,10 @@ namespace Emby.Server.Implementations.Library } finally { + await ValidateTopLibraryFolders(CancellationToken.None).ConfigureAwait(false); + if (refreshLibrary) { - await ValidateTopLibraryFolders(CancellationToken.None).ConfigureAwait(false); - StartScanInBackground(); } else From da0fe7455e8a6f9de0782dfc220090ebe48cab45 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 4 Oct 2025 14:59:22 +0000 Subject: [PATCH 11/28] Update dependency AsyncKeyedLock to 7.1.7 --- Directory.Packages.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index d387cca6d5..857b1a7ef0 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -4,7 +4,7 @@ - + From ff0a1b999f6a814372642d7631e714eec0844f11 Mon Sep 17 00:00:00 2001 From: Cody Robibero Date: Sat, 4 Oct 2025 13:04:35 -0600 Subject: [PATCH 12/28] Handle xx as TMDb no language for backdrops (#14941) --- MediaBrowser.Providers/Plugins/Tmdb/TmdbUtils.cs | 5 ++++- tests/Jellyfin.Providers.Tests/Tmdb/TmdbUtilsTests.cs | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/MediaBrowser.Providers/Plugins/Tmdb/TmdbUtils.cs b/MediaBrowser.Providers/Plugins/Tmdb/TmdbUtils.cs index afbada3b30..2db8cae7e5 100644 --- a/MediaBrowser.Providers/Plugins/Tmdb/TmdbUtils.cs +++ b/MediaBrowser.Providers/Plugins/Tmdb/TmdbUtils.cs @@ -185,7 +185,10 @@ namespace MediaBrowser.Providers.Plugins.Tmdb return requestLanguage; } - return imageLanguage; + // TMDb now returns xx for no language instead of an empty string. + return string.Equals(imageLanguage, "xx", StringComparison.OrdinalIgnoreCase) + ? string.Empty + : imageLanguage; } /// diff --git a/tests/Jellyfin.Providers.Tests/Tmdb/TmdbUtilsTests.cs b/tests/Jellyfin.Providers.Tests/Tmdb/TmdbUtilsTests.cs index 6fd48a044b..fb0a08c29c 100644 --- a/tests/Jellyfin.Providers.Tests/Tmdb/TmdbUtilsTests.cs +++ b/tests/Jellyfin.Providers.Tests/Tmdb/TmdbUtilsTests.cs @@ -29,6 +29,7 @@ namespace Jellyfin.Providers.Tests.Tmdb [InlineData("fr-CA", "fr-BE", "fr-CA")] [InlineData("fr-CA", "fr", "fr-CA")] [InlineData("de", "en-US", "de")] + [InlineData("", "en-US", "")] public static void AdjustImageLanguage_Valid_Success(string imageLanguage, string requestLanguage, string? expected) { Assert.Equal(expected, TmdbUtils.AdjustImageLanguage(imageLanguage, requestLanguage)); From d3d5915f31ba3901f10777c519b9fe01e5b60dca Mon Sep 17 00:00:00 2001 From: Bond-009 Date: Sun, 5 Oct 2025 19:24:12 +0200 Subject: [PATCH 13/28] Truncate password reset file on open for writing (#14948) --- .../Users/DefaultPasswordResetProvider.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jellyfin.Server.Implementations/Users/DefaultPasswordResetProvider.cs b/Jellyfin.Server.Implementations/Users/DefaultPasswordResetProvider.cs index 6296881a9e..f20fb2d92d 100644 --- a/Jellyfin.Server.Implementations/Users/DefaultPasswordResetProvider.cs +++ b/Jellyfin.Server.Implementations/Users/DefaultPasswordResetProvider.cs @@ -108,7 +108,7 @@ namespace Jellyfin.Server.Implementations.Users UserName = user.Username }; - FileStream fileStream = AsyncFile.OpenWrite(filePath); + FileStream fileStream = AsyncFile.Create(filePath); await using (fileStream.ConfigureAwait(false)) { await JsonSerializer.SerializeAsync(fileStream, spr).ConfigureAwait(false); From eb0d05cf1ec1fb614639abbb6b7711fce9b7cbe5 Mon Sep 17 00:00:00 2001 From: rimasx Date: Mon, 6 Oct 2025 02:55:46 -0400 Subject: [PATCH 14/28] Translated using Weblate (Estonian) Translation: Jellyfin/Jellyfin Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/et/ --- Emby.Server.Implementations/Localization/Core/et.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Emby.Server.Implementations/Localization/Core/et.json b/Emby.Server.Implementations/Localization/Core/et.json index 3b2bb70a95..486e62dfd2 100644 --- a/Emby.Server.Implementations/Localization/Core/et.json +++ b/Emby.Server.Implementations/Localization/Core/et.json @@ -135,5 +135,7 @@ "TaskMoveTrickplayImagesDescription": "Liigutab trickplay pildid meediakogu sätete kohaselt.", "TaskExtractMediaSegments": "Meediasegmentide skaneerimine", "TaskExtractMediaSegmentsDescription": "Eraldab või võtab meediasegmendid MediaSegment'i lubavatest pluginatest.", - "TaskMoveTrickplayImages": "Migreeri trickplay piltide asukoht" + "TaskMoveTrickplayImages": "Migreeri trickplay piltide asukoht", + "CleanupUserDataTask": "Kasutajaandmete puhastamise ülesanne", + "CleanupUserDataTaskDescription": "Puhastab kõik kasutajaandmed (vaatamise olek, lemmikute olek jne) meediast, mis pole enam vähemalt 90 päeva saadaval olnud." } From 739642b33054e49f7ff8e4b39129ae19932eadcb Mon Sep 17 00:00:00 2001 From: Milo Ivir Date: Tue, 7 Oct 2025 15:26:44 -0400 Subject: [PATCH 15/28] Translated using Weblate (Croatian) Translation: Jellyfin/Jellyfin Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/hr/ --- Emby.Server.Implementations/Localization/Core/hr.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Emby.Server.Implementations/Localization/Core/hr.json b/Emby.Server.Implementations/Localization/Core/hr.json index a56ef82fc8..67263d3b22 100644 --- a/Emby.Server.Implementations/Localization/Core/hr.json +++ b/Emby.Server.Implementations/Localization/Core/hr.json @@ -125,8 +125,8 @@ "TaskKeyframeExtractor": "Izvoditelj ključnog okvira", "TaskOptimizeDatabaseDescription": "Sažima bazu podataka i uklanja prazan prostor. Pokretanje ovog zadatka, može poboljšati performanse nakon provođenja indeksiranja biblioteke ili provođenja drugih promjena koje utječu na bazu podataka.", "HearingImpaired": "Oštećen sluh", - "TaskRefreshTrickplayImages": "Generiraj Trickplay Slike", - "TaskRefreshTrickplayImagesDescription": "Kreira trickplay pretpreglede za videe u omogućenim knjižnicama.", + "TaskRefreshTrickplayImages": "Generiraj slike brzog pregledavanja", + "TaskRefreshTrickplayImagesDescription": "Stvara preglede brzog pregledavanja za videa u aktiviranim bibliotekama.", "TaskAudioNormalization": "Normalizacija zvuka", "TaskAudioNormalizationDescription": "Skenira datoteke u potrazi za podacima o normalizaciji zvuka.", "TaskCleanCollectionsAndPlaylistsDescription": "Uklanja stavke iz zbirki i popisa za reprodukciju koje više ne postoje.", @@ -135,8 +135,8 @@ "TaskDownloadMissingLyrics": "Preuzmi tekstove koji nedostaju", "TaskDownloadMissingLyricsDescription": "Preuzmi tekstove pjesama", "TaskExtractMediaSegmentsDescription": "Izvlači ili pribavlja dijelove medija iz omogućenih media pluginova.", - "TaskMoveTrickplayImages": "Preseli lokaciju Trickplay slika", - "TaskMoveTrickplayImagesDescription": "Preseli lokaciju Trickplay slika prema postavkama zbirke.", + "TaskMoveTrickplayImages": "Premjesti mjesto slika brzog pregledavanja", + "TaskMoveTrickplayImagesDescription": "Premješta postojeće datoteke brzog pregledavanja prema postavkama biblioteke.", "CleanupUserDataTask": "Zadatak čišćenja korisničkih podataka", "CleanupUserDataTaskDescription": "Briše sve korisničke podatke (stanje gledanja, status favorita itd.) s medija koji više nisu prisutni najmanje 90 dana." } From 2b45a984dd12edb54ab04ece96679ea2521b671e Mon Sep 17 00:00:00 2001 From: theguymadmax Date: Wed, 8 Oct 2025 10:23:12 -0400 Subject: [PATCH 16/28] Clean up missing image references (#14962) --- Emby.Server.Implementations/Library/LibraryManager.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Emby.Server.Implementations/Library/LibraryManager.cs b/Emby.Server.Implementations/Library/LibraryManager.cs index e2d8325fe1..a400cb0925 100644 --- a/Emby.Server.Implementations/Library/LibraryManager.cs +++ b/Emby.Server.Implementations/Library/LibraryManager.cs @@ -2129,6 +2129,8 @@ namespace Emby.Server.Implementations.Library } } + item.ValidateImages(); + _itemRepository.SaveImages(item); RegisterItem(item); From 79ff0b0b002c27142769de4a37fcb555b1474888 Mon Sep 17 00:00:00 2001 From: theguymadmax Date: Wed, 8 Oct 2025 10:32:00 -0400 Subject: [PATCH 17/28] Fix collections folder duplication (#14925) --- Emby.Server.Implementations/Collections/CollectionManager.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Emby.Server.Implementations/Collections/CollectionManager.cs b/Emby.Server.Implementations/Collections/CollectionManager.cs index 0eb387ffdd..a320a774c6 100644 --- a/Emby.Server.Implementations/Collections/CollectionManager.cs +++ b/Emby.Server.Implementations/Collections/CollectionManager.cs @@ -104,6 +104,8 @@ namespace Emby.Server.Implementations.Collections await _libraryManager.AddVirtualFolder(name, CollectionTypeOptions.boxsets, libraryOptions, true).ConfigureAwait(false); + _libraryManager.RootFolder.Children = null; + return FindFolders(path).First(); } From 07d31c6ba51bdbacb0be4ff5631e4567d7ea6980 Mon Sep 17 00:00:00 2001 From: theguymadmax Date: Wed, 8 Oct 2025 11:23:20 -0400 Subject: [PATCH 18/28] Improve performance on people query (#14963) --- .../Item/BaseItemRepository.cs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs b/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs index 0884efa434..ef444b9302 100644 --- a/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs +++ b/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs @@ -1875,10 +1875,17 @@ public sealed class BaseItemRepository if (filter.PersonIds.Length > 0) { + var peopleEntityIds = context.BaseItems + .WhereOneOrMany(filter.PersonIds, b => b.Id) + .Join( + context.Peoples, + b => b.Name, + p => p.Name, + (b, p) => p.Id); + baseQuery = baseQuery - .Where(e => - context.PeopleBaseItemMap.Where(w => context.BaseItems.Where(r => filter.PersonIds.Contains(r.Id)).Any(f => f.Name == w.People.Name)) - .Any(f => f.ItemId == e.Id)); + .Where(e => context.PeopleBaseItemMap + .Any(m => m.ItemId == e.Id && peopleEntityIds.Contains(m.PeopleId))); } if (!string.IsNullOrWhiteSpace(filter.Person)) From f5d42ee180e85383da6034239b77e043272949c0 Mon Sep 17 00:00:00 2001 From: theguymadmax Date: Thu, 9 Oct 2025 01:14:49 -0500 Subject: [PATCH 19/28] Fix artist external Url --- .../Plugins/AudioDb/AudioDbArtistExternalUrlProvider.cs | 2 +- .../Plugins/MusicBrainz/MusicBrainzArtistExternalUrlProvider.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/MediaBrowser.Providers/Plugins/AudioDb/AudioDbArtistExternalUrlProvider.cs b/MediaBrowser.Providers/Plugins/AudioDb/AudioDbArtistExternalUrlProvider.cs index 56b0d9bcb2..6c1fbbeb7b 100644 --- a/MediaBrowser.Providers/Plugins/AudioDb/AudioDbArtistExternalUrlProvider.cs +++ b/MediaBrowser.Providers/Plugins/AudioDb/AudioDbArtistExternalUrlProvider.cs @@ -22,7 +22,7 @@ public class AudioDbArtistExternalUrlProvider : IExternalUrlProvider var baseUrl = "https://www.theaudiodb.com/"; switch (item) { - case MusicAlbum: + case MusicArtist: case Person: yield return baseUrl + $"artist/{externalId}"; break; diff --git a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzArtistExternalUrlProvider.cs b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzArtistExternalUrlProvider.cs index ee5a597c62..398ec2d203 100644 --- a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzArtistExternalUrlProvider.cs +++ b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzArtistExternalUrlProvider.cs @@ -21,7 +21,7 @@ public class MusicBrainzArtistExternalUrlProvider : IExternalUrlProvider { switch (item) { - case MusicAlbum: + case MusicArtist: case Person: yield return Plugin.Instance!.Configuration.Server + $"/artist/{externalId}"; From 8ab1fecb70b5dd8175f124223a1a41f8974bbb9b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 9 Oct 2025 10:20:29 +0000 Subject: [PATCH 20/28] Update CI dependencies --- .github/workflows/ci-codeql-analysis.yml | 6 +++--- .github/workflows/ci-tests.yml | 2 +- .github/workflows/commands.yml | 2 +- .github/workflows/issue-template-check.yml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci-codeql-analysis.yml b/.github/workflows/ci-codeql-analysis.yml index 6bbbbd2a8b..3981d22261 100644 --- a/.github/workflows/ci-codeql-analysis.yml +++ b/.github/workflows/ci-codeql-analysis.yml @@ -27,11 +27,11 @@ jobs: dotnet-version: '9.0.x' - name: Initialize CodeQL - uses: github/codeql-action/init@64d10c13136e1c5bce3e5fbde8d4906eeaafc885 # v3.30.6 + uses: github/codeql-action/init@a8d1ac45b9a34d11fe398d5503176af0d06b303e # v3.30.7 with: languages: ${{ matrix.language }} queries: +security-extended - name: Autobuild - uses: github/codeql-action/autobuild@64d10c13136e1c5bce3e5fbde8d4906eeaafc885 # v3.30.6 + uses: github/codeql-action/autobuild@a8d1ac45b9a34d11fe398d5503176af0d06b303e # v3.30.7 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@64d10c13136e1c5bce3e5fbde8d4906eeaafc885 # v3.30.6 + uses: github/codeql-action/analyze@a8d1ac45b9a34d11fe398d5503176af0d06b303e # v3.30.7 diff --git a/.github/workflows/ci-tests.yml b/.github/workflows/ci-tests.yml index f2cf967e93..846835491a 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@1978db745da4a573ca4baa2d0f67175df51a148c # v5.4.16 + uses: danielpalme/ReportGenerator-GitHub-Action@9870ed167742d546b99962ff815fcc1098355ed8 # v5.4.17 with: reports: "**/coverage.cobertura.xml" targetdir: "merged/" diff --git a/.github/workflows/commands.yml b/.github/workflows/commands.yml index a2e37e7d53..ba12d47473 100644 --- a/.github/workflows/commands.yml +++ b/.github/workflows/commands.yml @@ -46,7 +46,7 @@ jobs: - name: install python uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 with: - python-version: '3.13' + python-version: '3.14' cache: 'pip' - name: install python packages run: pip install -r rename/requirements.txt diff --git a/.github/workflows/issue-template-check.yml b/.github/workflows/issue-template-check.yml index 0c4115888f..b49647d337 100644 --- a/.github/workflows/issue-template-check.yml +++ b/.github/workflows/issue-template-check.yml @@ -16,7 +16,7 @@ jobs: - name: install python uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 with: - python-version: '3.13' + python-version: '3.14' cache: 'pip' - name: install python packages run: pip install -r main-repo-triage/requirements.txt From 953659980f4ca6123a7e5e6bba3e9e7003eeb3ef Mon Sep 17 00:00:00 2001 From: rimasx Date: Thu, 9 Oct 2025 06:45:25 -0400 Subject: [PATCH 21/28] Translated using Weblate (Estonian) Translation: Jellyfin/Jellyfin Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/et/ --- Emby.Server.Implementations/Localization/Core/et.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Emby.Server.Implementations/Localization/Core/et.json b/Emby.Server.Implementations/Localization/Core/et.json index 486e62dfd2..61ee475a94 100644 --- a/Emby.Server.Implementations/Localization/Core/et.json +++ b/Emby.Server.Implementations/Localization/Core/et.json @@ -124,8 +124,8 @@ "HearingImpaired": "Kuulmispuudega", "TaskKeyframeExtractorDescription": "Eraldab videofailidest võtmekaadreid, et luua täpsemaid HLS-i esitusloendeid. See ülesanne võib kesta pikka aega.", "TaskKeyframeExtractor": "Võtmekaadri ekstraktor", - "TaskRefreshTrickplayImages": "Loo eelvaate pildid", - "TaskRefreshTrickplayImagesDescription": "Loob eelvaated videotele, kus lubatud.", + "TaskRefreshTrickplayImages": "Loo trickplay pildid", + "TaskRefreshTrickplayImagesDescription": "Loob trickplay eelvaated videotele lubatud meediakogudes.", "TaskAudioNormalization": "Heli Normaliseerimine", "TaskAudioNormalizationDescription": "Skaneerib faile heli normaliseerimise andmete jaoks.", "TaskCleanCollectionsAndPlaylistsDescription": "Eemaldab kogumikest ja esitusloenditest asjad, mida enam ei eksisteeri.", @@ -135,7 +135,7 @@ "TaskMoveTrickplayImagesDescription": "Liigutab trickplay pildid meediakogu sätete kohaselt.", "TaskExtractMediaSegments": "Meediasegmentide skaneerimine", "TaskExtractMediaSegmentsDescription": "Eraldab või võtab meediasegmendid MediaSegment'i lubavatest pluginatest.", - "TaskMoveTrickplayImages": "Migreeri trickplay piltide asukoht", + "TaskMoveTrickplayImages": "Muuda trickplay piltide asukoht", "CleanupUserDataTask": "Kasutajaandmete puhastamise ülesanne", "CleanupUserDataTaskDescription": "Puhastab kõik kasutajaandmed (vaatamise olek, lemmikute olek jne) meediast, mis pole enam vähemalt 90 päeva saadaval olnud." } From 8f2fd65810601cc22170b757656840fff9202328 Mon Sep 17 00:00:00 2001 From: faquino Date: Thu, 9 Oct 2025 07:35:59 -0400 Subject: [PATCH 22/28] Translated using Weblate (Galician) Translation: Jellyfin/Jellyfin Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/gl/ --- .../Localization/Core/gl.json | 66 +++++++++---------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/Emby.Server.Implementations/Localization/Core/gl.json b/Emby.Server.Implementations/Localization/Core/gl.json index 0e7c9dc3a0..5b85d6ec0e 100644 --- a/Emby.Server.Implementations/Localization/Core/gl.json +++ b/Emby.Server.Implementations/Localization/Core/gl.json @@ -1,65 +1,65 @@ { - "Albums": "Álbumes", + "Albums": "Álbums", "Collections": "Coleccións", "ChapterNameValue": "Capítulo {0}", "Channels": "Canles", - "CameraImageUploadedFrom": "Cargouse unha nova imaxe da cámara desde {0}", + "CameraImageUploadedFrom": "Cargouse unha nova imaxe da cámara dende {0}", "Books": "Libros", "AuthenticationSucceededWithUserName": "{0} autenticouse correctamente", "Artists": "Artistas", - "Application": "Aplicativo", - "NotificationOptionServerRestartRequired": "Necesario un reinicio do servidor", - "NotificationOptionPluginUpdateInstalled": "Actualización do Plugin instalada", + "Application": "Aplicación", + "NotificationOptionServerRestartRequired": "Necesario o reinicio do servidor", + "NotificationOptionPluginUpdateInstalled": "Actualización do plugin instalada", "NotificationOptionPluginUninstalled": "Plugin desinstalado", "NotificationOptionPluginInstalled": "Plugin instalado", - "NotificationOptionPluginError": "Fallo do Plugin", + "NotificationOptionPluginError": "Fallo do plugin", "NotificationOptionNewLibraryContent": "Novo contido engadido", "NotificationOptionInstallationFailed": "Fallo na instalación", - "NotificationOptionCameraImageUploaded": "Imaxe da cámara subida", - "NotificationOptionAudioPlaybackStopped": "Reproducción de audio parada", + "NotificationOptionCameraImageUploaded": "Imaxe da cámara cargada", + "NotificationOptionAudioPlaybackStopped": "Reproducción de audio detida", "NotificationOptionAudioPlayback": "Reproducción de audio comezada", "NotificationOptionApplicationUpdateInstalled": "Actualización da aplicación instalada", "NotificationOptionApplicationUpdateAvailable": "Actualización da aplicación dispoñible", - "NewVersionIsAvailable": "Unha nova versión do Servidor Jellyfin está dispoñible para descarga.", + "NewVersionIsAvailable": "Nova versión do Servidor Jellyfin dispoñible para descargar.", "NameSeasonUnknown": "Tempada descoñecida", "NameSeasonNumber": "Tempada {0}", "NameInstallFailed": "{0} instalación fallida", - "MusicVideos": "Vídeos Musicais", + "MusicVideos": "Vídeos musicais", "Music": "Música", "Movies": "Películas", - "MixedContent": "Contido Mixto", - "MessageServerConfigurationUpdated": "A configuración do servidor foi actualizada", - "MessageNamedServerConfigurationUpdatedWithValue": "A sección de configuración {0} do servidor foi actualizada", - "MessageApplicationUpdatedTo": "O servidor Jellyfin foi actualizado a {0}", - "MessageApplicationUpdated": "O servidor Jellyfin foi actualizado", + "MixedContent": "Contido mixto", + "MessageServerConfigurationUpdated": "Actualizouse a configuración do servidor", + "MessageNamedServerConfigurationUpdatedWithValue": "Actualizouse a sección de configuración {0} do servidor", + "MessageApplicationUpdatedTo": "O servidor Jellyfin actualizouse a {0}", + "MessageApplicationUpdated": "O servidor Jellyfin actualizouse", "Latest": "Último", - "LabelRunningTimeValue": "Tempo de execución: {0}", + "LabelRunningTimeValue": "Tempo en execución: {0}", "LabelIpAddressValue": "Enderezo IP: {0}", - "ItemRemovedWithName": "{0} foi eliminado da biblioteca", - "ItemAddedWithName": "{0} foi engadido a biblioteca", + "ItemRemovedWithName": "{0} eliminouse da biblioteca", + "ItemAddedWithName": "{0} engadiuse á biblioteca", "Inherit": "Herdar", "HomeVideos": "Videos caseiros", - "HeaderRecordingGroups": "Grupos de Grabación", + "HeaderRecordingGroups": "Grupos de grabación", "HeaderNextUp": "De seguido", "HeaderLiveTV": "TV en directo", - "HeaderFavoriteSongs": "Cancións Favoritas", - "HeaderFavoriteShows": "Series de TV Favoritas", - "HeaderFavoriteEpisodes": "Episodios Favoritos", - "HeaderFavoriteArtists": "Artistas Favoritos", - "HeaderFavoriteAlbums": "Álbunes Favoritos", + "HeaderFavoriteSongs": "Cancións favoritas", + "HeaderFavoriteShows": "Series de TV favoritas", + "HeaderFavoriteEpisodes": "Episodios favoritos", + "HeaderFavoriteArtists": "Artistas favoritos", + "HeaderFavoriteAlbums": "Álbums favoritos", "HeaderContinueWatching": "Seguir vendo", - "HeaderAlbumArtists": "Artistas do Album", + "HeaderAlbumArtists": "Artistas do álbum", "Genres": "Xéneros", "Forced": "Forzado", "Folders": "Cartafoles", "Favorites": "Favoritos", - "FailedLoginAttemptWithUserName": "Intento de incio de sesión fallido {0}", + "FailedLoginAttemptWithUserName": "Intento de inicio de sesión fallido {0}", "DeviceOnlineWithName": "{0} conectouse", "DeviceOfflineWithName": "{0} desconectouse", "Default": "Por defecto", "AppDeviceValues": "Aplicación: {0}, Dispositivo: {1}", "TaskCleanLogs": "Limpar Carpeta de Rexistros", - "TaskCleanActivityLog": "Limpar Rexistro de Actividade", + "TaskCleanActivityLog": "Limpar rexistro de actividade", "TasksChannelsCategory": "Canáis de Internet", "TaskUpdatePlugins": "Actualizar Plugins", "User": "Usuario", @@ -68,7 +68,7 @@ "System": "Sistema", "Sync": "Sincronizar", "SubtitleDownloadFailureFromForItem": "Fallou a descarga de subtítulos para {1} dende {0}", - "StartupEmbyServerIsLoading": "O Servidor Jellyfin está cargando. Por favor, reinténteo en breve.", + "StartupEmbyServerIsLoading": "O servidor Jellyfin está cargando. Por favor, ténteo axiña outra vez.", "Songs": "Cancións", "Shows": "Programas", "ServerNameNeedsToBeRestarted": "{0} precisa ser reiniciado", @@ -85,14 +85,14 @@ "UserDeletedWithName": "O usuario {0} foi borrado", "UserCreatedWithName": "O usuario {0} foi creado", "Plugin": "Plugin", - "NotificationOptionVideoPlaybackStopped": "Reproducción de vídeo parada", + "NotificationOptionVideoPlaybackStopped": "Reproducción de vídeo detida", "NotificationOptionVideoPlayback": "Reproducción de vídeo iniciada", "NotificationOptionUserLockedOut": "Usuario bloqueado", "NotificationOptionTaskFailed": "Falla na tarefa axendada", "TaskCleanTranscodeDescription": "Borra os arquivos de transcode anteriores a un día.", "TaskCleanTranscode": "Limpar Directorio de Transcode", "UserStoppedPlayingItemWithValues": "{0} rematou de reproducir {1} en {2}", - "UserStartedPlayingItemWithValues": "{0} está reproducindo {1} en {2}", + "UserStartedPlayingItemWithValues": "{0} está a reproducir {1} en {2}", "TaskDownloadMissingSubtitlesDescription": "Busca en internet por subtítulos que faltan baseado na configuración de metadatos.", "TaskDownloadMissingSubtitles": "Descargar subtítulos que faltan", "TaskRefreshChannelsDescription": "Refresca a información do canle de internet.", @@ -106,18 +106,18 @@ "TaskRefreshChapterImagesDescription": "Crea previsualizacións para videos que teñen capítulos.", "TaskRefreshChapterImages": "Extraer Imaxes dos Capítulos", "TaskCleanCacheDescription": "Borra ficheiros da caché que xa non son necesarios para o sistema.", - "TaskCleanCache": "Limpa Directorio de Caché", + "TaskCleanCache": "Limpar directorio de caché", "TaskCleanActivityLogDescription": "Borra as entradas no rexistro de actividade anteriores á data configurada.", "TasksApplicationCategory": "Aplicación", "ValueSpecialEpisodeName": "Especial - {0}", "ValueHasBeenAddedToLibrary": "{0} foi engadido a túa libraría multimedia", - "TasksLibraryCategory": "Libraría", + "TasksLibraryCategory": "Biblioteca", "TasksMaintenanceCategory": "Mantemento", "VersionNumber": "Versión {0}", "UserPolicyUpdatedWithName": "A política de usuario foi actualizada para {0}", "UserPasswordChangedWithName": "Cambiouse o contrasinal para o usuario {0}", "UserOnlineFromDevice": "{0} está en liña desde {1}", - "UserOfflineFromDevice": "{0} desconectouse desde {1}", + "UserOfflineFromDevice": "{0} desconectouse dende {1}", "TaskOptimizeDatabaseDescription": "Compacta e libera o espazo libre da base de datos. Executar esta tarefa logo de realizar mudanzas que impliquen modificacións da base de datos ou despois de escanear a biblioteca pode traer mellorías de desempeño.", "TaskOptimizeDatabase": "Optimizar base de datos", "TaskKeyframeExtractorDescription": "Extrae fragmentos do vídeo para crear listas de reprodución HLS máis precisas. Podería levarlle bastante tempo.", From 8c51920911bf12a13e835f8585abb40e9c3f0fb1 Mon Sep 17 00:00:00 2001 From: rimasx Date: Thu, 9 Oct 2025 07:00:36 -0400 Subject: [PATCH 23/28] Translated using Weblate (Estonian) Translation: Jellyfin/Jellyfin Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/et/ --- Emby.Server.Implementations/Localization/Core/et.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Emby.Server.Implementations/Localization/Core/et.json b/Emby.Server.Implementations/Localization/Core/et.json index 61ee475a94..09c45d7504 100644 --- a/Emby.Server.Implementations/Localization/Core/et.json +++ b/Emby.Server.Implementations/Localization/Core/et.json @@ -123,7 +123,7 @@ "External": "Väline", "HearingImpaired": "Kuulmispuudega", "TaskKeyframeExtractorDescription": "Eraldab videofailidest võtmekaadreid, et luua täpsemaid HLS-i esitusloendeid. See ülesanne võib kesta pikka aega.", - "TaskKeyframeExtractor": "Võtmekaadri ekstraktor", + "TaskKeyframeExtractor": "Võtmekaadrite eraldamine", "TaskRefreshTrickplayImages": "Loo trickplay pildid", "TaskRefreshTrickplayImagesDescription": "Loob trickplay eelvaated videotele lubatud meediakogudes.", "TaskAudioNormalization": "Heli Normaliseerimine", From 9b7d5edc868949c7975d3b4da27b1350708a2d43 Mon Sep 17 00:00:00 2001 From: taham Date: Thu, 9 Oct 2025 15:50:50 -0400 Subject: [PATCH 24/28] Translated using Weblate (Urdu (Pakistan)) Translation: Jellyfin/Jellyfin Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/ur_PK/ --- Emby.Server.Implementations/Localization/Core/ur_PK.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Emby.Server.Implementations/Localization/Core/ur_PK.json b/Emby.Server.Implementations/Localization/Core/ur_PK.json index 5d3f194329..f6539adff3 100644 --- a/Emby.Server.Implementations/Localization/Core/ur_PK.json +++ b/Emby.Server.Implementations/Localization/Core/ur_PK.json @@ -123,5 +123,9 @@ "TaskCleanActivityLogDescription": "تشکیل شدہ عمر سے زیادہ پرانی سرگرمی لاگ اندراجات کو حذف کرتا ہے۔", "External": "بیرونی", "HearingImpaired": "قوت سماعت سے محروم", - "TaskCleanActivityLog": "سرگرمی لاگ کو صاف کریں" + "TaskCleanActivityLog": "سرگرمی لاگ کو صاف کریں", + "TaskDownloadMissingLyrics": "غائب بول ڈاؤن لوڈ کریں", + "TaskDownloadMissingLyricsDescription": "گانے کے غائب بول ڈاؤن لوڈ کریں", + "TaskAudioNormalization": "آڈیو نارملائزیشن", + "TaskAudioNormalizationDescription": "آڈیو نارملائزیشن ڈیٹا کے لیے فائلوں کو سکین کرتا ہے۔" } From e876e784da461a0a2687b7230574d691f4f2bf80 Mon Sep 17 00:00:00 2001 From: taham Date: Thu, 9 Oct 2025 15:56:56 -0400 Subject: [PATCH 25/28] Translated using Weblate (Urdu) Translation: Jellyfin/Jellyfin Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/ur/ --- .../Localization/Core/ur.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/Emby.Server.Implementations/Localization/Core/ur.json b/Emby.Server.Implementations/Localization/Core/ur.json index 3766830413..94d9c8541e 100644 --- a/Emby.Server.Implementations/Localization/Core/ur.json +++ b/Emby.Server.Implementations/Localization/Core/ur.json @@ -1,3 +1,16 @@ { - "Books": "کتابیں" + "Books": "کتابیں", + "AppDeviceValues": "ایپ: {0}، ڈیوائس: {1}", + "Albums": "البمز", + "Application": "ایپلی کیشن", + "Artists": "فنکار", + "AuthenticationSucceededWithUserName": "{0} کی کامیابی سے تصدیق ہو چکی ہے", + "CameraImageUploadedFrom": "ایک نئی کیمرے کی تصویر {0} سے اپ لوڈ کی گئی ہے", + "Channels": "چینلز", + "ChapterNameValue": "باب {0}", + "Collections": "مجموعے", + "Default": "ڈیفالٹ", + "DeviceOfflineWithName": "{0} نے رابطہ منقطع کر دیا ہے", + "DeviceOnlineWithName": "{0} منسلک ہے", + "External": "بیرونی" } From a565e4896e0fa8dd21cd0ed65ff6a8b4eec503f8 Mon Sep 17 00:00:00 2001 From: faquino Date: Fri, 10 Oct 2025 03:32:59 -0400 Subject: [PATCH 26/28] Translated using Weblate (Galician) Translation: Jellyfin/Jellyfin Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/gl/ --- .../Localization/Core/gl.json | 70 +++++++++---------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/Emby.Server.Implementations/Localization/Core/gl.json b/Emby.Server.Implementations/Localization/Core/gl.json index 5b85d6ec0e..b3f137febd 100644 --- a/Emby.Server.Implementations/Localization/Core/gl.json +++ b/Emby.Server.Implementations/Localization/Core/gl.json @@ -3,7 +3,7 @@ "Collections": "Coleccións", "ChapterNameValue": "Capítulo {0}", "Channels": "Canles", - "CameraImageUploadedFrom": "Cargouse unha nova imaxe da cámara dende {0}", + "CameraImageUploadedFrom": "Cargouse unha nova imaxe de cámara dende {0}", "Books": "Libros", "AuthenticationSucceededWithUserName": "{0} autenticouse correctamente", "Artists": "Artistas", @@ -53,15 +53,15 @@ "Forced": "Forzado", "Folders": "Cartafoles", "Favorites": "Favoritos", - "FailedLoginAttemptWithUserName": "Intento de inicio de sesión fallido {0}", + "FailedLoginAttemptWithUserName": "Fallo de intento de inicio de sesión dende {0}", "DeviceOnlineWithName": "{0} conectouse", "DeviceOfflineWithName": "{0} desconectouse", "Default": "Por defecto", "AppDeviceValues": "Aplicación: {0}, Dispositivo: {1}", - "TaskCleanLogs": "Limpar Carpeta de Rexistros", + "TaskCleanLogs": "Limpar directorio de rexistros", "TaskCleanActivityLog": "Limpar rexistro de actividade", - "TasksChannelsCategory": "Canáis de Internet", - "TaskUpdatePlugins": "Actualizar Plugins", + "TasksChannelsCategory": "Canles da Internet", + "TaskUpdatePlugins": "Actualizar plugins", "User": "Usuario", "Undefined": "Sen definir", "TvShows": "Programas de TV", @@ -89,28 +89,28 @@ "NotificationOptionVideoPlayback": "Reproducción de vídeo iniciada", "NotificationOptionUserLockedOut": "Usuario bloqueado", "NotificationOptionTaskFailed": "Falla na tarefa axendada", - "TaskCleanTranscodeDescription": "Borra os arquivos de transcode anteriores a un día.", - "TaskCleanTranscode": "Limpar Directorio de Transcode", + "TaskCleanTranscodeDescription": "Borra os ficheiros de transcodificación de hai más dun día.", + "TaskCleanTranscode": "Limpar o directorio de transcodificación", "UserStoppedPlayingItemWithValues": "{0} rematou de reproducir {1} en {2}", "UserStartedPlayingItemWithValues": "{0} está a reproducir {1} en {2}", - "TaskDownloadMissingSubtitlesDescription": "Busca en internet por subtítulos que faltan baseado na configuración de metadatos.", + "TaskDownloadMissingSubtitlesDescription": "Procura na internet os subtítulos que faltan segundo a configuración de metadatos.", "TaskDownloadMissingSubtitles": "Descargar subtítulos que faltan", - "TaskRefreshChannelsDescription": "Refresca a información do canle de internet.", - "TaskRefreshChannels": "Refrescar Canles", - "TaskUpdatePluginsDescription": "Descarga e instala actualizacións para plugins que están configurados para actualizarse automáticamente.", - "TaskRefreshPeopleDescription": "Actualiza os metadatos dos actores e directores na túa libraría multimedia.", - "TaskRefreshPeople": "Refrescar Persoas", - "TaskCleanLogsDescription": "Borra arquivos de rexistro que son mais antigos que {0} días.", - "TaskRefreshLibraryDescription": "Escanea a tua libraría multimedia buscando novos arquivos e refrescando os metadatos.", - "TaskRefreshLibrary": "Escanear Libraría Multimedia", - "TaskRefreshChapterImagesDescription": "Crea previsualizacións para videos que teñen capítulos.", - "TaskRefreshChapterImages": "Extraer Imaxes dos Capítulos", + "TaskRefreshChannelsDescription": "Refresca a información da canle de internet.", + "TaskRefreshChannels": "Refrescar canles", + "TaskUpdatePluginsDescription": "Descarga e instala actualizacións dos plugins configurados para actualizarse automáticamente.", + "TaskRefreshPeopleDescription": "Actualiza os metadatos dos actores e directores na túa biblioteca de medios.", + "TaskRefreshPeople": "Refrescar persoas", + "TaskCleanLogsDescription": "Borra ficheiros de rexistro con máis de {0} días de antigüidade.", + "TaskRefreshLibraryDescription": "Escanea a túa biblioteca de medios á procura de novos ficheiros e refresca os metadatos.", + "TaskRefreshLibrary": "Escanear a biblioteca de medios", + "TaskRefreshChapterImagesDescription": "Crea miniaturas dos vídeos que teñen capítulos.", + "TaskRefreshChapterImages": "Extraer imaxes dos capítulos", "TaskCleanCacheDescription": "Borra ficheiros da caché que xa non son necesarios para o sistema.", "TaskCleanCache": "Limpar directorio de caché", - "TaskCleanActivityLogDescription": "Borra as entradas no rexistro de actividade anteriores á data configurada.", + "TaskCleanActivityLogDescription": "Borra do rexistro de actividade as entradas anteriores á data configurada.", "TasksApplicationCategory": "Aplicación", "ValueSpecialEpisodeName": "Especial - {0}", - "ValueHasBeenAddedToLibrary": "{0} foi engadido a túa libraría multimedia", + "ValueHasBeenAddedToLibrary": "{0} engadiuse á túa biblioteca de medios", "TasksLibraryCategory": "Biblioteca", "TasksMaintenanceCategory": "Mantemento", "VersionNumber": "Versión {0}", @@ -118,24 +118,24 @@ "UserPasswordChangedWithName": "Cambiouse o contrasinal para o usuario {0}", "UserOnlineFromDevice": "{0} está en liña desde {1}", "UserOfflineFromDevice": "{0} desconectouse dende {1}", - "TaskOptimizeDatabaseDescription": "Compacta e libera o espazo libre da base de datos. Executar esta tarefa logo de realizar mudanzas que impliquen modificacións da base de datos ou despois de escanear a biblioteca pode traer mellorías de desempeño.", + "TaskOptimizeDatabaseDescription": "Compacta e libera espazo na base de datos. Executar esta tarefa logo de facer cambios que muden a base de datos ou despois de escanear a biblioteca pode mellorar o rendemento.", "TaskOptimizeDatabase": "Optimizar base de datos", - "TaskKeyframeExtractorDescription": "Extrae fragmentos do vídeo para crear listas de reprodución HLS máis precisas. Podería levarlle bastante tempo.", + "TaskKeyframeExtractorDescription": "Extrae fotogramas clave dos vídeos para crear listas de reprodución HLS máis precisas. Podería levar moito tempo.", "External": "Externo", "HearingImpaired": "Problemas de audición", - "TaskKeyframeExtractor": "Extractor de fragmentos", - "TaskAudioNormalization": "Normalización do audio", - "TaskRefreshTrickplayImagesDescription": "Crea vistas previas de reprodución con truco para vídeos en bibliotecas activadas.", + "TaskKeyframeExtractor": "Extractor de fotogramas clave", + "TaskAudioNormalization": "Normalización de volume", + "TaskRefreshTrickplayImagesDescription": "Crea miniaturas de previsualización para os vídeos nas bibliotecas habilitadas.", "TaskDownloadMissingLyrics": "Descargar letras que faltan", - "TaskDownloadMissingLyricsDescription": "Descargas de letras das cancións", + "TaskDownloadMissingLyricsDescription": "Descarga as letras das cancións", "TaskCleanCollectionsAndPlaylists": "Limpar coleccións e listas de reprodución", - "TaskCleanCollectionsAndPlaylistsDescription": "Elimina elementos de coleccións e listas de reprodución que xa non existen.", - "TaskExtractMediaSegmentsDescription": "Extrae ou obtén segmentos multimedia de complementos habilitados para o Segmento de medios.", - "TaskExtractMediaSegments": "Escaneo de segmentos multimedia", - "TaskMoveTrickplayImages": "Migrar a localización da imaxe de Trickplay", - "TaskMoveTrickplayImagesDescription": "Move os ficheiros de reprodución con trickplay existentes segundo a configuración da biblioteca.", - "TaskRefreshTrickplayImages": "Xerar imaxes de Trickplay", - "TaskAudioNormalizationDescription": "Analiza ficheiros para obter datos de normalización de audio.", - "CleanupUserDataTask": "Tarefa de limpeza de datos do usuario", - "CleanupUserDataTaskDescription": "Limpa todos os datos do usuario (Estado de visualización, estado de favorito, etc) da multimedia que leve non presente polo menos durante 90 días." + "TaskCleanCollectionsAndPlaylistsDescription": "Quita ítems que xa non existen das coleccións e listas de reprodución.", + "TaskExtractMediaSegmentsDescription": "Procura segmentos de medios cos plugins habilitados.", + "TaskExtractMediaSegments": "Escaneo de segmentos de medios", + "TaskMoveTrickplayImages": "Migrar as miniaturas de previsualización a outra ubicación", + "TaskMoveTrickplayImagesDescription": "Move as miniaturas de previsualización segundo a configuración da biblioteca.", + "TaskRefreshTrickplayImages": "Xerar miniaturas de previsualización", + "TaskAudioNormalizationDescription": "Escanea ficheiros á procura de datos de normalización de volume.", + "CleanupUserDataTask": "Tarefa de limpeza de datos dos usuarios", + "CleanupUserDataTaskDescription": "Limpa todos os datos do usuario (estado de visualización, de favorito etc.) dos medios ausentes polo menos 90 días." } From 864d6d0b8f1f06c23ac588088d0eb009547a4862 Mon Sep 17 00:00:00 2001 From: rimasx Date: Fri, 10 Oct 2025 06:32:35 -0400 Subject: [PATCH 27/28] Translated using Weblate (Estonian) Translation: Jellyfin/Jellyfin Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/et/ --- Emby.Server.Implementations/Localization/Core/et.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Emby.Server.Implementations/Localization/Core/et.json b/Emby.Server.Implementations/Localization/Core/et.json index 09c45d7504..30d38dde37 100644 --- a/Emby.Server.Implementations/Localization/Core/et.json +++ b/Emby.Server.Implementations/Localization/Core/et.json @@ -126,8 +126,8 @@ "TaskKeyframeExtractor": "Võtmekaadrite eraldamine", "TaskRefreshTrickplayImages": "Loo trickplay pildid", "TaskRefreshTrickplayImagesDescription": "Loob trickplay eelvaated videotele lubatud meediakogudes.", - "TaskAudioNormalization": "Heli Normaliseerimine", - "TaskAudioNormalizationDescription": "Skaneerib faile heli normaliseerimise andmete jaoks.", + "TaskAudioNormalization": "Normaliseeri heli", + "TaskAudioNormalizationDescription": "Otsib failidest helitugevuse normaliseerimise teavet.", "TaskCleanCollectionsAndPlaylistsDescription": "Eemaldab kogumikest ja esitusloenditest asjad, mida enam ei eksisteeri.", "TaskCleanCollectionsAndPlaylists": "Puhasta kogumikud ja esitusloendid", "TaskDownloadMissingLyrics": "Lae alla puuduolev lüürika", From 3cb99add76393cb97b74e748b52fa85510dd250a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 10 Oct 2025 15:51:16 +0000 Subject: [PATCH 28/28] Update github/codeql-action action to v4 --- .github/workflows/ci-codeql-analysis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci-codeql-analysis.yml b/.github/workflows/ci-codeql-analysis.yml index 3981d22261..473302ddef 100644 --- a/.github/workflows/ci-codeql-analysis.yml +++ b/.github/workflows/ci-codeql-analysis.yml @@ -27,11 +27,11 @@ jobs: dotnet-version: '9.0.x' - name: Initialize CodeQL - uses: github/codeql-action/init@a8d1ac45b9a34d11fe398d5503176af0d06b303e # v3.30.7 + uses: github/codeql-action/init@e296a935590eb16afc0c0108289f68c87e2a89a5 # v4.30.7 with: languages: ${{ matrix.language }} queries: +security-extended - name: Autobuild - uses: github/codeql-action/autobuild@a8d1ac45b9a34d11fe398d5503176af0d06b303e # v3.30.7 + uses: github/codeql-action/autobuild@e296a935590eb16afc0c0108289f68c87e2a89a5 # v4.30.7 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@a8d1ac45b9a34d11fe398d5503176af0d06b303e # v3.30.7 + uses: github/codeql-action/analyze@e296a935590eb16afc0c0108289f68c87e2a89a5 # v4.30.7