fix(local-library): prefer album metadata over folder-derived title (#411)

User-reported: Local Library Albums view showed the folder name as
the album title even when the album tag in the track metadata had
a different value — e.g. folder `Alle Songs` shadowed metadata
`ALBUM.`. Cause: the three metadata-grouped album queries (full-load
`get_albums_metadata_grouped`, chunked `get_albums_metadata_page`,
and `count_albums_metadata_for_page`) projected the title via
`COALESCE(album_group_title, album, 'Unknown Album')`.

`album_group_title` is the snapshot the scanner wrote — it
contains the tag's album when the tag was present at scan time,
otherwise the folder name. So whenever a tag was missing or
changed after scan, the folder name would win over the live
`album` column.

Fixed the priority by querying `album` first and falling back to
`album_group_title` only when the live metadata is empty / NULL /
'Unknown Album':

  COALESCE(
      NULLIF(NULLIF(TRIM(album), ''), 'Unknown Album'),
      album_group_title,
      'Unknown Album'
  )

Folder-grouped queries (which use `album_group_key` first and
intentionally prefer folder-derived titles) are unchanged.

Closes #411

cc
This commit is contained in:
vicrodh committed 2026-05-12 18:10:59 -06:00
1 parent cd7992119b
commit bdf6ca30e5
1 file changed
+33 -3
+33 -3
View File
@@ -1789,7 +1789,17 @@ impl LibraryDatabase {
WITH grouped AS (
SELECT
{group_key} AS group_key,
COALESCE(album_group_title, album, 'Unknown Album') AS title,
-- Prefer `album` (metadata tag) over
-- `album_group_title` (scan-time snapshot, which
-- falls back to folder name if metadata is
-- missing). Fixes #411 — when album metadata is
-- valid, the folder name was winning because
-- COALESCE returned `album_group_title` first.
COALESCE(
NULLIF(NULLIF(TRIM(album), ''), 'Unknown Album'),
album_group_title,
'Unknown Album'
) AS title,
COALESCE(album_artist, artist, 'Unknown Artist') AS artist,
year,
catalog_number,
@@ -2043,7 +2053,17 @@ impl LibraryDatabase {
WITH grouped AS (
SELECT
{group_key} AS group_key,
COALESCE(album_group_title, album, 'Unknown Album') AS title,
-- Prefer `album` (metadata tag) over
-- `album_group_title` (scan-time snapshot, which
-- falls back to folder name if metadata is
-- missing). Fixes #411 — when album metadata is
-- valid, the folder name was winning because
-- COALESCE returned `album_group_title` first.
COALESCE(
NULLIF(NULLIF(TRIM(album), ''), 'Unknown Album'),
album_group_title,
'Unknown Album'
) AS title,
COALESCE(album_artist, artist, 'Unknown Artist') AS artist,
year,
catalog_number,
@@ -2231,7 +2251,17 @@ impl LibraryDatabase {
WITH grouped AS (
SELECT
{group_key} AS group_key,
COALESCE(album_group_title, album, 'Unknown Album') AS title,
-- Prefer `album` (metadata tag) over
-- `album_group_title` (scan-time snapshot, which
-- falls back to folder name if metadata is
-- missing). Fixes #411 — when album metadata is
-- valid, the folder name was winning because
-- COALESCE returned `album_group_title` first.
COALESCE(
NULLIF(NULLIF(TRIM(album), ''), 'Unknown Album'),
album_group_title,
'Unknown Album'
) AS title,
COALESCE(album_artist, artist, 'Unknown Artist') AS artist,
artist AS track_artist
FROM local_tracks