feat: duplicates resolve themselves without Lidarr (M502 #5517)
release / govulncheck (push) Successful in 37s
release / web (push) Successful in 1m13s
release / go (push) Successful in 1m29s
release / integration (push) Successful in 4m46s
release / android (push) Successful in 5m36s
release / Build signed APK (releases and dev) (push) Successful in 5m54s
release / Attach APK to the Release (tag releases only) (push) Skipped
release / Build + push container image (push) Successful in 6m48s
release / Verify release artifacts (tag releases only) (push) Skipped
release / govulncheck (push) Successful in 37s
release / web (push) Successful in 1m13s
release / go (push) Successful in 1m29s
release / integration (push) Successful in 4m46s
release / android (push) Successful in 5m36s
release / Build signed APK (releases and dev) (push) Successful in 5m54s
release / Attach APK to the Release (tag releases only) (push) Skipped
release / Build + push container image (push) Successful in 6m48s
release / Verify release artifacts (tag releases only) (push) Skipped
Lidarr is off, and with it the resolver had stopped merging: it only merged when Lidarr had said which copies it mapped. Minstrel is now the only program writing the library, so the rule is about the copies: - A song held twice on one album: the extra copies merge into the one whose tags fit best (then lossless, larger, older). - Across releases or under another title: when every copy but one is a video rip (held back, or named like one and not marked fine), the rips merge into the one that is not. - Clean copies on different releases are linked as one song, as before. - Anything else waits for the operator. Gone with Lidarr: release switches and their settle window, the unmapped-file read, the rip search, the merge guard and its 409/503, lidarr.Client's release methods, and duplicate_group_members.lidarr_state (migration 0078). The duplicates page drops the per-copy Lidarr badge and the blocked-merge notice; past release changes stay in its history. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -334,40 +334,3 @@ UPDATE tracks
|
||||
SET source_verdict = sqlc.arg(verdict)::text, source_verdict_at = now()
|
||||
WHERE id = sqlc.arg(id)
|
||||
AND source_verdict IS NOT NULL;
|
||||
|
||||
-- name: ListAlbumsWithSoleCopyRips :many
|
||||
-- Albums holding a held-back video rip that is the only copy of its song
|
||||
-- (#5447): no present copy that is not a rip shares its song, and no pending
|
||||
-- duplicate group pairs it with one. Lidarr counts such a track fulfilled, so
|
||||
-- the resolver asks it to search the album for a better release. Albums
|
||||
-- searched within the last week are left out, most rips first.
|
||||
SELECT a.id AS album_id,
|
||||
a.release_group_mbid::text AS release_group_mbid,
|
||||
a.title AS album_title,
|
||||
ar.name AS artist_name,
|
||||
count(*)::bigint AS rips
|
||||
FROM tracks t
|
||||
JOIN albums a ON a.id = t.album_id
|
||||
JOIN artists ar ON ar.id = a.artist_id
|
||||
WHERE t.source_verdict = 'suspect'
|
||||
AND t.missing_since IS NULL
|
||||
AND a.release_group_mbid IS NOT NULL
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM tracks c
|
||||
WHERE c.song_key = t.song_key AND c.id <> t.id
|
||||
AND c.missing_since IS NULL AND c.source_verdict IS DISTINCT FROM 'suspect')
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM duplicate_group_members m
|
||||
JOIN duplicate_groups g ON g.id = m.group_id AND g.status = 'pending'
|
||||
JOIN duplicate_group_members m2 ON m2.group_id = g.id AND m2.track_id <> t.id
|
||||
JOIN tracks c ON c.id = m2.track_id
|
||||
WHERE m.track_id = t.id
|
||||
AND c.missing_since IS NULL AND c.source_verdict IS DISTINCT FROM 'suspect')
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM audit_log l
|
||||
WHERE l.action = 'lidarr_rip_search'
|
||||
AND l.metadata->>'album_id' = a.id::text
|
||||
AND l.created_at > now() - interval '7 days')
|
||||
GROUP BY a.id, a.release_group_mbid, a.title, ar.name
|
||||
ORDER BY count(*) DESC, a.id
|
||||
LIMIT sqlc.arg(page_limit);
|
||||
|
||||
Reference in New Issue
Block a user