parseSongFlat function

JsonMap parseSongFlat(
  1. JsonMap data, {
  2. bool withPlaylistId = false,
})

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