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