fix(lastfm): format multiple artists with ampersands for scrobbling

This commit is contained in:
Julien Maille 2026-01-25 11:45:23 +01:00
parent 13627cdd61
commit 4ca1923f15

View file

@ -50,6 +50,21 @@ export class LastFMScrobbler {
return !!this.sessionKey; return !!this.sessionKey;
} }
_getScrobbleArtist(track) {
if (!track) return 'Unknown Artist';
let artistName = 'Unknown Artist';
if (track.artists && track.artists.length > 0) {
artistName = track.artists.map((a) => (typeof a === 'string' ? a : a.name || a)).join(', ');
} else {
artistName = track.artist?.name || track.artist || 'Unknown Artist';
}
if (typeof artistName !== 'string') artistName = 'Unknown Artist';
return artistName.replace(/, /g, ' & ');
}
async generateSignature(params) { async generateSignature(params) {
const filteredParams = { ...params }; const filteredParams = { ...params };
delete filteredParams.format; delete filteredParams.format;
@ -154,7 +169,7 @@ export class LastFMScrobbler {
try { try {
const params = { const params = {
artist: track.artists?.[0]?.name || track.artist?.name || 'Unknown Artist', artist: this._getScrobbleArtist(track),
track: track.title, track: track.title,
}; };
@ -203,7 +218,7 @@ export class LastFMScrobbler {
const timestamp = Math.floor(Date.now() / 1000); const timestamp = Math.floor(Date.now() / 1000);
const params = { const params = {
artist: this.currentTrack.artists?.[0]?.name || this.currentTrack.artist?.name || 'Unknown Artist', artist: this._getScrobbleArtist(this.currentTrack),
track: this.currentTrack.title, track: this.currentTrack.title,
timestamp: timestamp, timestamp: timestamp,
}; };
@ -234,7 +249,7 @@ export class LastFMScrobbler {
try { try {
const params = { const params = {
artist: track.artists?.[0]?.name || track.artist?.name || 'Unknown Artist', artist: this._getScrobbleArtist(track),
track: track.title, track: track.title,
}; };