diff options
| author | gnattu <gnattu@users.noreply.github.com> | 2024-09-30 21:15:52 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-09-30 07:15:52 -0600 |
| commit | 7cc3f9506eafe37bc2df263645753c75b6ed3441 (patch) | |
| tree | b65c0e2b7effac46c63cdc7de666215368c94f44 | |
| parent | 9ef7ccfc125d00c0a0ce789626db258a4cb51f2f (diff) | |
Disable ATL's internal ID3v2.2/3 splitting (#12751)
| -rw-r--r-- | MediaBrowser.Providers/MediaInfo/AudioFileProber.cs | 31 |
1 files changed, 11 insertions, 20 deletions
diff --git a/MediaBrowser.Providers/MediaInfo/AudioFileProber.cs b/MediaBrowser.Providers/MediaInfo/AudioFileProber.cs index 296d7d354..27f6d120f 100644 --- a/MediaBrowser.Providers/MediaInfo/AudioFileProber.cs +++ b/MediaBrowser.Providers/MediaInfo/AudioFileProber.cs @@ -28,7 +28,6 @@ namespace MediaBrowser.Providers.MediaInfo public class AudioFileProber { private const char InternalValueSeparator = '\u001F'; - private const char AtlId3V22Separator = '/'; private readonly IMediaEncoder _mediaEncoder; private readonly IItemRepository _itemRepo; @@ -66,6 +65,7 @@ namespace MediaBrowser.Providers.MediaInfo _lyricManager = lyricManager; ATL.Settings.DisplayValueSeparator = InternalValueSeparator; ATL.Settings.UseFileNameWhenNoTitle = false; + ATL.Settings.ID3v2_separatev2v3Values = false; } /// <summary> @@ -164,10 +164,11 @@ namespace MediaBrowser.Providers.MediaInfo var libraryOptions = _libraryManager.GetLibraryOptions(audio); Track track = new Track(audio.Path); - // Current version of ATL split some ID3v2.2/2.3 tags by '/' which is not desired. - var shouldWorkaroundAtlId3V22Split = track.MetadataFormats - .Where(mf => string.Equals(mf.ShortName, "ID3v2", StringComparison.OrdinalIgnoreCase)) - .All(mf => !string.Equals(mf.Name, "ID3v2.4", StringComparison.OrdinalIgnoreCase)); + if (track.MetadataFormats + .All(mf => string.Equals(mf.ShortName, "ID3v1", StringComparison.OrdinalIgnoreCase))) + { + _logger.LogWarning("File {File} only has ID3v1 tags, some fields may be truncated", audio.Path); + } track.Title = string.IsNullOrEmpty(track.Title) ? mediaInfo.Name : track.Title; track.Album = string.IsNullOrEmpty(track.Album) ? mediaInfo.Album : track.Album; @@ -178,7 +179,7 @@ namespace MediaBrowser.Providers.MediaInfo if (audio.SupportsPeople && !audio.LockedFields.Contains(MetadataField.Cast)) { var people = new List<PersonInfo>(); - var albumArtists = string.IsNullOrEmpty(track.AlbumArtist) ? mediaInfo.AlbumArtists : SplitWithWorkaround(track.AlbumArtist, InternalValueSeparator, shouldWorkaroundAtlId3V22Split); + var albumArtists = string.IsNullOrEmpty(track.AlbumArtist) ? mediaInfo.AlbumArtists : track.AlbumArtist.Split(InternalValueSeparator); if (libraryOptions.UseCustomTagDelimiters) { @@ -203,13 +204,13 @@ namespace MediaBrowser.Providers.MediaInfo track.AdditionalFields.TryGetValue("ARTISTS", out var artistsTagString); if (artistsTagString is not null) { - performers = SplitWithWorkaround(artistsTagString, InternalValueSeparator, shouldWorkaroundAtlId3V22Split); + performers = artistsTagString.Split(InternalValueSeparator); } } if (performers is null || performers.Length == 0) { - performers = string.IsNullOrEmpty(track.Artist) ? mediaInfo.Artists : SplitWithWorkaround(track.Artist, InternalValueSeparator, shouldWorkaroundAtlId3V22Split); + performers = string.IsNullOrEmpty(track.Artist) ? mediaInfo.Artists : track.Artist.Split(InternalValueSeparator); } if (libraryOptions.UseCustomTagDelimiters) @@ -229,7 +230,7 @@ namespace MediaBrowser.Providers.MediaInfo } } - foreach (var composer in SplitWithWorkaround(track.Composer, InternalValueSeparator, shouldWorkaroundAtlId3V22Split)) + foreach (var composer in track.Composer.Split(InternalValueSeparator)) { if (!string.IsNullOrEmpty(composer)) { @@ -313,7 +314,7 @@ namespace MediaBrowser.Providers.MediaInfo if (!audio.LockedFields.Contains(MetadataField.Genres)) { - var genres = string.IsNullOrEmpty(track.Genre) ? mediaInfo.Genres : SplitWithWorkaround(track.Genre, InternalValueSeparator, shouldWorkaroundAtlId3V22Split).Distinct(StringComparer.OrdinalIgnoreCase).ToArray(); + var genres = string.IsNullOrEmpty(track.Genre) ? mediaInfo.Genres : track.Genre.Split(InternalValueSeparator).Distinct(StringComparer.OrdinalIgnoreCase).ToArray(); if (libraryOptions.UseCustomTagDelimiters) { @@ -440,15 +441,5 @@ namespace MediaBrowser.Providers.MediaInfo return items; } - - private static string[] SplitWithWorkaround(string val, char separator, bool useWorkaround) - { - if (useWorkaround) - { - val = val.Replace(InternalValueSeparator, AtlId3V22Separator); - } - - return val.Split(separator); - } } } |
