Last.fm & Genius full worker parity, clickable service badges, and playlist folder race condition fix

This commit is contained in:
Broque Thomas 2026-03-10 10:35:55 -07:00
parent dbe0ce4db4
commit f26f6f8266
4 changed files with 19 additions and 1 deletions

View file

@ -352,6 +352,7 @@ class GeniusWorker:
genius_id = str(full_data.get('id', search_data.get('id', '')))
description = self.client.extract_description(full_data.get('description'))
image_url = full_data.get('image_url') or search_data.get('image_url')
genius_url = full_data.get('url') or search_data.get('url')
# Alternate names
alt_names = full_data.get('alternate_names', [])
@ -364,9 +365,10 @@ class GeniusWorker:
genius_last_attempted = CURRENT_TIMESTAMP,
genius_description = ?,
genius_alt_names = ?,
genius_url = ?,
updated_at = CURRENT_TIMESTAMP
WHERE id = ?
""", (genius_id, description, alt_names_json, artist_id))
""", (genius_id, description, alt_names_json, genius_url, artist_id))
# Backfill thumb_url
if image_url:

View file

@ -1478,6 +1478,8 @@ class MusicDatabase:
cursor.execute("ALTER TABLE artists ADD COLUMN genius_description TEXT")
if 'genius_alt_names' not in artists_columns:
cursor.execute("ALTER TABLE artists ADD COLUMN genius_alt_names TEXT")
if 'genius_url' not in artists_columns:
cursor.execute("ALTER TABLE artists ADD COLUMN genius_url TEXT")
cursor.execute("CREATE INDEX IF NOT EXISTS idx_artists_lastfm_status ON artists (lastfm_match_status)")
cursor.execute("CREATE INDEX IF NOT EXISTS idx_artists_genius_id ON artists (genius_id)")

View file

@ -33435,6 +33435,8 @@ function renderArtistMetaPanel(artist) {
{ key: 'deezer_id', label: 'Deezer', svc: 'deezer' },
{ key: 'audiodb_id', label: 'AudioDB', svc: 'audiodb' },
{ key: 'itunes_artist_id', label: 'iTunes', svc: 'itunes' },
{ key: 'lastfm_url', label: 'Last.fm', svc: 'lastfm' },
{ key: 'genius_url', label: 'Genius', svc: 'genius' },
];
idSources.forEach(src => {
if (artist[src.key]) {
@ -33853,6 +33855,7 @@ function renderExpandedAlbumHeader(album) {
{ key: 'deezer_id', label: 'Deezer', svc: 'deezer' },
{ key: 'audiodb_id', label: 'AudioDB', svc: 'audiodb' },
{ key: 'itunes_album_id', label: 'iTunes', svc: 'itunes' },
{ key: 'lastfm_url', label: 'Last.fm', svc: 'lastfm' },
];
idFields.forEach(f => {
if (album[f.key]) {
@ -34386,6 +34389,15 @@ function getServiceUrl(service, entityType, id) {
album: `https://music.apple.com/album/${id}`,
track: `https://music.apple.com/song/${id}`,
},
lastfm: {
artist: id, // lastfm_url is already a full URL
album: id,
track: id,
},
genius: {
artist: id, // genius_url is already a full URL
track: id, // genius_url on tracks is already a full URL
},
};
return urls[service] && urls[service][entityType] || null;
}

View file

@ -30830,6 +30830,8 @@ a.enhanced-id-badge:visited {
.enhanced-id-badge.mb { background: rgba(186, 72, 27, 0.15); color: #e8834a; border: 1px solid rgba(186, 72, 27, 0.25); }
.enhanced-id-badge.deezer { background: rgba(160, 55, 200, 0.15); color: #c770e8; border: 1px solid rgba(160, 55, 200, 0.25); }
.enhanced-id-badge.audiodb { background: rgba(50, 120, 220, 0.15); color: #5a9de6; border: 1px solid rgba(50, 120, 220, 0.25); }
.enhanced-id-badge.lastfm { background: rgba(185, 0, 0, 0.15); color: #d42f2f; border: 1px solid rgba(185, 0, 0, 0.25); }
.enhanced-id-badge.genius { background: rgba(255, 255, 100, 0.12); color: #e8d44d; border: 1px solid rgba(255, 255, 100, 0.2); }
.enhanced-id-badge.server { background: rgba(255,255,255,0.08); color: rgba(255,255,255,0.5); border: 1px solid rgba(255,255,255,0.12); }
.enhanced-meta-edit-toggle {