parseSongRuns function

JsonMap parseSongRuns(
  1. List runs, {
  2. bool skipTypeSpec = false,
})

Parses song runs.

Implementation

JsonMap parseSongRuns(List runs, {bool skipTypeSpec = false}) {
  final parsed = <String, dynamic>{};

  final List realRuns;
  if (skipTypeSpec &&
      runs.length > 2 &&
      parseSongRun(runs[0] as JsonMap)['type'] == 'artist' &&
      runs[1] == DOT_SEPARATOR_RUN &&
      parseSongRun(runs[2] as JsonMap)['type'] == 'artist') {
    realRuns = runs.sublist(2);
  } else {
    realRuns = runs;
  }

  for (var i = 0; i < realRuns.length; i++) {
    if (i % 2 != 0) continue; // uneven items are separators
    final parsedRun = parseSongRun(realRuns[i] as JsonMap);
    final data = parsedRun['data'];
    switch (parsedRun['type']) {
      case 'album':
        parsed['album'] = data;
      case 'artist':
        parsed['artists'] ??= <JsonMap>[];
        (parsed['artists'] as List).add(data);
      case 'views':
        parsed['views'] = data;
      case 'duration':
        parsed['duration'] = data;
        parsed['duration_seconds'] = parseDuration(data as String?);
      case 'year':
        parsed['year'] = data;
    }
  }

  return parsed;
}