From e964f61d38cb303e3d3fd60c866414f57207181c Mon Sep 17 00:00:00 2001 From: Kingkor Roy Tirtho Date: Sat, 17 Feb 2024 22:22:00 +0600 Subject: [PATCH] fix: track loading when not found in Youtube --- .../sourced_track/sources/youtube.dart | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/lib/services/sourced_track/sources/youtube.dart b/lib/services/sourced_track/sources/youtube.dart index d27510e4..5f75c4db 100644 --- a/lib/services/sourced_track/sources/youtube.dart +++ b/lib/services/sourced_track/sources/youtube.dart @@ -1,5 +1,6 @@ import 'package:collection/collection.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:http/http.dart'; import 'package:spotify/spotify.dart'; import 'package:spotube/models/source_match.dart'; import 'package:spotube/services/sourced_track/enums.dart'; @@ -70,9 +71,14 @@ class YoutubeSourcedTrack extends SourcedTrack { ); } final item = await youtubeClient.videos.get(cachedSource.sourceId); - final manifest = await youtubeClient.videos.streamsClient.getManifest( - cachedSource.sourceId, - ); + final manifest = await youtubeClient.videos.streamsClient + .getManifest( + cachedSource.sourceId, + ) + .timeout( + const Duration(seconds: 5), + onTimeout: () => throw ClientException("Timeout"), + ); return YoutubeSourcedTrack( ref: ref, siblings: [], @@ -125,7 +131,10 @@ class YoutubeSourcedTrack extends SourcedTrack { SourceMap? sourceMap; if (index == 0) { final manifest = - await youtubeClient.videos.streamsClient.getManifest(item.id); + await youtubeClient.videos.streamsClient.getManifest(item.id).timeout( + const Duration(seconds: 5), + onTimeout: () => throw ClientException("Timeout"), + ); sourceMap = toSourceMap(manifest); } @@ -243,8 +252,12 @@ class YoutubeSourcedTrack extends SourcedTrack { final newSiblings = siblings.where((s) => s.id != sibling.id).toList() ..insert(0, sourceInfo); - final manifest = - await youtubeClient.videos.streamsClient.getManifest(newSourceInfo.id); + final manifest = await youtubeClient.videos.streamsClient + .getManifest(newSourceInfo.id) + .timeout( + const Duration(seconds: 5), + onTimeout: () => throw ClientException("Timeout"), + ); await SourceMatch.box.put( id!,