Fix library page showing wrong artist albums due to cross-artist GROUP BY merge
This commit is contained in:
parent
7138125b9e
commit
03442327ee
1 changed files with 20 additions and 11 deletions
|
|
@ -6067,7 +6067,8 @@ class MusicDatabase:
|
||||||
|
|
||||||
# Get artist's albums with track counts and completion
|
# Get artist's albums with track counts and completion
|
||||||
# Include albums from ALL artists with the same name (fixes duplicate artist issue)
|
# Include albums from ALL artists with the same name (fixes duplicate artist issue)
|
||||||
# Group by title+year to merge split albums (e.g. Navidrome splitting one album into multiple entries)
|
# Group by artist_id+title+year to merge Navidrome split albums (same artist,
|
||||||
|
# same album split into multiple DB entries) WITHOUT merging across different artists
|
||||||
cursor.execute("""
|
cursor.execute("""
|
||||||
SELECT
|
SELECT
|
||||||
MIN(a.id) as id,
|
MIN(a.id) as id,
|
||||||
|
|
@ -6076,15 +6077,19 @@ class MusicDatabase:
|
||||||
SUM(a.track_count) as track_count,
|
SUM(a.track_count) as track_count,
|
||||||
MAX(a.thumb_url) as thumb_url,
|
MAX(a.thumb_url) as thumb_url,
|
||||||
MAX(a.musicbrainz_release_id) as musicbrainz_release_id,
|
MAX(a.musicbrainz_release_id) as musicbrainz_release_id,
|
||||||
COUNT(t.id) as owned_tracks
|
(SELECT COUNT(*) FROM tracks t WHERE t.album_id IN (
|
||||||
|
SELECT a2.id FROM albums a2
|
||||||
|
WHERE a2.artist_id = a.artist_id
|
||||||
|
AND a2.title = a.title
|
||||||
|
AND COALESCE(a2.year, '') = COALESCE(a.year, '')
|
||||||
|
)) as owned_tracks
|
||||||
FROM albums a
|
FROM albums a
|
||||||
LEFT JOIN tracks t ON a.id = t.album_id
|
|
||||||
WHERE a.artist_id IN (
|
WHERE a.artist_id IN (
|
||||||
SELECT id FROM artists
|
SELECT id FROM artists
|
||||||
WHERE name = (SELECT name FROM artists WHERE id = ?)
|
WHERE name = (SELECT name FROM artists WHERE id = ?)
|
||||||
AND server_source = (SELECT server_source FROM artists WHERE id = ?)
|
AND server_source = (SELECT server_source FROM artists WHERE id = ?)
|
||||||
)
|
)
|
||||||
GROUP BY a.title, a.year
|
GROUP BY a.artist_id, a.title, a.year
|
||||||
ORDER BY a.year DESC, a.title
|
ORDER BY a.year DESC, a.title
|
||||||
""", (artist_id, artist_id))
|
""", (artist_id, artist_id))
|
||||||
|
|
||||||
|
|
@ -6096,19 +6101,23 @@ class MusicDatabase:
|
||||||
singles = []
|
singles = []
|
||||||
|
|
||||||
# Get total stats for the artist (including all artists with same name)
|
# Get total stats for the artist (including all artists with same name)
|
||||||
# Count distinct title+year pairs to avoid overcounting split albums
|
|
||||||
cursor.execute("""
|
cursor.execute("""
|
||||||
SELECT
|
SELECT
|
||||||
COUNT(DISTINCT a.title || '::' || COALESCE(CAST(a.year AS TEXT), '')) as album_count,
|
COUNT(*) as album_count,
|
||||||
COUNT(DISTINCT t.id) as track_count
|
(SELECT COUNT(*) FROM tracks WHERE album_id IN (
|
||||||
FROM albums a
|
SELECT id FROM albums WHERE artist_id IN (
|
||||||
LEFT JOIN tracks t ON a.id = t.album_id
|
SELECT id FROM artists
|
||||||
WHERE a.artist_id IN (
|
WHERE name = (SELECT name FROM artists WHERE id = ?)
|
||||||
|
AND server_source = (SELECT server_source FROM artists WHERE id = ?)
|
||||||
|
)
|
||||||
|
)) as track_count
|
||||||
|
FROM albums
|
||||||
|
WHERE artist_id IN (
|
||||||
SELECT id FROM artists
|
SELECT id FROM artists
|
||||||
WHERE name = (SELECT name FROM artists WHERE id = ?)
|
WHERE name = (SELECT name FROM artists WHERE id = ?)
|
||||||
AND server_source = (SELECT server_source FROM artists WHERE id = ?)
|
AND server_source = (SELECT server_source FROM artists WHERE id = ?)
|
||||||
)
|
)
|
||||||
""", (artist_id, artist_id))
|
""", (artist_id, artist_id, artist_id, artist_id))
|
||||||
|
|
||||||
stats_row = cursor.fetchone()
|
stats_row = cursor.fetchone()
|
||||||
album_count = stats_row['album_count'] if stats_row else 0
|
album_count = stats_row['album_count'] if stats_row else 0
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue