multiScrobble method

Future<ScrobbleResponse> multiScrobble({
  1. required List<Scrobble> scrobbleList,
})

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);
}