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:
@@ -70,7 +70,11 @@ var audioExtensions = map[string]bool{
|
||||
// release-track name, so every Vorbis-tagged track came in without its
|
||||
// tag id and waited on an AcoustID lookup. A re-read stores the tag id,
|
||||
// over a looked-up one (D4).
|
||||
const tagReadVersion int16 = 5
|
||||
// 6: a Vorbis TRACKNUMBER or DISCNUMBER written as "3/20" is read (#6171).
|
||||
// dhowden/tag reads it as 0, and Minstrel's own importer wrote it that
|
||||
// way, so all 245 FLAC tracks it imported came in with no track or disc
|
||||
// number and their albums lost their order.
|
||||
const tagReadVersion int16 = 6
|
||||
|
||||
type Stats struct {
|
||||
Scanned int `json:"scanned"`
|
||||
@@ -316,8 +320,7 @@ func (s *Scanner) scanFile(
|
||||
return pgtype.UUID{}, false, fmt.Errorf("album: %w", err)
|
||||
}
|
||||
|
||||
trackNum, _ := meta.Track()
|
||||
discNum, _ := meta.Disc()
|
||||
trackNum, discNum := ReadTrackAndDisc(meta)
|
||||
|
||||
// An unchanged file being re-read only to refresh tag-derived columns
|
||||
// doesn't need another ffprobe: the stored duration is still accurate, and
|
||||
|
||||
Reference in New Issue
Block a user