From 48e57198136cf4ca7758c819a95259fc26ceaecf Mon Sep 17 00:00:00 2001 From: Yuri Tatishchev Date: Tue, 10 Feb 2026 04:26:10 -0800 Subject: [PATCH] ui: add tags for dub and rebroadcast --- src/lib/components/SongEntry.svelte | 19 ++++++++++++++----- src/lib/db/client-db/queries.ts | 8 ++++++++ src/lib/player/types.ts | 6 ++++++ src/routes/anime/[annId]/+page.svelte | 8 ++++++-- src/routes/layout.css | 4 ++++ src/routes/list/+page.svelte | 8 ++++++-- src/routes/songs/+page.svelte | 8 +++++--- 7 files changed, 49 insertions(+), 12 deletions(-) diff --git a/src/lib/components/SongEntry.svelte b/src/lib/components/SongEntry.svelte index 98fd5f6..d05d393 100644 --- a/src/lib/components/SongEntry.svelte +++ b/src/lib/components/SongEntry.svelte @@ -19,6 +19,8 @@ artistName: string | null; fileName?: string | null; globalPercent: number | null; + dub: boolean | null; + rebroadcast: boolean | null; }; let { @@ -30,6 +32,8 @@ artistName, fileName = null, globalPercent, + dub, + rebroadcast, }: SongEntryProps = $props(); const typeLabelMap: Record = { @@ -54,6 +58,8 @@ songName, artistName, fileName, + dub, + rebroadcast, }), ); @@ -85,13 +91,16 @@
{animeName} - {displayTypeNumber} - + {displayTypeNumber} + {globalPercent}% + {#if dub} + DUB + {/if} + {#if rebroadcast} + RB + {/if}
diff --git a/src/lib/db/client-db/queries.ts b/src/lib/db/client-db/queries.ts index 8a65edf..af25064 100644 --- a/src/lib/db/client-db/queries.ts +++ b/src/lib/db/client-db/queries.ts @@ -118,6 +118,8 @@ export async function getAnimeWithSongsByAnnId(db: ClientDb, annId: number) { annSongId: animeSongLinks.annSongId, type: animeSongLinks.type, number: animeSongLinks.number, + dub: animeSongLinks.dub, + rebroadcast: animeSongLinks.rebroadcast, songName: songs.name, fileName: songs.fileName, @@ -139,6 +141,8 @@ export async function getAnimeWithSongsByAnnId(db: ClientDb, annId: number) { annSongId: r.annSongId, type: r.type, number: r.number, + dub: r.dub, + rebroadcast: r.rebroadcast, songName: r.songName, fileName: r.fileName, globalPercent: r.globalPercent, @@ -173,6 +177,8 @@ export async function getSongsForMalAnimeIds( annSongId: animeSongLinks.annSongId, type: animeSongLinks.type, number: animeSongLinks.number, + dub: animeSongLinks.dub, + rebroadcast: animeSongLinks.rebroadcast, songName: songs.name, fileName: songs.fileName, @@ -233,6 +239,8 @@ export async function getSongsWithFilters( type: animeSongLinks.type, number: animeSongLinks.number, + dub: animeSongLinks.dub, + rebroadcast: animeSongLinks.rebroadcast, animeAnnId: anime.annId, animeMainName: anime.mainName, diff --git a/src/lib/player/types.ts b/src/lib/player/types.ts index 767f999..5f360a4 100644 --- a/src/lib/player/types.ts +++ b/src/lib/player/types.ts @@ -21,6 +21,8 @@ export type Track = { type?: SongType; number?: number; fileName?: string | null; + dub?: boolean | null; + rebroadcast?: boolean | null; }; export type SongRowLike = { @@ -31,6 +33,8 @@ export type SongRowLike = { songName: string; artistName: string | null; fileName?: string | null; + dub: boolean | null; + rebroadcast: boolean | null; }; /** @@ -55,5 +59,7 @@ export function trackFromSongRow(row: SongRowLike): Track | null { type: row.type, number: row.number, fileName, + dub: row.dub, + rebroadcast: row.rebroadcast, }; } diff --git a/src/routes/anime/[annId]/+page.svelte b/src/routes/anime/[annId]/+page.svelte index 30f29c6..13f55a3 100644 --- a/src/routes/anime/[annId]/+page.svelte +++ b/src/routes/anime/[annId]/+page.svelte @@ -36,6 +36,8 @@ songName: s.songName, artistName: s.artistName, fileName: s.fileName ?? null, + dub: Boolean(s.dub), + rebroadcast: Boolean(s.rebroadcast), }), ) .filter((t) => t !== null); @@ -57,8 +59,8 @@ {#if !data.annId}

Anime not found

- The requested anime entry doesn’t exist (or the route param wasn’t a - valid ANN id). + The requested anime entry doesn’t exist (or the route param wasn’t a valid + ANN id).

{:else if !data.animeWithSongs}

Loading anime…

@@ -166,6 +168,8 @@ artistName={s.artistName} fileName={s.fileName} globalPercent={s.globalPercent} + dub={Boolean(s.dub)} + rebroadcast={Boolean(s.rebroadcast)} /> {/each} diff --git a/src/routes/layout.css b/src/routes/layout.css index 2c9892d..8acd364 100644 --- a/src/routes/layout.css +++ b/src/routes/layout.css @@ -159,6 +159,10 @@ .chip input:checked + span { @apply font-semibold; } + + .tag { + @apply rounded bg-muted px-2 py-0.5 text-sm text-muted-foreground; + } } @layer scn { diff --git a/src/routes/list/+page.svelte b/src/routes/list/+page.svelte index 72ba8b8..57dffd4 100644 --- a/src/routes/list/+page.svelte +++ b/src/routes/list/+page.svelte @@ -62,6 +62,8 @@ songName: r.songName, artistName: songArtistLabel(r), fileName: r.fileName, + dub: Boolean(r.dub), + rebroadcast: Boolean(r.rebroadcast), }), ) .filter((t) => t !== null), @@ -184,8 +186,8 @@ {#if (formMal ?? "").trim() && data.username && (data.malResponse?.data.length ?? 0) > 0 && data.songRows.length === 0}

- No songs matched in the local database. This likely means none of the - MAL anime IDs exist in the AMQ DB. + No songs matched in the local database. This likely means none of the MAL + anime IDs exist in the AMQ DB.

{/if} @@ -204,6 +206,8 @@ artistName={songArtistLabel(r)} fileName={r.fileName} globalPercent={r.globalPercent} + dub={Boolean(r.dub)} + rebroadcast={Boolean(r.rebroadcast)} /> {/each} diff --git a/src/routes/songs/+page.svelte b/src/routes/songs/+page.svelte index 29b39e4..52c1cfa 100644 --- a/src/routes/songs/+page.svelte +++ b/src/routes/songs/+page.svelte @@ -49,6 +49,8 @@ songName: r.songName, artistName: songArtistLabel(r), fileName: r.fileName, + dub: Boolean(r.dub), + rebroadcast: Boolean(r.rebroadcast), }), ) .filter((t) => t !== null), @@ -124,9 +126,7 @@ label="Song Type" items={Object.keys(AmqSongLinkTypeMap).map((type) => ({ label: type, - value: AmqSongLinkTypeMap[ - type as keyof typeof AmqSongLinkTypeMap - ], + value: AmqSongLinkTypeMap[type as keyof typeof AmqSongLinkTypeMap], }))} bind:value={params.type} /> @@ -190,6 +190,8 @@ artistName={songArtistLabel(r)} fileName={r.fileName} globalPercent={r.globalPercent} + dub={Boolean(r.dub)} + rebroadcast={Boolean(r.rebroadcast)} /> {/each}