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