diff --git a/lib/components/playlist/playlist_card.dart b/lib/components/playlist/playlist_card.dart index be7abfb9..edb374c8 100644 --- a/lib/components/playlist/playlist_card.dart +++ b/lib/components/playlist/playlist_card.dart @@ -62,7 +62,7 @@ class PlaylistCard extends HookConsumerWidget { List fetchedTracks = await queryBowl.fetchQuery( "playlist-tracks/${playlist.id}", - () => useQueries.playlist.tracksOf(playlist.id!, spotify), + () => useQueries.playlist.tracksOf(playlist.id!, spotify, ref), ) ?? []; @@ -83,7 +83,7 @@ class PlaylistCard extends HookConsumerWidget { if (isPlaylistPlaying) return; List fetchedTracks = await queryBowl.fetchQuery( "playlist-tracks/${playlist.id}", - () => useQueries.playlist.tracksOf(playlist.id!, spotify), + () => useQueries.playlist.tracksOf(playlist.id!, spotify, ref), ) ?? []; diff --git a/lib/main.dart b/lib/main.dart index b2e83137..031bd545 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,9 +1,7 @@ -import 'dart:io'; - -import 'package:args/args.dart'; import 'package:catcher/catcher.dart'; import 'package:device_preview/device_preview.dart'; import 'package:fl_query/fl_query.dart'; +import 'package:fl_query_devtools/fl_query_devtools.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -209,7 +207,11 @@ class SpotubeState extends ConsumerState { builder: (context, child) { return DevicePreview.appBuilder( context, - DragToResizeArea(child: child!), + DragToResizeArea( + child: FlQueryDevtools( + child: child!, + ), + ), ); }, themeMode: themeMode, diff --git a/lib/services/queries/playlist.dart b/lib/services/queries/playlist.dart index 70b9ebe7..15514e04 100644 --- a/lib/services/queries/playlist.dart +++ b/lib/services/queries/playlist.dart @@ -1,3 +1,5 @@ +import 'dart:io'; + import 'package:catcher/catcher.dart'; import 'package:fl_query/fl_query.dart'; import 'package:fl_query_hooks/fl_query_hooks.dart'; @@ -10,6 +12,7 @@ import 'package:spotube/extensions/track.dart'; import 'package:spotube/hooks/use_spotify_infinite_query.dart'; import 'package:spotube/hooks/use_spotify_query.dart'; import 'package:spotube/pages/library/playlist_generate/playlist_generate.dart'; +import 'package:spotube/provider/authentication_provider.dart'; import 'package:spotube/provider/custom_spotify_endpoint_provider.dart'; import 'package:spotube/provider/user_preferences_provider.dart'; @@ -138,19 +141,26 @@ class PlaylistQueries { (lastPageData.items?.length ?? 0) < 10 || lastPageData.isLast ? null : lastPage + 1, - retryConfig: RetryConfig.withConstantDefaults( - maxRetries: 1, - retryDelay: const Duration(seconds: 5), - ), ref: ref, ); } - Future> tracksOf(String playlistId, SpotifyApi spotify) { + Future> tracksOf( + String playlistId, + SpotifyApi spotify, + WidgetRef ref, + ) { if (playlistId == "user-liked-tracks") { - return spotify.tracks.me.saved.all().then( + return spotify.tracks.me.saved + .all() + .then( (tracks) => tracks.map((e) => e.track!).toList(), - ); + ) + .catchError((e) { + final isLoggedIn = ref.read(AuthenticationNotifier.provider) != null; + if (e is SocketException && isLoggedIn) return []; + throw e; + }); } return spotify.playlists.getTracksByPlaylistId(playlistId).all().then( (value) => value.toList(), @@ -163,7 +173,7 @@ class PlaylistQueries { ) { return useSpotifyQuery, dynamic>( "playlist-tracks/$playlistId", - (spotify) => tracksOf(playlistId, spotify), + (spotify) => tracksOf(playlistId, spotify, ref), jsonConfig: playlistId == "user-liked-tracks" ? JsonConfig( toJson: (tracks) => { @@ -176,6 +186,10 @@ class PlaylistQueries { .toList(), ) : null, + retryConfig: RetryConfig.withConstantDefaults( + maxRetries: 1, + retryDelay: const Duration(seconds: 5), + ), ref: ref, ); } diff --git a/pubspec.lock b/pubspec.lock index f105161a..33a584fa 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -517,23 +517,26 @@ packages: fl_query: dependency: "direct main" description: - path: "../fl-query/packages/fl_query" - relative: true - source: path + name: fl_query + sha256: "64f482fc09eb1166adca232f68772b2b11c616d88bce3208b2753c940ebc9f71" + url: "https://pub.dev" + source: hosted version: "1.0.0-alpha.3" fl_query_devtools: dependency: "direct main" description: - path: "../fl-query/packages/fl_query_devtools" - relative: true - source: path + name: fl_query_devtools + sha256: f46148364d7fc49fb02ab2d3b2c280e6652edd3984e9fdf14c1b49d4d8473907 + url: "https://pub.dev" + source: hosted version: "0.1.0-alpha.1" fl_query_hooks: dependency: "direct main" description: - path: "../fl-query/packages/fl_query_hooks" - relative: true - source: path + name: fl_query_hooks + sha256: b0ffc81fb047cbcedd9766776f9c72b95382730ce173226f0695c3f45774b0bc + url: "https://pub.dev" + source: hosted version: "1.0.0-alpha.3" fluentui_system_icons: dependency: "direct main" diff --git a/pubspec.yaml b/pubspec.yaml index 6e1f3a8e..28b1b89f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -34,12 +34,9 @@ dependencies: duration: ^3.0.12 envied: ^0.3.0 file_picker: ^5.2.2 - fl_query: - path: ../fl-query/packages/fl_query - fl_query_hooks: - path: ../fl-query/packages/fl_query_hooks - fl_query_devtools: - path: ../fl-query/packages/fl_query_devtools + fl_query: ^1.0.0-alpha.3 + fl_query_hooks: ^1.0.0-alpha.3 + fl_query_devtools: ^0.1.0-alpha.1 fluentui_system_icons: ^1.1.189 flutter: sdk: flutter @@ -123,8 +120,6 @@ dev_dependencies: dependency_overrides: http: ^1.1.0 flutter_hooks: ^0.20.0 - fl_query: - path: ../fl-query/packages/fl_query flutter: generate: true