From 97f256d67f463d752f7adc5b400c4bf34eae1df1 Mon Sep 17 00:00:00 2001 From: Caleb Allen Date: Thu, 5 Mar 2026 13:34:03 -0500 Subject: [PATCH] fix: include full track metadata in GetAudioFilesByReleaseGroup query The GetAudioFilesByReleaseGroup SQL query only selected 6 columns, missing audio properties (sample_rate, bit_depth, channels, bitrate, file_size) and metadata (album, genre, year, composer, file_type). This caused track details opened from the album view to show dashes instead of actual values. Expanded the query to match GetAllTracksWithFullMetadata and updated GetAlbumTracks to use the shared mapTrackRow helper. --- backend/database/sql/queries/audio_files.sql | 20 +++++++++- .../database/sql/sqlcgen/audio_files.sql.go | 40 ++++++++++++++++++- backend/library/query.go | 29 +++++++++----- 3 files changed, 76 insertions(+), 13 deletions(-) diff --git a/backend/database/sql/queries/audio_files.sql b/backend/database/sql/queries/audio_files.sql index db72601..f7f73c9 100644 --- a/backend/database/sql/queries/audio_files.sql +++ b/backend/database/sql/queries/audio_files.sql @@ -137,10 +137,28 @@ SELECT COALESCE(r.name, '') AS title, COALESCE(ac.text, '') AS artist_name, rgr.track_number, - rgr.disc_number + rgr.disc_number, + COALESCE(rg.name, '') AS album, + CAST(COALESCE( + (SELECT GROUP_CONCAT(g.name, '||') + FROM recording_genres rg_sub + JOIN genres g ON rg_sub.genre_id = g.id + WHERE rg_sub.recording_id = r.id), + '' + ) AS TEXT) AS genre, + COALESCE(r.year, 0) AS year, + COALESCE(r.composer, '') AS composer, + COALESCE(ft.extension, '') AS file_type, + af.sample_rate, + af.bit_depth, + af.channels, + af.bitrate, + af.file_size FROM release_group_recordings rgr JOIN recordings r ON rgr.recording_id = r.id JOIN audio_files af ON af.recording_id = r.id LEFT JOIN artist_credit ac ON r.artist_credit_id = ac.id +LEFT JOIN release_groups rg ON rgr.release_group_id = rg.id +LEFT JOIN file_types ft ON af.file_type_id = ft.id WHERE rgr.release_group_id = ? ORDER BY rgr.disc_number, rgr.track_number; diff --git a/backend/database/sql/sqlcgen/audio_files.sql.go b/backend/database/sql/sqlcgen/audio_files.sql.go index f3bdb46..ca8f676 100644 --- a/backend/database/sql/sqlcgen/audio_files.sql.go +++ b/backend/database/sql/sqlcgen/audio_files.sql.go @@ -361,11 +361,29 @@ SELECT COALESCE(r.name, '') AS title, COALESCE(ac.text, '') AS artist_name, rgr.track_number, - rgr.disc_number + rgr.disc_number, + COALESCE(rg.name, '') AS album, + CAST(COALESCE( + (SELECT GROUP_CONCAT(g.name, '||') + FROM recording_genres rg_sub + JOIN genres g ON rg_sub.genre_id = g.id + WHERE rg_sub.recording_id = r.id), + '' + ) AS TEXT) AS genre, + COALESCE(r.year, 0) AS year, + COALESCE(r.composer, '') AS composer, + COALESCE(ft.extension, '') AS file_type, + af.sample_rate, + af.bit_depth, + af.channels, + af.bitrate, + af.file_size FROM release_group_recordings rgr JOIN recordings r ON rgr.recording_id = r.id JOIN audio_files af ON af.recording_id = r.id LEFT JOIN artist_credit ac ON r.artist_credit_id = ac.id +LEFT JOIN release_groups rg ON rgr.release_group_id = rg.id +LEFT JOIN file_types ft ON af.file_type_id = ft.id WHERE rgr.release_group_id = ? ORDER BY rgr.disc_number, rgr.track_number ` @@ -377,6 +395,16 @@ type GetAudioFilesByReleaseGroupRow struct { ArtistName string TrackNumber sql.NullInt64 DiscNumber sql.NullInt64 + Album string + Genre string + Year int64 + Composer string + FileType string + SampleRate int64 + BitDepth int64 + Channels int64 + Bitrate int64 + FileSize int64 } func (q *Queries) GetAudioFilesByReleaseGroup(ctx context.Context, releaseGroupID int64) ([]GetAudioFilesByReleaseGroupRow, error) { @@ -395,6 +423,16 @@ func (q *Queries) GetAudioFilesByReleaseGroup(ctx context.Context, releaseGroupI &i.ArtistName, &i.TrackNumber, &i.DiscNumber, + &i.Album, + &i.Genre, + &i.Year, + &i.Composer, + &i.FileType, + &i.SampleRate, + &i.BitDepth, + &i.Channels, + &i.Bitrate, + &i.FileSize, ); err != nil { return nil, err } diff --git a/backend/library/query.go b/backend/library/query.go index 8738419..b40155c 100644 --- a/backend/library/query.go +++ b/backend/library/query.go @@ -217,17 +217,24 @@ func (l *Library) GetAlbumTracks(albumID int64) ([]Track, error) { tracks := make([]Track, 0, len(rows)) for _, row := range rows { - tracks = append(tracks, Track{ - TrackName: row.Title, - ArtistName: row.ArtistName, - TrackLength: strconv.FormatInt( - row.LengthMilliseconds, - 10, - ), - FilePath: row.FilePath, - TrackNumber: row.TrackNumber.Int64, - DiscNumber: row.DiscNumber.Int64, - }) + tracks = append(tracks, mapTrackRow( + row.FilePath, + row.LengthMilliseconds, + row.Title, + row.ArtistName, + row.TrackNumber, + row.DiscNumber, + row.Album, + row.Genre, + row.Year, + row.Composer, + row.FileType, + row.SampleRate, + row.BitDepth, + row.Channels, + row.Bitrate, + row.FileSize, + )) } return tracks, nil