parseWatchTrack function
- JsonMap data
Parses an individual track from a watch playlist.
Implementation
JsonMap parseWatchTrack(JsonMap data) {
JsonMap? feedbackTokens;
String? likeStatus;
bool? libraryStatus;
for (final item in List<JsonMap>.from(nav(data, MENU_ITEMS) as List)) {
if (item.containsKey(TOGGLE_MENU)) {
libraryStatus = parseSongLibraryStatus(item);
final service =
(item[TOGGLE_MENU] as JsonMap?)!['defaultServiceEndpoint'] as JsonMap;
if (service.containsKey('feedbackEndpoint')) {
feedbackTokens = parseSongMenuTokens(item);
}
if (service.containsKey('likeEndpoint')) {
likeStatus = parseLikeStatus(service);
}
}
}
final track = <String, dynamic>{
'videoId': data['videoId'],
'title': nav(data, TITLE_TEXT),
'length': nav(data, ['lengthText', 'runs', 0, 'text'], nullIfAbsent: true),
'thumbnail': nav(data, THUMBNAIL),
'feedbackTokens': feedbackTokens,
'likeStatus': likeStatus,
'inLibrary': libraryStatus,
'videoType': nav(data, [
'navigationEndpoint',
...NAVIGATION_VIDEO_TYPE,
], nullIfAbsent: true),
};
final longBylineText = nav(data, ['longBylineText']) as JsonMap?;
if (longBylineText != null) {
final songInfo = parseSongRuns(longBylineText['runs'] as List);
track.addAll(songInfo);
}
return track;
}