searchForTrack method
override
Searches for tracks.
Implementation
@override
Future<List<YoutubeMusicResult>> searchForTrack(String query, [int itemCount = 5]) async {
var results = await _ytMusicEngine.searchSongs(query);
var returnList = <YoutubeMusicResult>[];
// Proactively track the number of results as async is kinda slow ~1s.
var resultCount = 0;
var exitLock = Completer<void>.sync();
for (var result in results) {
if (resultCount++ > itemCount) {
break;
}
unawaited(
_ytExplode.videos.streamsClient.getManifest(result.videoId).then((dataManifest) {
var dlUrl = dataManifest.audioOnly.withHighestBitrate().url.toString();
var highestResThumbnail =
result.thumbnails.reduce((a, b) => a.width * a.height > b.width * b.height ? a : b);
returnList.add(
YoutubeMusicResult(
title: result.name,
artists: [result.artist.name],
album: result.album?.name ?? '',
srcUrl: 'https://music.youtube.com/watch?v=${result.videoId}',
dlUrl: dlUrl,
sDuration: result.duration!,
source: Source.youtubeMusic,
artUrl: highestResThumbnail.url,
),
);
if (returnList.length >= itemCount) {
exitLock.complete();
}
}),
);
}
return returnList;
}