diff --git a/backend/src/services/musicBrainzService.js b/backend/src/services/musicBrainzService.js index 925f1a4..96bf1a0 100644 --- a/backend/src/services/musicBrainzService.js +++ b/backend/src/services/musicBrainzService.js @@ -49,10 +49,11 @@ function normalizeRelease(release) { })); }); - let coverArtUrl = null; - if (release['cover-art-archive'] && release['cover-art-archive'].front) { - coverArtUrl = `https://coverartarchive.org/release/${release.id}/front-250`; - } + // Always generate the CAA URL when an id is present; the browser/onError + // handles 404s for releases that have no front cover. + const coverArtUrl = release.id + ? `https://coverartarchive.org/release/${release.id}/front-250` + : null; return { mbId: String(release.id || ''), @@ -92,7 +93,7 @@ class MusicBrainzService { url.searchParams.set('query', q); url.searchParams.set('fmt', 'json'); url.searchParams.set('limit', '10'); - url.searchParams.set('inc', 'artist-credits+labels+recordings+cover-art-archive'); + url.searchParams.set('inc', 'artist-credits+labels+recordings'); try { const data = await mbFetch(url.toString()); diff --git a/frontend/src/components/CdMetadataDialog.jsx b/frontend/src/components/CdMetadataDialog.jsx index f99a1f0..ba757c5 100644 --- a/frontend/src/components/CdMetadataDialog.jsx +++ b/frontend/src/components/CdMetadataDialog.jsx @@ -7,6 +7,21 @@ import { InputText } from 'primereact/inputtext'; import { InputNumber } from 'primereact/inputnumber'; import { Checkbox } from 'primereact/checkbox'; +function CoverThumb({ url, alt }) { + const [failed, setFailed] = useState(false); + if (!url || failed) { + return
-
; + } + return ( + {alt} setFailed(true)} + /> + ); +} + function formatDurationMs(ms) { const totalSec = Math.round((ms || 0) / 1000); const min = Math.floor(totalSec / 60); @@ -135,11 +150,7 @@ export default function CdMetadataDialog({ const mbTitleBody = (row) => (
- {row.coverArtUrl ? ( - {row.title} - ) : ( -
-
- )} +
{row.title}
{row.artist}{row.year ? ` | ${row.year}` : ''}