getRecentTracks method

Future<List<Track>?> getRecentTracks({
  1. required String user,
  2. int page = 1,
  3. int limit = 50,
  4. DateTime? fromDate,
  5. DateTime? toDate,
  6. bool extended = false,
})

Get a list of the recent tracks listened to by this user.

NOTE: the output list is already ordered by last listened first.

https://www.last.fm/api/show/user.getRecentTracks

Implementation

Future<List<Track>?> getRecentTracks({
  required String user,
  int page = 1,
  int limit = 50, // MAX 200
  DateTime? fromDate,
  DateTime? toDate,
  bool extended = false,
}) async {
  if (limit > 200) {
    return Future.error(
      ScrobblenautException(description: 'The max limit is 200'),
    );
  }

  final parameters = {
    'user': user,
    'page': page,
    'limit': limit,
    'from': LastFMValueNormalizer.DateTimeToUnixTime(fromDate),
    'to': LastFMValueNormalizer.DateTimeToUnixTime(toDate),
    'extended': (extended ? 1 : 0),
  };

  final request = Request(
    api: _api,
    method: 'user.getRecentTracks',
    parameters: parameters,
  );

  final response = await request.send(mode: RequestMode.GET);

  final recentTracks = response['recenttracks']['track'];

  // View Issue in Github.
  // https://github.com/Nebulino/Scrobblenaut/issues/24
  if (recentTracks == null) {
    return null;
  } else {
    return parseLastFMList<Track>(recentTracks, (track) {
      if (track['artist'] is Map) {
        track['artist']['name'] ??=
            isValidParsableStringField(track['artist']['#text'])
            ? track['artist']['#text']
            : null;
      }
      return Track.fromJson(track);
    });
  }
}