diff options
| author | Corentin Malbet <154510969+teblam@users.noreply.github.com> | 2025-09-26 22:24:59 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-09-26 14:24:59 -0600 |
| commit | 71ebb1f456b1bb3820c05c248f3ae8f79a0f27f4 (patch) | |
| tree | 6819eb8afe2d494bcd94b868cbaf23a19fe30f57 | |
| parent | 9c298c52f5fb35c55377c9db754c9f6a43256415 (diff) | |
Fixing the UFID field value giving a warning and not being correctly processed (#14851)
| -rw-r--r-- | MediaBrowser.Providers/MediaInfo/AudioFileProber.cs | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/MediaBrowser.Providers/MediaInfo/AudioFileProber.cs b/MediaBrowser.Providers/MediaInfo/AudioFileProber.cs index c0680b901..587cb4092 100644 --- a/MediaBrowser.Providers/MediaInfo/AudioFileProber.cs +++ b/MediaBrowser.Providers/MediaInfo/AudioFileProber.cs @@ -437,12 +437,12 @@ namespace MediaBrowser.Providers.MediaInfo { audio.TrySetProviderId(MetadataProvider.MusicBrainzRecording, recordingMbId); } - else if (TryGetSanitizedAdditionalFields(track, "UFID", out var ufIdValue) && !string.IsNullOrEmpty(ufIdValue)) + else if (TryGetSanitizedUFIDFields(track, out var owner, out var identifier) && !string.IsNullOrEmpty(owner) && !string.IsNullOrEmpty(identifier)) { // If tagged with MB Picard, the format is 'http://musicbrainz.org\0<recording MBID>' - if (ufIdValue.Contains("musicbrainz.org", StringComparison.OrdinalIgnoreCase)) + if (owner.Contains("musicbrainz.org", StringComparison.OrdinalIgnoreCase)) { - audio.TrySetProviderId(MetadataProvider.MusicBrainzRecording, ufIdValue.AsSpan().RightPart('\0').ToString()); + audio.TrySetProviderId(MetadataProvider.MusicBrainzRecording, identifier); } } } @@ -537,5 +537,24 @@ namespace MediaBrowser.Providers.MediaInfo 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); + if (hasField && !string.IsNullOrEmpty(value)) + { + string[] parts = value.Split('\0'); + if (parts.Length == 2) + { + owner = GetSanitizedStringTag(parts[0], track.Path); + identifier = GetSanitizedStringTag(parts[1], track.Path); + return true; + } + } + + owner = null; + identifier = null; + return false; + } } } |
