cover art on track listings

This commit is contained in:
Boof2015
2026-06-17 19:37:55 -04:00
parent c1aad57548
commit 97522ea5cf
5 changed files with 229 additions and 6 deletions
+49 -2
View File
@@ -4,10 +4,57 @@
import { AstraLibraryScanner } from '../../modules/astra-library-scanner';
let artworkDir: string | null = null;
let artworkThumbDir: string | null = null;
export function artworkUri(hash: string): string {
type ArtworkThumbScanner = {
getArtworkThumbDirPath?: () => string;
ensureArtworkThumbnails?: (hashes: string[]) => Promise<number>;
};
function getArtworkDir(): string {
if (!artworkDir) {
artworkDir = AstraLibraryScanner.getArtworkDirPath();
}
return `file://${artworkDir}/${hash}`;
return artworkDir;
}
function fallbackArtworkThumbDir(): string {
const dir = getArtworkDir();
return dir.endsWith('/artwork') ? `${dir.slice(0, -'/artwork'.length)}/artwork-thumbs` : `${dir}-thumbs`;
}
function getArtworkThumbDir(): string {
if (!artworkThumbDir) {
const scanner = AstraLibraryScanner as unknown as ArtworkThumbScanner;
artworkThumbDir = scanner.getArtworkThumbDirPath?.() ?? fallbackArtworkThumbDir();
}
return artworkThumbDir;
}
function artworkThumbFileName(hash: string): string {
const dot = hash.lastIndexOf('.');
const stem = dot > 0 ? hash.slice(0, dot) : hash;
return `${stem}.jpg`;
}
export function artworkUri(hash: string): string {
return `file://${getArtworkDir()}/${hash}`;
}
export function artworkThumbUri(hash: string): string {
return `file://${getArtworkThumbDir()}/${artworkThumbFileName(hash)}`;
}
export async function ensureArtworkThumbnails(
hashes: readonly (string | null | undefined)[]
): Promise<number> {
const unique = new Set<string>();
for (const hash of hashes) {
const cleanHash = hash?.trim();
if (cleanHash) unique.add(cleanHash);
}
if (unique.size === 0) return 0;
const scanner = AstraLibraryScanner as unknown as ArtworkThumbScanner;
return scanner.ensureArtworkThumbnails?.([...unique]) ?? 0;
}