fix: imported FLAC, Ogg and Opus files keep their track and disc numbers (#6171)
release / govulncheck (push) Successful in 14s
release / web (push) Successful in 1m21s
release / go (push) Successful in 1m29s
release / integration (push) Successful in 5m1s
release / android (push) Successful in 5m5s
release / Build signed APK (releases and dev) (push) Successful in 5m21s
release / Attach APK to the Release (tag releases only) (push) Skipped
release / Build + push container image (push) Successful in 16s
release / Verify release artifacts (tag releases only) (push) Skipped
release / govulncheck (push) Successful in 14s
release / web (push) Successful in 1m21s
release / go (push) Successful in 1m29s
release / integration (push) Successful in 5m1s
release / android (push) Successful in 5m5s
release / Build signed APK (releases and dev) (push) Successful in 5m21s
release / Attach APK to the Release (tag releases only) (push) Skipped
release / Build + push container image (push) Successful in 16s
release / Verify release artifacts (tag releases only) (push) Skipped
The importer wrote track=N/M for every format, which ffmpeg stores in a Vorbis comment as TRACKNUMBER=3/20; dhowden/tag reads a Vorbis TRACKNUMBER with a bare Atoi, so it came back 0. All 245 tracks imported since 2026-10-10 (Humanz, Plastic Beach, the Gorillaz super deluxe and twelve more albums) have no track or disc number, and their album pages have no order. - The importer writes a Vorbis track and disc number alone, with TRACKTOTAL and DISCTOTAL, as Picard does. ID3 and MP4 keep N/M. - ReadTrackAndDisc takes the number before a slash when the Vorbis reader returns 0, for the scanner and for the import's own check of a download. - tagReadVersion 6 re-reads the files already held (tag reads only). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -38,16 +38,32 @@ type Tags struct {
|
||||
// ID3 takes Picard's TXXX descriptions, which ffmpeg writes for any key it
|
||||
// has no frame for. MP4's freeform atoms ffmpeg cannot write, so an M4A
|
||||
// gets the plain names only.
|
||||
//
|
||||
// A Vorbis track or disc number is the number alone, its count in
|
||||
// TRACKTOTAL and DISCTOTAL, as Picard writes them: dhowden/tag reads
|
||||
// TRACKNUMBER "3/20" as 0, and every album imported before #6171 lost its
|
||||
// order that way. ID3 and MP4 take "3/20", which their readers parse.
|
||||
func (t Tags) args(ext string) []string {
|
||||
vorbis := ext == ".flac" || ext == ".ogg" || ext == ".opus"
|
||||
track, disc := ofN(t.Track, t.Tracks), ofN(t.Disc, t.Discs)
|
||||
if vorbis {
|
||||
track, disc = ofN(t.Track, 0), ofN(t.Disc, 0)
|
||||
}
|
||||
kv := [][2]string{
|
||||
{"title", t.Title}, {"artist", t.Artist}, {"album", t.Album}, {"album_artist", t.AlbumArtist},
|
||||
{"track", ofN(t.Track, t.Tracks)}, {"disc", ofN(t.Disc, t.Discs)},
|
||||
{"track", track}, {"disc", disc},
|
||||
}
|
||||
if t.Year > 0 {
|
||||
kv = append(kv, [2]string{"date", strconv.Itoa(t.Year)})
|
||||
}
|
||||
switch ext {
|
||||
case ".flac", ".ogg", ".opus":
|
||||
if t.Track > 0 && t.Tracks > 0 {
|
||||
kv = append(kv, [2]string{"TRACKTOTAL", strconv.Itoa(t.Tracks)})
|
||||
}
|
||||
if t.Disc > 0 && t.Discs > 0 {
|
||||
kv = append(kv, [2]string{"DISCTOTAL", strconv.Itoa(t.Discs)})
|
||||
}
|
||||
kv = append(kv,
|
||||
[2]string{"MUSICBRAINZ_ALBUMID", t.ReleaseMBID},
|
||||
[2]string{"MUSICBRAINZ_RELEASEGROUPID", t.GroupMBID},
|
||||
|
||||
Reference in New Issue
Block a user