mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-09-13 07:55:18 +00:00
refactor: use singleton for Queries and Mutations service classes
This commit is contained in:
parent
d85867a245
commit
3d9da8b4e3
@ -21,7 +21,7 @@ class ArtistAlbumList extends HookConsumerWidget {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, ref) {
|
Widget build(BuildContext context, ref) {
|
||||||
final scrollController = useScrollController();
|
final scrollController = useScrollController();
|
||||||
final albumsQuery = Queries.artist.useAlbumsOfQuery(ref, artistId);
|
final albumsQuery = useQueries.artist.albumsOf(ref, artistId);
|
||||||
|
|
||||||
final albums = useMemoized(() {
|
final albums = useMemoized(() {
|
||||||
return albumsQuery.pages
|
return albumsQuery.pages
|
||||||
|
@ -24,7 +24,7 @@ class CategoryCard extends HookConsumerWidget {
|
|||||||
Widget build(BuildContext context, ref) {
|
Widget build(BuildContext context, ref) {
|
||||||
final scrollController = useScrollController();
|
final scrollController = useScrollController();
|
||||||
final spotify = ref.watch(spotifyProvider);
|
final spotify = ref.watch(spotifyProvider);
|
||||||
final playlistQuery = Queries.category.usePlaylistsOf(
|
final playlistQuery = useQueries.category.playlistsOf(
|
||||||
ref,
|
ref,
|
||||||
category.id!,
|
category.id!,
|
||||||
);
|
);
|
||||||
|
@ -22,7 +22,7 @@ class UserAlbums extends HookConsumerWidget {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, ref) {
|
Widget build(BuildContext context, ref) {
|
||||||
final auth = ref.watch(AuthenticationNotifier.provider);
|
final auth = ref.watch(AuthenticationNotifier.provider);
|
||||||
final albumsQuery = Queries.album.useOfMineQuery(ref);
|
final albumsQuery = useQueries.album.ofMine(ref);
|
||||||
|
|
||||||
final spacing = useBreakpointValue<double>(
|
final spacing = useBreakpointValue<double>(
|
||||||
sm: 0,
|
sm: 0,
|
||||||
|
@ -20,7 +20,7 @@ class UserArtists extends HookConsumerWidget {
|
|||||||
Widget build(BuildContext context, ref) {
|
Widget build(BuildContext context, ref) {
|
||||||
final auth = ref.watch(AuthenticationNotifier.provider);
|
final auth = ref.watch(AuthenticationNotifier.provider);
|
||||||
|
|
||||||
final artistQuery = Queries.artist.useFollowedByMeQuery(ref);
|
final artistQuery = useQueries.artist.followedByMe(ref);
|
||||||
|
|
||||||
final hasNextPage = artistQuery.pages.isEmpty
|
final hasNextPage = artistQuery.pages.isEmpty
|
||||||
? false
|
? false
|
||||||
|
@ -33,7 +33,7 @@ class UserPlaylists extends HookConsumerWidget {
|
|||||||
: PlaybuttonCardViewType.square;
|
: PlaybuttonCardViewType.square;
|
||||||
final auth = ref.watch(AuthenticationNotifier.provider);
|
final auth = ref.watch(AuthenticationNotifier.provider);
|
||||||
|
|
||||||
final playlistsQuery = Queries.playlist.useOfMineQuery(ref);
|
final playlistsQuery = useQueries.playlist.ofMine(ref);
|
||||||
|
|
||||||
Image image = Image();
|
Image image = Image();
|
||||||
image.height = 300;
|
image.height = 300;
|
||||||
|
@ -68,7 +68,7 @@ class PlaylistCard extends HookConsumerWidget {
|
|||||||
|
|
||||||
List<Track> fetchedTracks = await queryBowl.fetchQuery(
|
List<Track> fetchedTracks = await queryBowl.fetchQuery(
|
||||||
"playlist-tracks/${playlist.id}",
|
"playlist-tracks/${playlist.id}",
|
||||||
() => Queries.playlist.tracksOf(playlist.id!, spotify),
|
() => useQueries.playlist.tracksOf(playlist.id!, spotify),
|
||||||
) ??
|
) ??
|
||||||
[];
|
[];
|
||||||
|
|
||||||
@ -86,7 +86,7 @@ class PlaylistCard extends HookConsumerWidget {
|
|||||||
if (isPlaylistPlaying) return;
|
if (isPlaylistPlaying) return;
|
||||||
List<Track> fetchedTracks = await queryBowl.fetchQuery(
|
List<Track> fetchedTracks = await queryBowl.fetchQuery(
|
||||||
"playlist-tracks/${playlist.id}",
|
"playlist-tracks/${playlist.id}",
|
||||||
() => Queries.playlist.tracksOf(playlist.id!, spotify),
|
() => useQueries.playlist.tracksOf(playlist.id!, spotify),
|
||||||
) ??
|
) ??
|
||||||
[];
|
[];
|
||||||
|
|
||||||
|
@ -11,7 +11,6 @@ import 'package:spotube/components/shared/image/universal_image.dart';
|
|||||||
import 'package:spotube/hooks/use_breakpoints.dart';
|
import 'package:spotube/hooks/use_breakpoints.dart';
|
||||||
import 'package:spotube/provider/authentication_provider.dart';
|
import 'package:spotube/provider/authentication_provider.dart';
|
||||||
import 'package:spotube/provider/downloader_provider.dart';
|
import 'package:spotube/provider/downloader_provider.dart';
|
||||||
import 'package:spotube/provider/spotify_provider.dart';
|
|
||||||
|
|
||||||
import 'package:spotube/provider/user_preferences_provider.dart';
|
import 'package:spotube/provider/user_preferences_provider.dart';
|
||||||
import 'package:spotube/services/queries/queries.dart';
|
import 'package:spotube/services/queries/queries.dart';
|
||||||
@ -194,8 +193,7 @@ class SidebarFooter extends HookConsumerWidget {
|
|||||||
width: 256,
|
width: 256,
|
||||||
child: HookBuilder(
|
child: HookBuilder(
|
||||||
builder: (context) {
|
builder: (context) {
|
||||||
var spotify = ref.watch(spotifyProvider);
|
final me = useQueries.user.me(ref);
|
||||||
final me = Queries.user.useMe(ref);
|
|
||||||
final data = me.data;
|
final data = me.data;
|
||||||
|
|
||||||
final avatarImg = TypeConversionUtils.image_X_UrlString(
|
final avatarImg = TypeConversionUtils.image_X_UrlString(
|
||||||
|
@ -16,8 +16,8 @@ class PlaylistAddTrackDialog extends HookConsumerWidget {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, ref) {
|
Widget build(BuildContext context, ref) {
|
||||||
final spotify = ref.watch(spotifyProvider);
|
final spotify = ref.watch(spotifyProvider);
|
||||||
final userPlaylists = Queries.playlist.useOfMineQuery(ref);
|
final userPlaylists = useQueries.playlist.ofMine(ref);
|
||||||
final me = Queries.user.useMe(ref);
|
final me = useQueries.user.me(ref);
|
||||||
final filteredPlaylists = userPlaylists.data?.where(
|
final filteredPlaylists = userPlaylists.data?.where(
|
||||||
(playlist) =>
|
(playlist) =>
|
||||||
playlist.owner?.id != null && playlist.owner!.id == me.data?.id,
|
playlist.owner?.id != null && playlist.owner!.id == me.data?.id,
|
||||||
|
@ -47,17 +47,17 @@ class HeartButton extends ConsumerWidget {
|
|||||||
|
|
||||||
Tuple3<bool, Mutation<bool, dynamic, bool>, Query<User, dynamic>>
|
Tuple3<bool, Mutation<bool, dynamic, bool>, Query<User, dynamic>>
|
||||||
useTrackToggleLike(Track track, WidgetRef ref) {
|
useTrackToggleLike(Track track, WidgetRef ref) {
|
||||||
final me = Queries.user.useMe(ref);
|
final me = useQueries.user.me(ref);
|
||||||
|
|
||||||
final savedTracks =
|
final savedTracks =
|
||||||
Queries.playlist.useTracksOfQuery(ref, "user-liked-tracks");
|
useQueries.playlist.tracksOfQuery(ref, "user-liked-tracks");
|
||||||
|
|
||||||
final isLiked =
|
final isLiked =
|
||||||
savedTracks.data?.map((track) => track.id).contains(track.id) ?? false;
|
savedTracks.data?.map((track) => track.id).contains(track.id) ?? false;
|
||||||
|
|
||||||
final mounted = useIsMounted();
|
final mounted = useIsMounted();
|
||||||
|
|
||||||
final toggleTrackLike = Mutations.track.useToggleFavorite(
|
final toggleTrackLike = useMutations.track.toggleFavorite(
|
||||||
ref,
|
ref,
|
||||||
track.id!,
|
track.id!,
|
||||||
onMutate: (variables) {
|
onMutate: (variables) {
|
||||||
@ -92,7 +92,7 @@ class TrackHeartButton extends HookConsumerWidget {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, ref) {
|
Widget build(BuildContext context, ref) {
|
||||||
final savedTracks =
|
final savedTracks =
|
||||||
Queries.playlist.useTracksOfQuery(ref, "user-liked-tracks");
|
useQueries.playlist.tracksOfQuery(ref, "user-liked-tracks");
|
||||||
final toggler = useTrackToggleLike(track, ref);
|
final toggler = useTrackToggleLike(track, ref);
|
||||||
if (toggler.item3.isLoading || !toggler.item3.hasData) {
|
if (toggler.item3.isLoading || !toggler.item3.hasData) {
|
||||||
return const PlatformCircularProgressIndicator();
|
return const PlatformCircularProgressIndicator();
|
||||||
@ -120,15 +120,15 @@ class PlaylistHeartButton extends HookConsumerWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, ref) {
|
Widget build(BuildContext context, ref) {
|
||||||
final me = Queries.user.useMe(ref);
|
final me = useQueries.user.me(ref);
|
||||||
|
|
||||||
final isLikedQuery = Queries.playlist.useDoesUserFollowQuery(
|
final isLikedQuery = useQueries.playlist.doesUserFollow(
|
||||||
ref,
|
ref,
|
||||||
playlist.id!,
|
playlist.id!,
|
||||||
me.data!.id!,
|
me.data!.id!,
|
||||||
);
|
);
|
||||||
|
|
||||||
final togglePlaylistLike = Mutations.playlist.useToggleFavorite(
|
final togglePlaylistLike = useMutations.playlist.toggleFavorite(
|
||||||
ref,
|
ref,
|
||||||
playlist.id!,
|
playlist.id!,
|
||||||
refreshQueries: [
|
refreshQueries: [
|
||||||
@ -178,12 +178,12 @@ class AlbumHeartButton extends HookConsumerWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, ref) {
|
Widget build(BuildContext context, ref) {
|
||||||
final me = Queries.user.useMe(ref);
|
final me = useQueries.user.me(ref);
|
||||||
|
|
||||||
final albumIsSaved = Queries.album.useIsSavedForMeQuery(ref, album.id!);
|
final albumIsSaved = useQueries.album.isSavedForMe(ref, album.id!);
|
||||||
final isLiked = albumIsSaved.data ?? false;
|
final isLiked = albumIsSaved.data ?? false;
|
||||||
|
|
||||||
final toggleAlbumLike = Mutations.album.useToggleFavorite(
|
final toggleAlbumLike = useMutations.album.toggleFavorite(
|
||||||
ref,
|
ref,
|
||||||
album.id!,
|
album.id!,
|
||||||
refreshQueries: [
|
refreshQueries: [
|
||||||
|
@ -73,7 +73,7 @@ class TrackTile extends HookConsumerWidget {
|
|||||||
final playlistQueueNotifier = ref.watch(PlaylistQueueNotifier.notifier);
|
final playlistQueueNotifier = ref.watch(PlaylistQueueNotifier.notifier);
|
||||||
|
|
||||||
final removingTrack = useState<String?>(null);
|
final removingTrack = useState<String?>(null);
|
||||||
final removeTrack = Mutations.playlist.useRemoveTrackOf(
|
final removeTrack = useMutations.playlist.removeTrackOf(
|
||||||
ref,
|
ref,
|
||||||
playlistId ?? "",
|
playlistId ?? "",
|
||||||
);
|
);
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
import 'package:fl_query_hooks/fl_query_hooks.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||||
@ -12,7 +11,6 @@ import 'package:spotube/provider/playlist_queue_provider.dart';
|
|||||||
import 'package:spotube/services/queries/queries.dart';
|
import 'package:spotube/services/queries/queries.dart';
|
||||||
import 'package:spotube/utils/service_utils.dart';
|
import 'package:spotube/utils/service_utils.dart';
|
||||||
import 'package:spotube/utils/type_conversion_utils.dart';
|
import 'package:spotube/utils/type_conversion_utils.dart';
|
||||||
import 'package:spotube/provider/spotify_provider.dart';
|
|
||||||
|
|
||||||
class AlbumPage extends HookConsumerWidget {
|
class AlbumPage extends HookConsumerWidget {
|
||||||
final AlbumSimple album;
|
final AlbumSimple album;
|
||||||
@ -47,7 +45,7 @@ class AlbumPage extends HookConsumerWidget {
|
|||||||
ref.watch(PlaylistQueueNotifier.provider);
|
ref.watch(PlaylistQueueNotifier.provider);
|
||||||
final playback = ref.watch(PlaylistQueueNotifier.notifier);
|
final playback = ref.watch(PlaylistQueueNotifier.notifier);
|
||||||
|
|
||||||
final tracksSnapshot = Queries.album.useTracksOfQuery(ref, album.id!);
|
final tracksSnapshot = useQueries.album.tracksOf(ref, album.id!);
|
||||||
|
|
||||||
final albumArt = useMemoized(
|
final albumArt = useMemoized(
|
||||||
() => TypeConversionUtils.image_X_UrlString(
|
() => TypeConversionUtils.image_X_UrlString(
|
||||||
|
@ -64,7 +64,7 @@ class ArtistPage extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
body: HookBuilder(
|
body: HookBuilder(
|
||||||
builder: (context) {
|
builder: (context) {
|
||||||
final artistsQuery = Queries.artist.useGetArtist(ref, artistId);
|
final artistsQuery = useQueries.artist.get(ref, artistId);
|
||||||
|
|
||||||
if (artistsQuery.isLoading || !artistsQuery.hasData) {
|
if (artistsQuery.isLoading || !artistsQuery.hasData) {
|
||||||
return const ShimmerArtistProfile();
|
return const ShimmerArtistProfile();
|
||||||
@ -162,8 +162,8 @@ class ArtistPage extends HookConsumerWidget {
|
|||||||
if (auth != null)
|
if (auth != null)
|
||||||
HookBuilder(
|
HookBuilder(
|
||||||
builder: (context) {
|
builder: (context) {
|
||||||
final isFollowingQuery = Queries.artist
|
final isFollowingQuery = useQueries.artist
|
||||||
.useDoIFollowQuery(ref, artistId);
|
.doIFollow(ref, artistId);
|
||||||
|
|
||||||
if (isFollowingQuery.isLoading ||
|
if (isFollowingQuery.isLoading ||
|
||||||
!isFollowingQuery.hasData) {
|
!isFollowingQuery.hasData) {
|
||||||
@ -268,7 +268,7 @@ class ArtistPage extends HookConsumerWidget {
|
|||||||
const SizedBox(height: 50),
|
const SizedBox(height: 50),
|
||||||
HookBuilder(
|
HookBuilder(
|
||||||
builder: (context) {
|
builder: (context) {
|
||||||
final topTracksQuery = Queries.artist.useTopTracksOfQuery(
|
final topTracksQuery = useQueries.artist.topTracksOf(
|
||||||
ref,
|
ref,
|
||||||
artistId,
|
artistId,
|
||||||
);
|
);
|
||||||
@ -378,8 +378,7 @@ class ArtistPage extends HookConsumerWidget {
|
|||||||
const SizedBox(height: 10),
|
const SizedBox(height: 10),
|
||||||
HookBuilder(
|
HookBuilder(
|
||||||
builder: (context) {
|
builder: (context) {
|
||||||
final relatedArtists =
|
final relatedArtists = useQueries.artist.relatedArtistsOf(
|
||||||
Queries.artist.useRelatedArtistsOfQuery(
|
|
||||||
ref,
|
ref,
|
||||||
artistId,
|
artistId,
|
||||||
);
|
);
|
||||||
|
@ -22,11 +22,10 @@ class GenrePage extends HookConsumerWidget {
|
|||||||
final recommendationMarket = ref.watch(
|
final recommendationMarket = ref.watch(
|
||||||
userPreferencesProvider.select((s) => s.recommendationMarket),
|
userPreferencesProvider.select((s) => s.recommendationMarket),
|
||||||
);
|
);
|
||||||
final categoriesQuery = Queries.category.useList(ref, recommendationMarket);
|
final categoriesQuery = useQueries.category.list(ref, recommendationMarket);
|
||||||
|
|
||||||
final isMounted = useIsMounted();
|
final isMounted = useIsMounted();
|
||||||
|
|
||||||
return HookBuilder(builder: (context) {
|
|
||||||
final searchText = useState("");
|
final searchText = useState("");
|
||||||
final categories = useMemoized(
|
final categories = useMemoized(
|
||||||
() {
|
() {
|
||||||
@ -83,6 +82,7 @@ class GenrePage extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
return Stack(
|
return Stack(
|
||||||
children: [
|
children: [
|
||||||
Positioned.fill(child: list),
|
Positioned.fill(child: list),
|
||||||
@ -93,6 +93,5 @@ class GenrePage extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -102,9 +102,9 @@ class PersonalizedPage extends HookConsumerWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, ref) {
|
Widget build(BuildContext context, ref) {
|
||||||
final featuredPlaylistsQuery = Queries.playlist.useFeaturedQuery(ref);
|
final featuredPlaylistsQuery = useQueries.playlist.featured(ref);
|
||||||
|
|
||||||
final newReleases = Queries.album.useNewReleasesQuery(ref);
|
final newReleases = useQueries.album.newReleases(ref);
|
||||||
|
|
||||||
return ListView(
|
return ListView(
|
||||||
children: [
|
children: [
|
||||||
|
@ -22,7 +22,7 @@ class GeniusLyrics extends HookConsumerWidget {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, ref) {
|
Widget build(BuildContext context, ref) {
|
||||||
final playlist = ref.watch(PlaylistQueueNotifier.provider);
|
final playlist = ref.watch(PlaylistQueueNotifier.provider);
|
||||||
final geniusLyricsQuery = Queries.lyrics.useStatic(
|
final geniusLyricsQuery = useQueries.lyrics.static(
|
||||||
playlist?.activeTrack,
|
playlist?.activeTrack,
|
||||||
ref.watch(userPreferencesProvider).geniusAccessToken,
|
ref.watch(userPreferencesProvider).geniusAccessToken,
|
||||||
);
|
);
|
||||||
|
@ -44,7 +44,7 @@ class SyncedLyrics extends HookConsumerWidget {
|
|||||||
final breakpoint = useBreakpoints();
|
final breakpoint = useBreakpoints();
|
||||||
final controller = useAutoScrollController();
|
final controller = useAutoScrollController();
|
||||||
|
|
||||||
final timedLyricsQuery = Queries.lyrics.useSynced(playlist?.activeTrack);
|
final timedLyricsQuery = useQueries.lyrics.synced(playlist?.activeTrack);
|
||||||
final lyricValue = timedLyricsQuery.data;
|
final lyricValue = timedLyricsQuery.data;
|
||||||
final lyricsMap = useMemoized(
|
final lyricsMap = useMemoized(
|
||||||
() =>
|
() =>
|
||||||
|
@ -47,8 +47,8 @@ class PlaylistView extends HookConsumerWidget {
|
|||||||
|
|
||||||
final breakpoint = useBreakpoints();
|
final breakpoint = useBreakpoints();
|
||||||
|
|
||||||
final meSnapshot = Queries.user.useMe(ref);
|
final meSnapshot = useQueries.user.me(ref);
|
||||||
final tracksSnapshot = Queries.playlist.useTracksOfQuery(ref, playlist.id!);
|
final tracksSnapshot = useQueries.playlist.tracksOfQuery(ref, playlist.id!);
|
||||||
|
|
||||||
final isPlaylistPlaying =
|
final isPlaylistPlaying =
|
||||||
playlistNotifier.isPlayingPlaylist(tracksSnapshot.data ?? []);
|
playlistNotifier.isPlayingPlaylist(tracksSnapshot.data ?? []);
|
||||||
|
@ -4,13 +4,11 @@ import 'package:flutter_hooks/flutter_hooks.dart';
|
|||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:platform_ui/platform_ui.dart';
|
import 'package:platform_ui/platform_ui.dart';
|
||||||
import 'package:spotube/collections/side_bar_tiles.dart';
|
|
||||||
import 'package:spotube/components/shared/dialogs/replace_downloaded_dialog.dart';
|
import 'package:spotube/components/shared/dialogs/replace_downloaded_dialog.dart';
|
||||||
import 'package:spotube/components/root/bottom_player.dart';
|
import 'package:spotube/components/root/bottom_player.dart';
|
||||||
import 'package:spotube/components/root/sidebar.dart';
|
import 'package:spotube/components/root/sidebar.dart';
|
||||||
import 'package:spotube/components/root/spotube_navigation_bar.dart';
|
import 'package:spotube/components/root/spotube_navigation_bar.dart';
|
||||||
import 'package:spotube/components/shared/page_window_title_bar.dart';
|
import 'package:spotube/components/shared/page_window_title_bar.dart';
|
||||||
import 'package:spotube/hooks/use_breakpoints.dart';
|
|
||||||
import 'package:spotube/hooks/use_update_checker.dart';
|
import 'package:spotube/hooks/use_update_checker.dart';
|
||||||
import 'package:spotube/provider/downloader_provider.dart';
|
import 'package:spotube/provider/downloader_provider.dart';
|
||||||
|
|
||||||
|
@ -52,19 +52,19 @@ class SearchPage extends HookConsumerWidget {
|
|||||||
);
|
);
|
||||||
|
|
||||||
final searchTrack = useInfiniteQuery(
|
final searchTrack = useInfiniteQuery(
|
||||||
job: Queries.search.get(SearchType.track.key),
|
job: useQueries.search.get(SearchType.track.key),
|
||||||
externalData: Tuple2("", spotify),
|
externalData: Tuple2("", spotify),
|
||||||
);
|
);
|
||||||
final searchAlbum = useInfiniteQuery(
|
final searchAlbum = useInfiniteQuery(
|
||||||
job: Queries.search.get(SearchType.album.key),
|
job: useQueries.search.get(SearchType.album.key),
|
||||||
externalData: Tuple2("", spotify),
|
externalData: Tuple2("", spotify),
|
||||||
);
|
);
|
||||||
final searchPlaylist = useInfiniteQuery(
|
final searchPlaylist = useInfiniteQuery(
|
||||||
job: Queries.search.get(SearchType.playlist.key),
|
job: useQueries.search.get(SearchType.playlist.key),
|
||||||
externalData: Tuple2("", spotify),
|
externalData: Tuple2("", spotify),
|
||||||
);
|
);
|
||||||
final searchArtist = useInfiniteQuery(
|
final searchArtist = useInfiniteQuery(
|
||||||
job: Queries.search.get(SearchType.artist.key),
|
job: useQueries.search.get(SearchType.artist.key),
|
||||||
externalData: Tuple2("", spotify),
|
externalData: Tuple2("", spotify),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -3,7 +3,9 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
|
|||||||
import 'package:spotube/hooks/use_spotify_mutation.dart';
|
import 'package:spotube/hooks/use_spotify_mutation.dart';
|
||||||
|
|
||||||
class AlbumMutations {
|
class AlbumMutations {
|
||||||
Mutation<bool, dynamic, bool> useToggleFavorite(
|
const AlbumMutations();
|
||||||
|
|
||||||
|
Mutation<bool, dynamic, bool> toggleFavorite(
|
||||||
WidgetRef ref,
|
WidgetRef ref,
|
||||||
String albumId, {
|
String albumId, {
|
||||||
List<String>? refreshQueries,
|
List<String>? refreshQueries,
|
||||||
|
@ -2,8 +2,11 @@ import 'package:spotube/services/mutations/album.dart';
|
|||||||
import 'package:spotube/services/mutations/playlist.dart';
|
import 'package:spotube/services/mutations/playlist.dart';
|
||||||
import 'package:spotube/services/mutations/track.dart';
|
import 'package:spotube/services/mutations/track.dart';
|
||||||
|
|
||||||
abstract class Mutations {
|
class _UseMutations {
|
||||||
static final playlist = PlaylistMutations();
|
const _UseMutations._();
|
||||||
static final album = AlbumMutations();
|
final playlist = const PlaylistMutations();
|
||||||
static final track = TrackMutations();
|
final album = const AlbumMutations();
|
||||||
|
final track = const TrackMutations();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const useMutations = _UseMutations._();
|
||||||
|
@ -3,7 +3,9 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
|
|||||||
import 'package:spotube/hooks/use_spotify_mutation.dart';
|
import 'package:spotube/hooks/use_spotify_mutation.dart';
|
||||||
|
|
||||||
class PlaylistMutations {
|
class PlaylistMutations {
|
||||||
Mutation<bool, dynamic, bool> useToggleFavorite(
|
const PlaylistMutations();
|
||||||
|
|
||||||
|
Mutation<bool, dynamic, bool> toggleFavorite(
|
||||||
WidgetRef ref,
|
WidgetRef ref,
|
||||||
String playlistId, {
|
String playlistId, {
|
||||||
List<String>? refreshQueries,
|
List<String>? refreshQueries,
|
||||||
@ -23,7 +25,7 @@ class PlaylistMutations {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Mutation<bool, dynamic, String> useRemoveTrackOf(
|
Mutation<bool, dynamic, String> removeTrackOf(
|
||||||
WidgetRef ref,
|
WidgetRef ref,
|
||||||
String playlistId,
|
String playlistId,
|
||||||
) {
|
) {
|
||||||
|
@ -3,7 +3,9 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
|
|||||||
import 'package:spotube/hooks/use_spotify_mutation.dart';
|
import 'package:spotube/hooks/use_spotify_mutation.dart';
|
||||||
|
|
||||||
class TrackMutations {
|
class TrackMutations {
|
||||||
Mutation<bool, dynamic, bool> useToggleFavorite(
|
const TrackMutations();
|
||||||
|
|
||||||
|
Mutation<bool, dynamic, bool> toggleFavorite(
|
||||||
WidgetRef ref,
|
WidgetRef ref,
|
||||||
String trackId, {
|
String trackId, {
|
||||||
MutationOnMutationFn<bool, bool>? onMutate,
|
MutationOnMutationFn<bool, bool>? onMutate,
|
||||||
|
@ -7,7 +7,9 @@ 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';
|
||||||
|
|
||||||
class AlbumQueries {
|
class AlbumQueries {
|
||||||
Query<Iterable<AlbumSimple>, dynamic> useOfMineQuery(WidgetRef ref) {
|
const AlbumQueries();
|
||||||
|
|
||||||
|
Query<Iterable<AlbumSimple>, dynamic> ofMine(WidgetRef ref) {
|
||||||
return useSpotifyQuery<Iterable<AlbumSimple>, dynamic>(
|
return useSpotifyQuery<Iterable<AlbumSimple>, dynamic>(
|
||||||
"current-user-albums",
|
"current-user-albums",
|
||||||
(spotify) {
|
(spotify) {
|
||||||
@ -17,7 +19,7 @@ class AlbumQueries {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Query<List<TrackSimple>, dynamic> useTracksOfQuery(
|
Query<List<TrackSimple>, dynamic> tracksOf(
|
||||||
WidgetRef ref,
|
WidgetRef ref,
|
||||||
String albumId,
|
String albumId,
|
||||||
) {
|
) {
|
||||||
@ -33,7 +35,7 @@ class AlbumQueries {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Query<bool, dynamic> useIsSavedForMeQuery(
|
Query<bool, dynamic> isSavedForMe(
|
||||||
WidgetRef ref,
|
WidgetRef ref,
|
||||||
String album,
|
String album,
|
||||||
) {
|
) {
|
||||||
@ -46,8 +48,7 @@ class AlbumQueries {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
InfiniteQuery<Page<AlbumSimple>, dynamic, int> useNewReleasesQuery(
|
InfiniteQuery<Page<AlbumSimple>, dynamic, int> newReleases(WidgetRef ref) {
|
||||||
WidgetRef ref) {
|
|
||||||
return useSpotifyInfiniteQuery<Page<AlbumSimple>, dynamic, int>(
|
return useSpotifyInfiniteQuery<Page<AlbumSimple>, dynamic, int>(
|
||||||
"new-releases",
|
"new-releases",
|
||||||
(pageParam, spotify) async {
|
(pageParam, spotify) async {
|
||||||
|
@ -6,7 +6,9 @@ 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';
|
||||||
|
|
||||||
class ArtistQueries {
|
class ArtistQueries {
|
||||||
Query<Artist, dynamic> useGetArtist(
|
const ArtistQueries();
|
||||||
|
|
||||||
|
Query<Artist, dynamic> get(
|
||||||
WidgetRef ref,
|
WidgetRef ref,
|
||||||
String artist,
|
String artist,
|
||||||
) {
|
) {
|
||||||
@ -17,7 +19,7 @@ class ArtistQueries {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
InfiniteQuery<CursorPage<Artist>, dynamic, String> useFollowedByMeQuery(
|
InfiniteQuery<CursorPage<Artist>, dynamic, String> followedByMe(
|
||||||
WidgetRef ref) {
|
WidgetRef ref) {
|
||||||
return useSpotifyInfiniteQuery<CursorPage<Artist>, dynamic, String>(
|
return useSpotifyInfiniteQuery<CursorPage<Artist>, dynamic, String>(
|
||||||
"user-following-artists",
|
"user-following-artists",
|
||||||
@ -35,7 +37,7 @@ class ArtistQueries {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Query<bool, dynamic> useDoIFollowQuery(
|
Query<bool, dynamic> doIFollow(
|
||||||
WidgetRef ref,
|
WidgetRef ref,
|
||||||
String artist,
|
String artist,
|
||||||
) {
|
) {
|
||||||
@ -52,7 +54,7 @@ class ArtistQueries {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Query<Iterable<Track>, dynamic> useTopTracksOfQuery(
|
Query<Iterable<Track>, dynamic> topTracksOf(
|
||||||
WidgetRef ref,
|
WidgetRef ref,
|
||||||
String artist,
|
String artist,
|
||||||
) {
|
) {
|
||||||
@ -65,7 +67,7 @@ class ArtistQueries {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
InfiniteQuery<Page<Album>, dynamic, int> useAlbumsOfQuery(
|
InfiniteQuery<Page<Album>, dynamic, int> albumsOf(
|
||||||
WidgetRef ref,
|
WidgetRef ref,
|
||||||
String artist,
|
String artist,
|
||||||
) {
|
) {
|
||||||
@ -86,7 +88,7 @@ class ArtistQueries {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Query<Iterable<Artist>, dynamic> useRelatedArtistsOfQuery(
|
Query<Iterable<Artist>, dynamic> relatedArtistsOf(
|
||||||
WidgetRef ref,
|
WidgetRef ref,
|
||||||
String artist,
|
String artist,
|
||||||
) {
|
) {
|
||||||
|
@ -4,7 +4,9 @@ import 'package:spotify/spotify.dart';
|
|||||||
import 'package:spotube/hooks/use_spotify_infinite_query.dart';
|
import 'package:spotube/hooks/use_spotify_infinite_query.dart';
|
||||||
|
|
||||||
class CategoryQueries {
|
class CategoryQueries {
|
||||||
InfiniteQuery<Page<Category>, dynamic, int> useList(
|
const CategoryQueries();
|
||||||
|
|
||||||
|
InfiniteQuery<Page<Category>, dynamic, int> list(
|
||||||
WidgetRef ref, String recommendationMarket) {
|
WidgetRef ref, String recommendationMarket) {
|
||||||
return useSpotifyInfiniteQuery<Page<Category>, dynamic, int>(
|
return useSpotifyInfiniteQuery<Page<Category>, dynamic, int>(
|
||||||
"category-playlists",
|
"category-playlists",
|
||||||
@ -26,7 +28,7 @@ class CategoryQueries {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
InfiniteQuery<Page<PlaylistSimple>, dynamic, int> usePlaylistsOf(
|
InfiniteQuery<Page<PlaylistSimple>, dynamic, int> playlistsOf(
|
||||||
WidgetRef ref,
|
WidgetRef ref,
|
||||||
String category,
|
String category,
|
||||||
) {
|
) {
|
||||||
|
@ -7,7 +7,9 @@ import 'package:spotube/models/spotube_track.dart';
|
|||||||
import 'package:spotube/utils/service_utils.dart';
|
import 'package:spotube/utils/service_utils.dart';
|
||||||
|
|
||||||
class LyricsQueries {
|
class LyricsQueries {
|
||||||
Query<String, dynamic> useStatic(
|
const LyricsQueries();
|
||||||
|
|
||||||
|
Query<String, dynamic> static(
|
||||||
Track? track,
|
Track? track,
|
||||||
String geniusAccessToken,
|
String geniusAccessToken,
|
||||||
) {
|
) {
|
||||||
@ -30,7 +32,7 @@ class LyricsQueries {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Query<SubtitleSimple, dynamic> useSynced(
|
Query<SubtitleSimple, dynamic> synced(
|
||||||
Track? track,
|
Track? track,
|
||||||
) {
|
) {
|
||||||
return useQuery<SubtitleSimple, dynamic>(
|
return useQuery<SubtitleSimple, dynamic>(
|
||||||
|
@ -6,7 +6,9 @@ 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';
|
||||||
|
|
||||||
class PlaylistQueries {
|
class PlaylistQueries {
|
||||||
Query<bool, dynamic> useDoesUserFollowQuery(
|
const PlaylistQueries();
|
||||||
|
|
||||||
|
Query<bool, dynamic> doesUserFollow(
|
||||||
WidgetRef ref,
|
WidgetRef ref,
|
||||||
String playlistId,
|
String playlistId,
|
||||||
String userId,
|
String userId,
|
||||||
@ -21,7 +23,7 @@ class PlaylistQueries {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Query<Iterable<PlaylistSimple>, dynamic> useOfMineQuery(WidgetRef ref) {
|
Query<Iterable<PlaylistSimple>, dynamic> ofMine(WidgetRef ref) {
|
||||||
return useSpotifyQuery<Iterable<PlaylistSimple>, dynamic>(
|
return useSpotifyQuery<Iterable<PlaylistSimple>, dynamic>(
|
||||||
"current-user-playlists",
|
"current-user-playlists",
|
||||||
(spotify) {
|
(spotify) {
|
||||||
@ -42,7 +44,7 @@ class PlaylistQueries {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Query<List<Track>, dynamic> useTracksOfQuery(
|
Query<List<Track>, dynamic> tracksOfQuery(
|
||||||
WidgetRef ref,
|
WidgetRef ref,
|
||||||
String playlistId,
|
String playlistId,
|
||||||
) {
|
) {
|
||||||
@ -53,7 +55,7 @@ class PlaylistQueries {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
InfiniteQuery<Page<PlaylistSimple>, dynamic, int> useFeaturedQuery(
|
InfiniteQuery<Page<PlaylistSimple>, dynamic, int> featured(
|
||||||
WidgetRef ref,
|
WidgetRef ref,
|
||||||
) {
|
) {
|
||||||
return useSpotifyInfiniteQuery<Page<PlaylistSimple>, dynamic, int>(
|
return useSpotifyInfiniteQuery<Page<PlaylistSimple>, dynamic, int>(
|
||||||
|
@ -6,12 +6,15 @@ import 'package:spotube/services/queries/playlist.dart';
|
|||||||
import 'package:spotube/services/queries/search.dart';
|
import 'package:spotube/services/queries/search.dart';
|
||||||
import 'package:spotube/services/queries/user.dart';
|
import 'package:spotube/services/queries/user.dart';
|
||||||
|
|
||||||
abstract class Queries {
|
class Queries {
|
||||||
static final album = AlbumQueries();
|
const Queries._();
|
||||||
static final artist = ArtistQueries();
|
final album = const AlbumQueries();
|
||||||
static final category = CategoryQueries();
|
final artist = const ArtistQueries();
|
||||||
static final lyrics = LyricsQueries();
|
final category = const CategoryQueries();
|
||||||
static final playlist = PlaylistQueries();
|
final lyrics = const LyricsQueries();
|
||||||
static final search = SearchQueries();
|
final playlist = const PlaylistQueries();
|
||||||
static final user = UserQueries();
|
final search = const SearchQueries();
|
||||||
|
final user = const UserQueries();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const useQueries = Queries._();
|
||||||
|
@ -4,7 +4,8 @@ import 'package:spotify/spotify.dart';
|
|||||||
import 'package:spotube/hooks/use_spotify_infinite_query.dart';
|
import 'package:spotube/hooks/use_spotify_infinite_query.dart';
|
||||||
|
|
||||||
class SearchQueries {
|
class SearchQueries {
|
||||||
InfiniteQuery<List<Page>, dynamic, int> useSearchQuery(
|
const SearchQueries();
|
||||||
|
InfiniteQuery<List<Page>, dynamic, int> query(
|
||||||
WidgetRef ref,
|
WidgetRef ref,
|
||||||
String query,
|
String query,
|
||||||
SearchType searchType,
|
SearchType searchType,
|
||||||
|
@ -5,7 +5,8 @@ import 'package:spotube/hooks/use_spotify_query.dart';
|
|||||||
import 'package:spotube/utils/type_conversion_utils.dart';
|
import 'package:spotube/utils/type_conversion_utils.dart';
|
||||||
|
|
||||||
class UserQueries {
|
class UserQueries {
|
||||||
Query<User, dynamic> useMe(WidgetRef ref) {
|
const UserQueries();
|
||||||
|
Query<User, dynamic> me(WidgetRef ref) {
|
||||||
return useSpotifyQuery<User, dynamic>(
|
return useSpotifyQuery<User, dynamic>(
|
||||||
"current-user",
|
"current-user",
|
||||||
(spotify) async {
|
(spotify) async {
|
||||||
|
Loading…
Reference in New Issue
Block a user