Disable ATL's internal ID3v2.2/3 splitting (#12751)

This commit is contained in:
gnattu 2024-09-30 21:15:52 +08:00 committed by GitHub
parent 9ef7ccfc12
commit 7cc3f9506e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -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);
}
}
}