parseAudioPlaylist function
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(
List<JsonMap>.from(contentData['contents'] as List),
);
List parseFunc(contents) =>
parsePlaylistItems(List<JsonMap>.from(contents as List));
(playlist['tracks'] as List).addAll(
List<JsonMap>.from(
await getContinuations2025(contentData, limit, requestFunc, parseFunc),
),
);
}
try {
playlist['title'] =
(((playlist['tracks'] as List)[0] as JsonMap)['album']
as JsonMap)['name'];
} catch (_) {
playlist['title'] =
List<JsonMap>.from(
((playlist['tracks'] as List)[0] as JsonMap)['artists'] as List,
)[0]['name'];
}
playlist['duration_seconds'] = sumTotalDuration(playlist);
return playlist;
}