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:
1 file changed
+33
-3
@@ -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
|
||||
|
||||
Reference in new issue
Block a user