parseMixedContent function

List parseMixedContent(
  1. List<JsonMap> rows
)

Parse various contents from rows.

Implementation

List parseMixedContent(List<JsonMap> rows) {
  final items = <dynamic>[];

  for (final row in rows) {
    List contents;
    dynamic title;

    if (row.containsKey(DESCRIPTION_SHELF[0])) {
      final results = nav(row, DESCRIPTION_SHELF);
      title = nav(results, ['header', ...RUN_TEXT]);
      contents = nav(results, DESCRIPTION) as List;
    } else {
      final results = row.values.first;
      if (!(results as JsonMap).containsKey('contents')) {
        continue;
      }
      title = nav(results, [...CAROUSEL_TITLE, 'text']);
      contents = [];

      for (final result in results['contents'] as Iterable) {
        final data = nav(result, [MTRIR], nullIfAbsent: true);
        JsonMap? content;

        if (data != null) {
          final pageType = nav(data, [
            ...TITLE,
            ...NAVIGATION_BROWSE,
            ...PAGE_TYPE,
          ], nullIfAbsent: true);
          if (pageType == null) {
            if (nav(data, NAVIGATION_WATCH_PLAYLIST_ID, nullIfAbsent: true) !=
                null) {
              content = parseWatchPlaylist(data as JsonMap);
            } else {
              content = parseSong(data as JsonMap);
            }
          } else if (pageType == 'MUSIC_PAGE_TYPE_ALBUM') {
            content = parseAlbum(data as JsonMap);
          } else if (pageType == 'MUSIC_PAGE_TYPE_ARTIST' ||
              pageType == 'MUSIC_PAGE_TYPE_USER_CHANNEL') {
            content = parseRelatedArtist(data as JsonMap);
          } else if (pageType == 'MUSIC_PAGE_TYPE_PLAYLIST') {
            content = parsePlaylist(data as JsonMap);
          } else if (pageType == 'MUSIC_PAGE_TYPE_PODCAST_SHOW_DETAIL_PAGE') {
            content = parsePodcast(data as JsonMap);
          }
        } else if ((nav(result, [MRLIR], nullIfAbsent: true)) != null) {
          content = parseSongFlat(
            nav(result, [MRLIR], nullIfAbsent: true) as JsonMap,
          );
        } else if ((nav(result, [MMRIR], nullIfAbsent: true)) != null) {
          content = parseEpisode(
            nav(result, [MMRIR], nullIfAbsent: true) as JsonMap,
          );
        } else {
          continue;
        }

        if (content != null) {
          contents.add(content);
        }
      }
    }

    items.add({'title': title, 'contents': contents});
  }

  return items;
}