parseWatchTrack function

JsonMap parseWatchTrack(
  1. 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;
}