parsePlaylistHeaderMeta function

JsonMap parsePlaylistHeaderMeta(
  1. JsonMap header
)

Parses header meta from playlist.

Implementation

JsonMap parsePlaylistHeaderMeta(JsonMap header) {
  final playlistMeta = <String, dynamic>{
    'views': null,
    'duration': null,
    'trackCount': null,
    'title':
        ((header['title'] as JsonMap?)?['runs'] as List? ?? [])
            .map((run) => (run as JsonMap)['text'])
            .join(),
    'thumbnails': nav(header, THUMBNAILS),
  };

  if (header.containsKey('facepile')) {
    playlistMeta['author'] = {
      'name': nav(header, [
        'facepile',
        'avatarStackViewModel',
        'text',
        'content',
      ]),
      'id': nav(header, [
        'facepile',
        'avatarStackViewModel',
        'rendererContext',
        'commandContext',
        'onTap',
        'innertubeCommand',
        'browseEndpoint',
        'browseId',
      ], nullIfAbsent: true),
    };
  }

  if (((header['secondSubtitle'] as JsonMap?)?['runs'] as List?) != null) {
    final secondSubtitleRuns =
        (header['secondSubtitle'] as JsonMap)['runs'] as List;
    final hasViews = (secondSubtitleRuns.length > 3) ? 2 : 0;
    final hasDuration = (secondSubtitleRuns.length > 1) ? 2 : 0;

    playlistMeta['views'] =
        hasViews == 0
            ? null
            : toInt((secondSubtitleRuns[0] as JsonMap)['text'] as String);
    playlistMeta['duration'] =
        hasDuration == 0
            ? null
            : (secondSubtitleRuns[hasViews + hasDuration] as JsonMap)['text'];

    final songCountText =
        (secondSubtitleRuns[hasViews + 0] as JsonMap)['text'] as String;
    final songCountSearch =
        RegExp(r'\d+').allMatches(songCountText).map((m) => m[0]).join();
    playlistMeta['trackCount'] =
        songCountSearch.isEmpty ? null : toInt(songCountSearch);
  }

  return playlistMeta;
}