parseWatchTrack function

JsonMap parseWatchTrack(
  1. JsonMap data
)

Parses an individual track from a watch playlist.

Implementation

JsonMap parseWatchTrack(JsonMap data) {
  String? likeStatus;

  for (final item in List<JsonMap>.from(nav(data, MENU_ITEMS) as List)) {
    if (item.containsKey(TOGGLE_MENU)) {
      final service =
          (item[TOGGLE_MENU] as JsonMap)['defaultServiceEndpoint'] as JsonMap;

      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),
    'likeStatus': likeStatus,
    'videoType': nav(data, [
      'navigationEndpoint',
      ...NAVIGATION_VIDEO_TYPE,
    ], nullIfAbsent: true),
  };

  track.addAll({
    'inLibrary': null,
    'feedbackTokens': null,
    'pinnedToListenAgain': null,
    'listenAgainFeedbackTokens': null,
    ...parseSongMenuData(data),
  });

  final longBylineText = nav(data, ['longBylineText']) as JsonMap?;

  if (longBylineText != null) {
    final songInfo = parseSongRuns(longBylineText['runs'] as List);
    track.addAll(songInfo);
  }

  return track;
}