fix(multi-scrobbler): handle extended API format for artist/album fields
Last.fm/Libre.fm API with extended=1 returns artist as
{ "#text": "...", mbid: "..." } not { name: "..." }.
Added resolveField helper that handles string, #text, and
alt key formats to prevent missing artist/album data.
This commit is contained in:
parent
400398829e
commit
28958a79af
2 changed files with 18 additions and 6 deletions
|
|
@ -107,6 +107,12 @@ export class LastFmService extends BaseService {
|
|||
? parseInt(lastTrack.date.uts)
|
||||
: Math.floor(Date.now() / 1000);
|
||||
|
||||
const resolveField = (v: any, altKey = "name"): string => {
|
||||
if (!v) return "";
|
||||
if (typeof v === "string") return v;
|
||||
return v["#text"] ?? v[altKey] ?? "";
|
||||
};
|
||||
|
||||
let duration: number | null = null;
|
||||
let endTime: number | null = null;
|
||||
|
||||
|
|
@ -116,7 +122,7 @@ export class LastFmService extends BaseService {
|
|||
const trackInfoParams = new URLSearchParams({
|
||||
method: "track.getInfo",
|
||||
track: lastTrack.name,
|
||||
artist: lastTrack.artist.name,
|
||||
artist: resolveField(lastTrack.artist),
|
||||
api_key: currentSettings.apiKey,
|
||||
format: "json",
|
||||
});
|
||||
|
|
@ -144,8 +150,8 @@ export class LastFmService extends BaseService {
|
|||
|
||||
const track: Track = {
|
||||
name: lastTrack.name,
|
||||
artist: lastTrack.artist.name,
|
||||
album: lastTrack.album["#text"],
|
||||
artist: resolveField(lastTrack.artist),
|
||||
album: resolveField(lastTrack.album, "title"),
|
||||
albumArt,
|
||||
url: lastTrack.url,
|
||||
date: lastTrack.date?.["#text"] ?? "now",
|
||||
|
|
|
|||
|
|
@ -110,6 +110,12 @@ export class LibreFmService extends BaseService {
|
|||
? parseInt(lastTrack.date.uts)
|
||||
: Math.floor(Date.now() / 1000);
|
||||
|
||||
const resolveField = (v: any, altKey = "name"): string => {
|
||||
if (!v) return "";
|
||||
if (typeof v === "string") return v;
|
||||
return v["#text"] ?? v[altKey] ?? "";
|
||||
};
|
||||
|
||||
let duration: number | null = null;
|
||||
let endTime: number | null = null;
|
||||
|
||||
|
|
@ -119,7 +125,7 @@ export class LibreFmService extends BaseService {
|
|||
const trackInfoParams = new URLSearchParams({
|
||||
method: "track.getInfo",
|
||||
track: lastTrack.name,
|
||||
artist: lastTrack.artist.name,
|
||||
artist: resolveField(lastTrack.artist),
|
||||
api_key: apiKey,
|
||||
format: "json",
|
||||
});
|
||||
|
|
@ -147,8 +153,8 @@ export class LibreFmService extends BaseService {
|
|||
|
||||
const track: Track = {
|
||||
name: lastTrack.name,
|
||||
artist: lastTrack.artist.name,
|
||||
album: lastTrack.album["#text"],
|
||||
artist: resolveField(lastTrack.artist),
|
||||
album: resolveField(lastTrack.album, "title"),
|
||||
albumArt,
|
||||
url: lastTrack.url,
|
||||
date: lastTrack.date?.["#text"] ?? "now",
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue