From 007a1f416147b5fb1f4ef1c9ec51edfc01dc3709 Mon Sep 17 00:00:00 2001 From: SupItsMike Date: Sun, 31 Aug 2025 20:37:55 -0400 Subject: [PATCH 1/5] Fixed: Add Date/Year to Xiph and Ape `TagTypes`. --- src/NzbDrone.Core/MediaFiles/AudioTag.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/MediaFiles/AudioTag.cs b/src/NzbDrone.Core/MediaFiles/AudioTag.cs index 500a94bed..ba883da8f 100644 --- a/src/NzbDrone.Core/MediaFiles/AudioTag.cs +++ b/src/NzbDrone.Core/MediaFiles/AudioTag.cs @@ -381,6 +381,7 @@ public void Write(string path) var flactag = (TagLib.Ogg.XiphComment)file.GetTag(TagLib.TagTypes.Xiph); flactag.SetField("DATE", Date.HasValue ? Date.Value.ToString("yyyy-MM-dd") : null); + flactag.SetField("YEAR", Date.HasValue ? Date.Value.Year.ToString() : null); flactag.SetField("ORIGINALDATE", OriginalReleaseDate.HasValue ? OriginalReleaseDate.Value.ToString("yyyy-MM-dd") : null); flactag.SetField("ORIGINALYEAR", OriginalReleaseDate.HasValue ? OriginalReleaseDate.Value.Year.ToString() : null); flactag.SetField("TRACKTOTAL", TrackCount); @@ -400,7 +401,8 @@ public void Write(string path) { var apetag = (TagLib.Ape.Tag)file.GetTag(TagTypes.Ape); - apetag.SetValue("Year", Date.HasValue ? Date.Value.ToString("yyyy-MM-dd") : null); + apetag.SetValue("Date", Date.HasValue ? Date.Value.ToString("yyyy-MM-dd") : null); + apetag.SetValue("Year", Date.HasValue ? Date.Value.Year.ToString() : null); apetag.SetValue("Original Date", OriginalReleaseDate.HasValue ? OriginalReleaseDate.Value.ToString("yyyy-MM-dd") : null); apetag.SetValue("Original Year", OriginalReleaseDate.HasValue ? OriginalReleaseDate.Value.Year.ToString() : null); apetag.SetValue("Media", Media); From aae68e7175a80f5c3ee9fee2210f5cccba78daf5 Mon Sep 17 00:00:00 2001 From: SupItsMike Date: Sun, 31 Aug 2025 20:38:58 -0400 Subject: [PATCH 2/5] Fixed: Use Album Date if Release Date is null. --- src/NzbDrone.Core/MediaFiles/AudioTagService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Core/MediaFiles/AudioTagService.cs b/src/NzbDrone.Core/MediaFiles/AudioTagService.cs index 8b4dae447..e4a0384fa 100644 --- a/src/NzbDrone.Core/MediaFiles/AudioTagService.cs +++ b/src/NzbDrone.Core/MediaFiles/AudioTagService.cs @@ -115,8 +115,8 @@ public AudioTag GetTrackMetadata(TrackFile trackfile) // We may have omitted media so index in the list isn't the same as medium number Media = release.Media.SingleOrDefault(x => x.Number == track.MediumNumber).Format, - Date = release.ReleaseDate, - Year = (uint)album.ReleaseDate?.Year, + Date = release.ReleaseDate ?? album.ReleaseDate, + Year = (uint)(album.ReleaseDate?.Year ?? release.ReleaseDate?.Year ?? 0), OriginalReleaseDate = album.ReleaseDate, OriginalYear = (uint)album.ReleaseDate?.Year, Publisher = release.Label.FirstOrDefault(), From da447354d772951a9865df84d409b91d102fc579 Mon Sep 17 00:00:00 2001 From: SupItsMike Date: Sun, 31 Aug 2025 20:39:21 -0400 Subject: [PATCH 3/5] Fixed: Handle nulls better for Media and Original Year. --- src/NzbDrone.Core/MediaFiles/AudioTagService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Core/MediaFiles/AudioTagService.cs b/src/NzbDrone.Core/MediaFiles/AudioTagService.cs index e4a0384fa..7797b5d2f 100644 --- a/src/NzbDrone.Core/MediaFiles/AudioTagService.cs +++ b/src/NzbDrone.Core/MediaFiles/AudioTagService.cs @@ -114,11 +114,11 @@ public AudioTag GetTrackMetadata(TrackFile trackfile) DiscCount = (uint)release.Media.Count, // We may have omitted media so index in the list isn't the same as medium number - Media = release.Media.SingleOrDefault(x => x.Number == track.MediumNumber).Format, + Media = release.Media.SingleOrDefault(x => x.Number == track.MediumNumber)?.Format, Date = release.ReleaseDate ?? album.ReleaseDate, Year = (uint)(album.ReleaseDate?.Year ?? release.ReleaseDate?.Year ?? 0), OriginalReleaseDate = album.ReleaseDate, - OriginalYear = (uint)album.ReleaseDate?.Year, + OriginalYear = (uint)(album.ReleaseDate?.Year ?? 0), Publisher = release.Label.FirstOrDefault(), Genres = album.Genres.Any() ? album.Genres.ToArray() : artist.Genres.ToArray(), ImageFile = imageFile, From 7c4c8e48031898435e260ac34b425519813c6c8a Mon Sep 17 00:00:00 2001 From: SupItsMike Date: Thu, 11 Sep 2025 20:26:52 -0400 Subject: [PATCH 4/5] Fixed weird issue after fixing conflict. --- src/NzbDrone.Core/MediaFiles/AudioTagService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Core/MediaFiles/AudioTagService.cs b/src/NzbDrone.Core/MediaFiles/AudioTagService.cs index a01213542..86cd5e51d 100644 --- a/src/NzbDrone.Core/MediaFiles/AudioTagService.cs +++ b/src/NzbDrone.Core/MediaFiles/AudioTagService.cs @@ -143,7 +143,7 @@ public AudioTag GetTrackMetadata(TrackFile trackfile) Album = album.Title, Disc = (uint)track.MediumNumber, DiscCount = (uint)release.Media.Count, - + // We may have omitted media so index in the list isn't the same as medium number Media = release.Media.SingleOrDefault(x => x.Number == track.MediumNumber)?.Format, Date = release.ReleaseDate ?? album.ReleaseDate, @@ -164,7 +164,7 @@ public AudioTag GetTrackMetadata(TrackFile trackfile) MusicBrainzTrackId = track.ForeignRecordingId, MusicBrainzReleaseTrackId = track.ForeignTrackId, MusicBrainzAlbumComment = album.Disambiguation, - }; + }; } catch (Exception ex) { From 3651bba77255033b97f1918677ed2a89e851ca68 Mon Sep 17 00:00:00 2001 From: SupItsMike Date: Thu, 11 Sep 2025 22:46:36 -0400 Subject: [PATCH 5/5] Revert change to Ape TagTypes. --- src/NzbDrone.Core/MediaFiles/AudioTag.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/NzbDrone.Core/MediaFiles/AudioTag.cs b/src/NzbDrone.Core/MediaFiles/AudioTag.cs index ba883da8f..d724a663d 100644 --- a/src/NzbDrone.Core/MediaFiles/AudioTag.cs +++ b/src/NzbDrone.Core/MediaFiles/AudioTag.cs @@ -401,8 +401,7 @@ public void Write(string path) { var apetag = (TagLib.Ape.Tag)file.GetTag(TagTypes.Ape); - apetag.SetValue("Date", Date.HasValue ? Date.Value.ToString("yyyy-MM-dd") : null); - apetag.SetValue("Year", Date.HasValue ? Date.Value.Year.ToString() : null); + apetag.SetValue("Year", Date.HasValue ? Date.Value.ToString("yyyy-MM-dd") : null); apetag.SetValue("Original Date", OriginalReleaseDate.HasValue ? OriginalReleaseDate.Value.ToString("yyyy-MM-dd") : null); apetag.SetValue("Original Year", OriginalReleaseDate.HasValue ? OriginalReleaseDate.Value.Year.ToString() : null); apetag.SetValue("Media", Media);