From 51e20a14c29b67bf9e8c0bbf9e92f1fe406062c3 Mon Sep 17 00:00:00 2001 From: karm235 Date: Tue, 7 Oct 2025 12:11:02 -0500 Subject: [PATCH 01/82] Fix LUFS detection deadlock on albums with verbose output --- .../Tasks/AudioNormalizationTask.cs | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/Emby.Server.Implementations/ScheduledTasks/Tasks/AudioNormalizationTask.cs b/Emby.Server.Implementations/ScheduledTasks/Tasks/AudioNormalizationTask.cs index a28f280afd..78b8759c5d 100644 --- a/Emby.Server.Implementations/ScheduledTasks/Tasks/AudioNormalizationTask.cs +++ b/Emby.Server.Implementations/ScheduledTasks/Tasks/AudioNormalizationTask.cs @@ -261,14 +261,23 @@ public partial class AudioNormalizationTask : IScheduledTask using var reader = process.StandardError; float? lufs = null; + var foundLufs = false; await foreach (var line in reader.ReadAllLinesAsync(cancellationToken).ConfigureAwait(false)) { - Match match = LUFSRegex().Match(line); - if (match.Success) + if (foundLufs) { - lufs = float.Parse(match.Groups[1].ValueSpan, CultureInfo.InvariantCulture.NumberFormat); - break; + continue; } + + Match match = LUFSRegex().Match(line); + if (!match.Success) + { + continue; + } + + lufs = float.Parse(match.Groups[1].ValueSpan, CultureInfo.InvariantCulture.NumberFormat); + foundLufs = true; + // Don't break - keep draining stderr to prevent buffer deadlock } if (lufs is null) From 6097045d71b4518cc118a98917125927c676e128 Mon Sep 17 00:00:00 2001 From: karm235 Date: Tue, 7 Oct 2025 12:20:08 -0500 Subject: [PATCH 02/82] cleanup --- .../ScheduledTasks/Tasks/AudioNormalizationTask.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Emby.Server.Implementations/ScheduledTasks/Tasks/AudioNormalizationTask.cs b/Emby.Server.Implementations/ScheduledTasks/Tasks/AudioNormalizationTask.cs index 78b8759c5d..36708e2582 100644 --- a/Emby.Server.Implementations/ScheduledTasks/Tasks/AudioNormalizationTask.cs +++ b/Emby.Server.Implementations/ScheduledTasks/Tasks/AudioNormalizationTask.cs @@ -277,7 +277,6 @@ public partial class AudioNormalizationTask : IScheduledTask lufs = float.Parse(match.Groups[1].ValueSpan, CultureInfo.InvariantCulture.NumberFormat); foundLufs = true; - // Don't break - keep draining stderr to prevent buffer deadlock } if (lufs is null) From a9198e865ec5b6ae821add0a6d82c5c88ea78e8a Mon Sep 17 00:00:00 2001 From: KGT1 Date: Wed, 8 Oct 2025 14:33:50 +0000 Subject: [PATCH 03/82] map tmdbcol nfo property to TmdbCollection --- MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs b/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs index 75ad0d58ca..4131029861 100644 --- a/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs +++ b/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs @@ -107,6 +107,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers // Additional Mappings _validProviderIds.Add("collectionnumber", "TmdbCollection"); _validProviderIds.Add("tmdbcolid", "TmdbCollection"); + _validProviderIds.Add("tmdbcol", "TmdbCollection"); _validProviderIds.Add("imdb_id", "Imdb"); Fetch(item, metadataFile, GetXmlReaderSettings(), cancellationToken); From b3b9f74014901f3a4a1f68c07e2ae3b29b12a585 Mon Sep 17 00:00:00 2001 From: KGT1 Date: Wed, 8 Oct 2025 15:23:50 +0000 Subject: [PATCH 04/82] also apply provider normalisation on uniqueid type tag --- MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs b/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs index 4131029861..4cbcd8f27c 100644 --- a/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs +++ b/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs @@ -591,7 +591,18 @@ namespace MediaBrowser.XbmcMetadata.Parsers var provider = reader.GetAttribute("type"); var providerId = reader.ReadElementContentAsString(); - item.TrySetProviderId(provider, providerId); + + if (!string.IsNullOrEmpty(provider)) + { + if (_validProviderIds.TryGetValue(provider, out string? normalizedProvider)) + { + item.TrySetProviderId(normalizedProvider, providerId); + } + else + { + item.TrySetProviderId(provider, providerId); + } + } break; case "thumb": From e28d5470061960b5b3ed6e5ee6b89306ef429182 Mon Sep 17 00:00:00 2001 From: KGT1 Date: Wed, 8 Oct 2025 15:32:30 +0000 Subject: [PATCH 05/82] add test for new uniqueid nfo key normalisation --- .../Parsers/MovieNfoParserTests.cs | 19 +++++++++++++++++++ .../Test Data/Lilo & Stitch.nfo | 1 + 2 files changed, 20 insertions(+) diff --git a/tests/Jellyfin.XbmcMetadata.Tests/Parsers/MovieNfoParserTests.cs b/tests/Jellyfin.XbmcMetadata.Tests/Parsers/MovieNfoParserTests.cs index e422eb9b8b..1e8652f4b9 100644 --- a/tests/Jellyfin.XbmcMetadata.Tests/Parsers/MovieNfoParserTests.cs +++ b/tests/Jellyfin.XbmcMetadata.Tests/Parsers/MovieNfoParserTests.cs @@ -275,5 +275,24 @@ namespace Jellyfin.XbmcMetadata.Tests.Parsers Assert.StartsWith(">>", item.Overview, StringComparison.InvariantCulture); Assert.EndsWith("<<", item.Overview, StringComparison.InvariantCulture); } + + [Fact] + public void Parse_TmdbcolUniqueId_NormalizedToTmdbCollection() + { + var result = new MetadataResult