parseAudioPlaylist function

Future<JsonMap> parseAudioPlaylist(
  1. JsonMap response,
  2. int? limit,
  3. RequestFuncBodyType requestFunc
)

Parses audio playlist.

Implementation

Future<JsonMap> parseAudioPlaylist(
  JsonMap response,
  int? limit,
  RequestFuncBodyType requestFunc,
) async {
  final playlist = <String, dynamic>{
    'owned': false,
    'privacy': 'PUBLIC',
    'description': null,
    'views': null,
    'duration': null,
    'tracks': <JsonMap>[],
    'thumbnails': <dynamic>[],
    'related': <dynamic>[],
  };

  final sectionList = nav(response, [
    ...TWO_COLUMN_RENDERER,
    'secondaryContents',
    ...SECTION,
  ]);
  final contentData = nav(sectionList, [
    ...CONTENT,
    'musicPlaylistShelfRenderer',
  ]);

  playlist['id'] = nav(contentData, [
    ...CONTENT,
    MRLIR,
    ...PLAY_BUTTON,
    'playNavigationEndpoint',
    ...WATCH_PLAYLIST_ID,
  ]);
  playlist['trackCount'] = nav(contentData, ['collapsedItemCount']);

  playlist['tracks'] = [];

  if ((contentData as JsonMap).containsKey('contents')) {
    playlist['tracks'] = parsePlaylistItems(
      contentData['contents'] as List<JsonMap>,
    );

    List parseFunc(contents) => parsePlaylistItems(contents as List<JsonMap>);
    (playlist['tracks'] as List).addAll(
      await getContinuations2025(contentData, limit, requestFunc, parseFunc),
    );
  }

  playlist['title'] =
      (((playlist['tracks'] as List)[0] as JsonMap)['album']
          as JsonMap)['name'];

  playlist['duration_seconds'] = sumTotalDuration(playlist);

  return playlist;
}