fix: cached currently playing track infinite loading

This commit is contained in:
Kingkor Roy Tirtho 2023-06-04 14:44:16 +06:00
parent 957c085e12
commit 94017189c6
2 changed files with 40 additions and 25 deletions

View File

@ -15,6 +15,7 @@ import 'package:spotube/provider/proxy_playlist/proxy_playlist.dart';
import 'package:spotube/provider/user_preferences_provider.dart'; import 'package:spotube/provider/user_preferences_provider.dart';
import 'package:spotube/services/audio_player/audio_player.dart'; import 'package:spotube/services/audio_player/audio_player.dart';
import 'package:spotube/services/audio_services/audio_services.dart'; import 'package:spotube/services/audio_services/audio_services.dart';
import 'package:spotube/services/youtube.dart';
import 'package:spotube/utils/persisted_state_notifier.dart'; import 'package:spotube/utils/persisted_state_notifier.dart';
import 'package:spotube/utils/type_conversion_utils.dart'; import 'package:spotube/utils/type_conversion_utils.dart';
@ -215,12 +216,15 @@ class ProxyPlaylistNotifier extends PersistedStateNotifier<ProxyPlaylist>
int initialIndex = 0, int initialIndex = 0,
bool autoPlay = false, bool autoPlay = false,
}) async { }) async {
try {
tracks = blacklist.filter(tracks).toList() as List<Track>; tracks = blacklist.filter(tracks).toList() as List<Track>;
final addableTrack = await SpotubeTrack.fetchFromTrack( final addableTrack = await SpotubeTrack.fetchFromTrack(
tracks.elementAt(initialIndex), tracks.elementAt(initialIndex),
preferences, preferences,
); );
print('addableTrack: $addableTrack');
state = state.copyWith( state = state.copyWith(
tracks: mergeTracks([addableTrack], tracks), tracks: mergeTracks([addableTrack], tracks),
active: initialIndex, active: initialIndex,
@ -238,6 +242,9 @@ class ProxyPlaylistNotifier extends PersistedStateNotifier<ProxyPlaylist>
tracks.elementAt(initialIndex), tracks.elementAt(initialIndex),
addableTrack, addableTrack,
); );
} catch (e) {
print('Error: $e');
}
} }
Future<void> jumpTo(int index) async { Future<void> jumpTo(int index) async {
@ -404,15 +411,17 @@ class ProxyPlaylistNotifier extends PersistedStateNotifier<ProxyPlaylist>
} }
@override @override
onInit() { onInit() async {
if (state.tracks.isEmpty) return null; if (state.tracks.isEmpty) return null;
return load( if (await PipedSpotube.initialized) {
await load(
state.tracks, state.tracks,
initialIndex: state.active ?? 0, initialIndex: state.active ?? 0,
autoPlay: false, autoPlay: false,
); );
} }
}
@override @override
FutureOr<ProxyPlaylist> fromJson(Map<String, dynamic> json) { FutureOr<ProxyPlaylist> fromJson(Map<String, dynamic> json) {

View File

@ -1,8 +1,13 @@
import 'dart:async';
import 'package:piped_client/piped_client.dart'; import 'package:piped_client/piped_client.dart';
PipedClient _defaultClient = PipedClient(); PipedClient _defaultClient = PipedClient();
class PipedSpotube { class PipedSpotube {
static final Completer<bool> _initialized = Completer();
static Future<bool> get initialized => _initialized.future;
/// Checks for a working instance of piped.video /// Checks for a working instance of piped.video
/// ///
/// To distribute the load, in each startup it randomizes public instances /// To distribute the load, in each startup it randomizes public instances
@ -15,6 +20,7 @@ class PipedSpotube {
try { try {
await client.streams("dQw4w9WgXcQ"); await client.streams("dQw4w9WgXcQ");
_defaultClient = client; _defaultClient = client;
_initialized.complete(true);
break; break;
} catch (e) { } catch (e) {
continue; continue;