multiScrobble method
See TrackMethods.scrobble and Scrobble for more information.
Implementation
Future<ScrobbleResponse> multiScrobble({
required List<Scrobble> scrobbleList,
}) async {
// TODO: make a queue for scrobbleList longer than 50?
if (scrobbleList.length > 50) {
return Future.error(
ScrobblenautException(
description: "You've supplied more than 50 scrobbles.",
),
);
}
var parameters = <String, dynamic>{};
var i = 0;
for (var scrobble in scrobbleList) {
parameters['track[$i]'] = scrobble.track;
parameters['album[$i]'] = scrobble.album;
parameters['artist[$i]'] = scrobble.artist;
parameters['albumArtist[$i]'] = scrobble.albumArtist;
parameters['trackNumber[$i]'] = scrobble.trackNumber;
parameters['duration[$i]'] = scrobble.duration?.inSeconds;
parameters['timestamp[$i]'] =
LastFMValueNormalizer.timestampToSecondsSinceEpoch(
scrobble.timestamp,
);
parameters['context[$i]'] = scrobble.context;
parameters['streamId[$i]'] = scrobble.streamId;
parameters['chosenByUser[$i]'] = (scrobble.chosenByUser == null
? null
: (scrobble.chosenByUser! ? 1 : 0));
parameters['mbid[$i]'] = scrobble.mbid;
i++;
}
final request = Request(
api: _api,
method: 'track.scrobble',
parameters: parameters,
)..signRequest();
final response = await request.send(mode: RequestMode.POST);
return ScrobbleResponse.parse(response);
}