release / govulncheck (push) Successful in 21s
release / web (push) Successful in 1m21s
release / go (push) Successful in 1m39s
release / integration (push) Successful in 5m31s
release / android (push) Successful in 6m5s
release / Build signed APK (releases and dev) (push) Successful in 6m21s
release / Attach APK to the Release (tag releases only) (push) Skipped
release / Build + push container image (push) Successful in 32s
release / Verify release artifacts (tag releases only) (push) Skipped
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
34 lines
2.0 KiB
Svelte
34 lines
2.0 KiB
Svelte
<script lang="ts">
|
|
import SectionRail from '#lib/components/SectionRail.svelte';
|
|
import { countOf } from '#lib/admin/queues.js';
|
|
import type { AdminSummary, WantCounts } from '#lib/api/types.js';
|
|
|
|
// The Collection's sections, down the left (#5572): the catalogue of
|
|
// artists first, then the sections that show state. Activity carries a
|
|
// second, accented count when downloads are waiting on a person. Unmatched
|
|
// holds the library albums no MusicBrainz album matched (#5579). Upgrades
|
|
// holds the albums held but wanted for a better copy (#5524). Reports,
|
|
// Duplicates and Suspect sources are the library's health queues (M504):
|
|
// their counts come from the admin summary and are accented, as they wait
|
|
// on a person.
|
|
|
|
let { counts, summary }: { counts?: WantCounts; summary?: AdminSummary } = $props();
|
|
|
|
// An artist's page belongs to the catalogue.
|
|
const items = $derived([
|
|
{ href: '/collection', label: 'Catalogue', count: counts?.artists, exact: true, also: ['/collection/artist/'] },
|
|
{ href: '/collection/wanted', label: 'Wanted', count: counts?.wanted },
|
|
{ href: '/collection/missing', label: 'Missing files', count: counts?.missing },
|
|
{ href: '/collection/upgrades', label: 'Upgrades', count: counts?.upgrades },
|
|
{ href: '/collection/activity', label: 'Activity', count: counts?.activity, attention: counts?.attention },
|
|
{ href: '/collection/following', label: 'Following', count: counts?.following },
|
|
{ href: '/collection/blocked', label: 'Blocked', count: counts?.blocked },
|
|
{ href: '/collection/unmatched', label: 'Unmatched', count: counts?.unmatched },
|
|
{ href: '/collection/reports', label: 'Reports', attention: countOf(summary, 'reports') },
|
|
{ href: '/collection/duplicates', label: 'Duplicates', attention: countOf(summary, 'duplicates') },
|
|
{ href: '/collection/suspect-sources', label: 'Suspect sources', attention: countOf(summary, 'suspect') }
|
|
]);
|
|
</script>
|
|
|
|
<SectionRail label="Collection sections" {items} />
|