fix: use chosen market for new release

This commit is contained in:
Kingkor Roy Tirtho 2023-03-05 13:04:50 +06:00
parent 60a5847ae6
commit c6bf9b6799
5 changed files with 36 additions and 14 deletions

View File

@ -8,6 +8,7 @@ import 'package:spotube/components/album/album_card.dart';
import 'package:spotube/components/playlist/playlist_card.dart'; import 'package:spotube/components/playlist/playlist_card.dart';
import 'package:spotube/components/shared/shimmers/shimmer_playbutton_card.dart'; import 'package:spotube/components/shared/shimmers/shimmer_playbutton_card.dart';
import 'package:spotube/components/shared/waypoint.dart'; import 'package:spotube/components/shared/waypoint.dart';
import 'package:spotube/hooks/use_async_effect.dart';
import 'package:spotube/models/logger.dart'; import 'package:spotube/models/logger.dart';
import 'package:spotube/services/queries/queries.dart'; import 'package:spotube/services/queries/queries.dart';
import 'package:spotube/utils/type_conversion_utils.dart'; import 'package:spotube/utils/type_conversion_utils.dart';
@ -106,6 +107,15 @@ class PersonalizedPage extends HookConsumerWidget {
final newReleases = useQueries.album.newReleases(ref); final newReleases = useQueries.album.newReleases(ref);
useAsyncEffect(() async {
final releases = newReleases.pages.expand(
(page) => page.items ?? const Iterable<AlbumSimple>.empty(),
);
if (releases.isEmpty) {
await newReleases.fetchNext();
}
}, null, [newReleases.pages]);
return ListView( return ListView(
children: [ children: [
PersonalizedItemCard( PersonalizedItemCard(

View File

@ -4,6 +4,7 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:spotify/spotify.dart'; import 'package:spotify/spotify.dart';
import 'package:spotube/hooks/use_spotify_infinite_query.dart'; import 'package:spotube/hooks/use_spotify_infinite_query.dart';
import 'package:spotube/hooks/use_spotify_query.dart'; import 'package:spotube/hooks/use_spotify_query.dart';
import 'package:spotube/provider/user_preferences_provider.dart';
class AlbumQueries { class AlbumQueries {
const AlbumQueries(); const AlbumQueries();
@ -48,17 +49,17 @@ class AlbumQueries {
} }
InfiniteQuery<Page<AlbumSimple>, dynamic, int> newReleases(WidgetRef ref) { InfiniteQuery<Page<AlbumSimple>, dynamic, int> newReleases(WidgetRef ref) {
final market = ref
.watch(userPreferencesProvider.select((s) => s.recommendationMarket));
return useSpotifyInfiniteQuery<Page<AlbumSimple>, dynamic, int>( return useSpotifyInfiniteQuery<Page<AlbumSimple>, dynamic, int>(
"new-releases", "new-releases",
(pageParam, spotify) async { (pageParam, spotify) async {
try { try {
final albums = await Pages( final albums = await spotify.browse
spotify, .getNewReleases(country: market)
'v1/browse/new-releases', .getPage(5, pageParam);
(json) => AlbumSimple.fromJson(json),
'albums',
(json) => AlbumSimple.fromJson(json),
).getPage(5, pageParam);
return albums; return albums;
} catch (e, stack) { } catch (e, stack) {
Catcher.reportCheckedError(e, stack); Catcher.reportCheckedError(e, stack);
@ -68,7 +69,7 @@ class AlbumQueries {
ref: ref, ref: ref,
initialPage: 0, initialPage: 0,
nextPage: (lastPage, lastPageData) { nextPage: (lastPage, lastPageData) {
if (lastPageData.isLast || (lastPageData.items ?? []).length < 5) { if (lastPageData.isLast) {
return null; return null;
} }
return lastPageData.nextOffset; return lastPageData.nextOffset;

View File

@ -1,4 +1,5 @@
import 'package:fl_query/fl_query.dart'; import 'package:fl_query/fl_query.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:spotify/spotify.dart'; import 'package:spotify/spotify.dart';
import 'package:spotube/extensions/map.dart'; import 'package:spotube/extensions/map.dart';
@ -10,6 +11,8 @@ class CategoryQueries {
InfiniteQuery<Page<Category>, dynamic, int> list( InfiniteQuery<Page<Category>, dynamic, int> list(
WidgetRef ref, String recommendationMarket) { WidgetRef ref, String recommendationMarket) {
final context = useContext();
return useSpotifyInfiniteQuery<Page<Category>, dynamic, int>( return useSpotifyInfiniteQuery<Page<Category>, dynamic, int>(
"category-playlists", "category-playlists",
(pageParam, spotify) async { (pageParam, spotify) async {
@ -35,6 +38,10 @@ class CategoryQueries {
}, },
), ),
), ),
refreshConfig: RefreshConfig.withDefaults(
context,
staleDuration: const Duration(minutes: 30),
),
ref: ref, ref: ref,
); );
} }

View File

@ -1481,11 +1481,12 @@ packages:
spotify: spotify:
dependency: "direct main" dependency: "direct main"
description: description:
name: spotify path: "."
sha256: db51b46216465631f90218581b97ea08b7bf5c93f1c9a7066fbf3499fe32c774 ref: "9e8ef4556942d42d74874de5491253156e7e6f43"
url: "https://pub.dev" resolved-ref: "9e8ef4556942d42d74874de5491253156e7e6f43"
source: hosted url: "https://github.com/rinukkusu/spotify-dart"
version: "0.8.0" source: git
version: "0.9.0"
sqflite: sqflite:
dependency: transitive dependency: transitive
description: description:

View File

@ -79,7 +79,10 @@ dependencies:
scroll_to_index: ^3.0.1 scroll_to_index: ^3.0.1
shared_preferences: ^2.0.11 shared_preferences: ^2.0.11
skeleton_text: ^3.0.0 skeleton_text: ^3.0.0
spotify: ^0.8.0 spotify:
git:
url: https://github.com/rinukkusu/spotify-dart
ref: 9e8ef4556942d42d74874de5491253156e7e6f43
tuple: ^2.0.1 tuple: ^2.0.1
url_launcher: ^6.1.7 url_launcher: ^6.1.7
uuid: ^3.0.7 uuid: ^3.0.7