parseSongFlat function
Parses a song from data.
Implementation
JsonMap parseSongFlat(JsonMap data, {bool withPlaylistId = false}) {
final columns = [
for (var i = 0; i < (data['flexColumns'] as List).length; i++)
getFlexColumnItem(data, i),
];
final song = <String, dynamic>{
'title': nav(columns[0], TEXT_RUN_TEXT),
'videoId': nav(columns[0], [
...TEXT_RUN,
...NAVIGATION_VIDEO_ID,
], nullIfAbsent: true),
'videoType': nav(data, [
...PLAY_BUTTON,
'playNavigationEndpoint',
...NAVIGATION_VIDEO_TYPE,
], nullIfAbsent: true),
'thumbnails': nav(data, THUMBNAILS),
'isExplicit': nav(data, BADGE_LABEL, nullIfAbsent: true) != null,
};
if (withPlaylistId) {
song['playlistId'] = nav(data, [
...PLAY_BUTTON,
'playNavigationEndpoint',
...WATCH_PLAYLIST_ID,
]);
}
final runs = nav(columns[1], TEXT_RUNS) as List;
song.addAll(parseSongRuns(runs, skipTypeSpec: true));
if (columns.length > 2 &&
columns[2] != null &&
(nav(columns[2], TEXT_RUN) as JsonMap).containsKey(
'navigationEndpoint',
)) {
song['album'] = {
'name': nav(columns[2], TEXT_RUN_TEXT),
'id': nav(columns[2], [...TEXT_RUN, ...NAVIGATION_BROWSE_ID]),
};
}
return song;
}