import path from 'node:path'; import { openSqlite, type SqlDatabase } from '../sqlite'; import { importLegacyFiles } from './legacy'; export type { SqlDatabase }; export const lastfmDataDirectory = path.resolve(process.env.LASTFM_DATA_DIR ?? 'data/lastfm'); const databasePath = path.join(lastfmDataDirectory, 'lastfm.db'); const schema = ` CREATE TABLE IF NOT EXISTS scrobbles ( played_at INTEGER NOT NULL, artist TEXT NOT NULL, track TEXT NOT NULL, album TEXT NOT NULL, UNIQUE (played_at, artist, track) ); CREATE INDEX IF NOT EXISTS scrobbles_played_at ON scrobbles (played_at); CREATE TABLE IF NOT EXISTS album_covers ( artist TEXT NOT NULL, album TEXT NOT NULL, image TEXT NOT NULL, PRIMARY KEY (artist, album) ); CREATE TABLE IF NOT EXISTS track_covers ( artist TEXT NOT NULL, track TEXT NOT NULL, image TEXT NOT NULL, PRIMARY KEY (artist, track) ); CREATE TABLE IF NOT EXISTS cover_images ( id TEXT PRIMARY KEY, content_type TEXT NOT NULL, data BLOB NOT NULL ); `; let opening: Promise | null = null; async function openLastfmDatabase(): Promise { const database = await openSqlite(databasePath, schema); await importLegacyFiles(database, lastfmDataDirectory); return database; } export function lastfmDatabase(): Promise { opening ??= openLastfmDatabase(); return opening; }