UNPKG

@rocksky/cli

Version:

Command-line interface for Rocksky – scrobble tracks, view stats, and manage your listening history

48 lines (40 loc) 1.2 kB
import { RockskyClient } from "client"; import { ctx } from "context"; import { logger } from "logger"; import { SelectTrack } from "schema/tracks"; export type MusicBrainzArtist = { mbid: string; name: string; }; export type MatchTrackResult = SelectTrack & { genres: string[] | null; artistPicture: string | null; releaseDate: string | null; year: number | null; mbArtists: MusicBrainzArtist[] | null; }; export async function matchTrack( track: string, artist: string, ): Promise<MatchTrackResult | null> { let match; const cached = await ctx.kv.getItem(`${track} - ${artist}`); const client = new RockskyClient(); if (cached) { match = cached; client.matchSong(track, artist).then((newMatch) => { if (newMatch) { ctx.kv.setItem(`${track} - ${artist}`.toLowerCase(), newMatch); } }); } else { match = await client.matchSong(track, artist); await ctx.kv.setItem(`${track} - ${artist}`.toLowerCase(), match); } if (!match.title || !match.artist) { logger.error`Failed to match track ${track} by ${artist}`; return null; } logger.info`💿 Matched track ${match.title} by ${match.artist}`; return match; }