feat(web): AcoustID card on Integrations — key, threshold, coverage by source (M401 #3922)
release / go (push) Successful in 2m25s
release / web (push) Failing after 26s
release / govulncheck (push) Successful in 21s
release / Attach APK to the Release (tag releases only) (push) Canceled after 0s
release / Build + push container image (push) Canceled after 0s
release / Verify release artifacts (tag releases only) (push) Canceled after 0s
release / integration (push) Canceled after 3m34s
release / android (push) Canceled after 1m3s
release / Build signed APK (releases and dev) (push) Canceled after 1m3s
release / go (push) Successful in 2m25s
release / web (push) Failing after 26s
release / govulncheck (push) Successful in 21s
release / Attach APK to the Release (tag releases only) (push) Canceled after 0s
release / Build + push container image (push) Canceled after 0s
release / Verify release artifacts (tag releases only) (push) Canceled after 0s
release / integration (push) Canceled after 3m34s
release / android (push) Canceled after 1m3s
release / Build signed APK (releases and dev) (push) Canceled after 1m3s
The card takes the slot of the unimplemented "MusicBrainz overrides" placeholder. Rows: - the on switch - a write-only key field (the stored key is never sent back), with a link to register an application - the minimum score (0.5 to 1) Below them, recording-id coverage reads as a column: from tags, looked up, none, and of the none how many are waiting, no match, ambiguous or failed. There is a "Look up now" button and a folded list of the tracks the lookup could not settle. Off, keyless and stopped-short passes are each a visible state with the reason (rule 164). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -27,6 +27,7 @@
|
||||
import { errCode } from '$lib/api/errors';
|
||||
import { pushToast } from '$lib/stores/toast.svelte';
|
||||
import Modal from '$lib/components/Modal.svelte';
|
||||
import AcoustIDCard from '$lib/components/AcoustIDCard.svelte';
|
||||
import NetworkSettingsCard from '$lib/components/NetworkSettingsCard.svelte';
|
||||
import PublicAddressCard from '$lib/components/PublicAddressCard.svelte';
|
||||
import type { LidarrConfig, LidarrTestResult } from '$lib/api/types';
|
||||
@@ -549,22 +550,9 @@
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- MusicBrainz overrides — visually present, not implemented. Foreshadows
|
||||
future integrations so the page doesn't read like Lidarr-only. -->
|
||||
<section class="space-y-2 rounded-xl border border-border bg-surface p-5 opacity-60">
|
||||
<div class="flex items-center justify-between">
|
||||
<h3 class="font-display text-lg font-medium text-text-primary">
|
||||
MusicBrainz overrides
|
||||
</h3>
|
||||
<span
|
||||
class="inline-flex items-center gap-2 rounded-md border border-border px-3 py-1 text-xs text-text-muted"
|
||||
>
|
||||
<span class="h-1.5 w-1.5 rounded-full bg-text-muted"></span>
|
||||
unset
|
||||
</span>
|
||||
</div>
|
||||
<p class="text-sm text-text-secondary">Not yet configured.</p>
|
||||
</section>
|
||||
<!-- AcoustID recording-id lookup (M401). Took the place of a "MusicBrainz
|
||||
overrides" placeholder that held the slot for a non-Lidarr integration. -->
|
||||
<AcoustIDCard />
|
||||
|
||||
<!-- Cover art providers -->
|
||||
<section class="space-y-4 rounded-xl border border-border bg-surface p-5">
|
||||
|
||||
@@ -28,7 +28,12 @@ vi.mock('$lib/api/admin', () => ({
|
||||
testTagProvider: vi.fn(),
|
||||
createSMTPConfigQuery: vi.fn(),
|
||||
updateSMTPConfig: vi.fn(),
|
||||
testSMTPConfig: vi.fn()
|
||||
testSMTPConfig: vi.fn(),
|
||||
// AcoustIDCard loads on mount; a never-settling read leaves it on "Loading…".
|
||||
getAcoustID: vi.fn(() => new Promise(() => {})),
|
||||
updateAcoustIDSettings: vi.fn(),
|
||||
runAcoustIDLookup: vi.fn(),
|
||||
listUnsettledAcoustID: vi.fn()
|
||||
}));
|
||||
|
||||
import IntegrationsPage from './+page.svelte';
|
||||
|
||||
Reference in New Issue
Block a user