diff --git a/lib/components/artist/artist_album_list.dart b/lib/components/artist/artist_album_list.dart index 9d22ae34..b12dd544 100644 --- a/lib/components/artist/artist_album_list.dart +++ b/lib/components/artist/artist_album_list.dart @@ -21,7 +21,7 @@ class ArtistAlbumList extends HookConsumerWidget { @override Widget build(BuildContext context, ref) { final scrollController = useScrollController(); - final albumsQuery = Queries.artist.useAlbumsOfQuery(ref, artistId); + final albumsQuery = useQueries.artist.albumsOf(ref, artistId); final albums = useMemoized(() { return albumsQuery.pages diff --git a/lib/components/genre/category_card.dart b/lib/components/genre/category_card.dart index 0f4ed279..02c66e62 100644 --- a/lib/components/genre/category_card.dart +++ b/lib/components/genre/category_card.dart @@ -24,7 +24,7 @@ class CategoryCard extends HookConsumerWidget { Widget build(BuildContext context, ref) { final scrollController = useScrollController(); final spotify = ref.watch(spotifyProvider); - final playlistQuery = Queries.category.usePlaylistsOf( + final playlistQuery = useQueries.category.playlistsOf( ref, category.id!, ); diff --git a/lib/components/library/user_albums.dart b/lib/components/library/user_albums.dart index 8cef3840..ebcaa9dc 100644 --- a/lib/components/library/user_albums.dart +++ b/lib/components/library/user_albums.dart @@ -22,7 +22,7 @@ class UserAlbums extends HookConsumerWidget { @override Widget build(BuildContext context, ref) { final auth = ref.watch(AuthenticationNotifier.provider); - final albumsQuery = Queries.album.useOfMineQuery(ref); + final albumsQuery = useQueries.album.ofMine(ref); final spacing = useBreakpointValue( sm: 0, diff --git a/lib/components/library/user_artists.dart b/lib/components/library/user_artists.dart index c9dd5672..a522b7f4 100644 --- a/lib/components/library/user_artists.dart +++ b/lib/components/library/user_artists.dart @@ -20,7 +20,7 @@ class UserArtists extends HookConsumerWidget { Widget build(BuildContext context, ref) { final auth = ref.watch(AuthenticationNotifier.provider); - final artistQuery = Queries.artist.useFollowedByMeQuery(ref); + final artistQuery = useQueries.artist.followedByMe(ref); final hasNextPage = artistQuery.pages.isEmpty ? false diff --git a/lib/components/library/user_playlists.dart b/lib/components/library/user_playlists.dart index 7ab0020d..b0eef87d 100644 --- a/lib/components/library/user_playlists.dart +++ b/lib/components/library/user_playlists.dart @@ -33,7 +33,7 @@ class UserPlaylists extends HookConsumerWidget { : PlaybuttonCardViewType.square; final auth = ref.watch(AuthenticationNotifier.provider); - final playlistsQuery = Queries.playlist.useOfMineQuery(ref); + final playlistsQuery = useQueries.playlist.ofMine(ref); Image image = Image(); image.height = 300; diff --git a/lib/components/playlist/playlist_card.dart b/lib/components/playlist/playlist_card.dart index b44180e4..8d0c9215 100644 --- a/lib/components/playlist/playlist_card.dart +++ b/lib/components/playlist/playlist_card.dart @@ -68,7 +68,7 @@ class PlaylistCard extends HookConsumerWidget { List fetchedTracks = await queryBowl.fetchQuery( "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; List fetchedTracks = await queryBowl.fetchQuery( "playlist-tracks/${playlist.id}", - () => Queries.playlist.tracksOf(playlist.id!, spotify), + () => useQueries.playlist.tracksOf(playlist.id!, spotify), ) ?? []; diff --git a/lib/components/root/sidebar.dart b/lib/components/root/sidebar.dart index 8cc854b5..451dfa78 100644 --- a/lib/components/root/sidebar.dart +++ b/lib/components/root/sidebar.dart @@ -11,7 +11,6 @@ import 'package:spotube/components/shared/image/universal_image.dart'; import 'package:spotube/hooks/use_breakpoints.dart'; import 'package:spotube/provider/authentication_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/services/queries/queries.dart'; @@ -194,8 +193,7 @@ class SidebarFooter extends HookConsumerWidget { width: 256, child: HookBuilder( builder: (context) { - var spotify = ref.watch(spotifyProvider); - final me = Queries.user.useMe(ref); + final me = useQueries.user.me(ref); final data = me.data; final avatarImg = TypeConversionUtils.image_X_UrlString( diff --git a/lib/components/shared/dialogs/playlist_add_track_dialog.dart b/lib/components/shared/dialogs/playlist_add_track_dialog.dart index 06ed49ba..9a8d2003 100644 --- a/lib/components/shared/dialogs/playlist_add_track_dialog.dart +++ b/lib/components/shared/dialogs/playlist_add_track_dialog.dart @@ -16,8 +16,8 @@ class PlaylistAddTrackDialog extends HookConsumerWidget { @override Widget build(BuildContext context, ref) { final spotify = ref.watch(spotifyProvider); - final userPlaylists = Queries.playlist.useOfMineQuery(ref); - final me = Queries.user.useMe(ref); + final userPlaylists = useQueries.playlist.ofMine(ref); + final me = useQueries.user.me(ref); final filteredPlaylists = userPlaylists.data?.where( (playlist) => playlist.owner?.id != null && playlist.owner!.id == me.data?.id, diff --git a/lib/components/shared/heart_button.dart b/lib/components/shared/heart_button.dart index 42bb117b..0a547d26 100644 --- a/lib/components/shared/heart_button.dart +++ b/lib/components/shared/heart_button.dart @@ -47,17 +47,17 @@ class HeartButton extends ConsumerWidget { Tuple3, Query> useTrackToggleLike(Track track, WidgetRef ref) { - final me = Queries.user.useMe(ref); + final me = useQueries.user.me(ref); final savedTracks = - Queries.playlist.useTracksOfQuery(ref, "user-liked-tracks"); + useQueries.playlist.tracksOfQuery(ref, "user-liked-tracks"); final isLiked = savedTracks.data?.map((track) => track.id).contains(track.id) ?? false; final mounted = useIsMounted(); - final toggleTrackLike = Mutations.track.useToggleFavorite( + final toggleTrackLike = useMutations.track.toggleFavorite( ref, track.id!, onMutate: (variables) { @@ -92,7 +92,7 @@ class TrackHeartButton extends HookConsumerWidget { @override Widget build(BuildContext context, ref) { final savedTracks = - Queries.playlist.useTracksOfQuery(ref, "user-liked-tracks"); + useQueries.playlist.tracksOfQuery(ref, "user-liked-tracks"); final toggler = useTrackToggleLike(track, ref); if (toggler.item3.isLoading || !toggler.item3.hasData) { return const PlatformCircularProgressIndicator(); @@ -120,15 +120,15 @@ class PlaylistHeartButton extends HookConsumerWidget { @override 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, playlist.id!, me.data!.id!, ); - final togglePlaylistLike = Mutations.playlist.useToggleFavorite( + final togglePlaylistLike = useMutations.playlist.toggleFavorite( ref, playlist.id!, refreshQueries: [ @@ -178,12 +178,12 @@ class AlbumHeartButton extends HookConsumerWidget { @override 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 toggleAlbumLike = Mutations.album.useToggleFavorite( + final toggleAlbumLike = useMutations.album.toggleFavorite( ref, album.id!, refreshQueries: [ diff --git a/lib/components/shared/track_table/track_tile.dart b/lib/components/shared/track_table/track_tile.dart index 671549c2..f82bb9f1 100644 --- a/lib/components/shared/track_table/track_tile.dart +++ b/lib/components/shared/track_table/track_tile.dart @@ -73,7 +73,7 @@ class TrackTile extends HookConsumerWidget { final playlistQueueNotifier = ref.watch(PlaylistQueueNotifier.notifier); final removingTrack = useState(null); - final removeTrack = Mutations.playlist.useRemoveTrackOf( + final removeTrack = useMutations.playlist.removeTrackOf( ref, playlistId ?? "", ); diff --git a/lib/pages/album/album.dart b/lib/pages/album/album.dart index 569184c8..a6399bf0 100644 --- a/lib/pages/album/album.dart +++ b/lib/pages/album/album.dart @@ -1,4 +1,3 @@ -import 'package:fl_query_hooks/fl_query_hooks.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.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/utils/service_utils.dart'; import 'package:spotube/utils/type_conversion_utils.dart'; -import 'package:spotube/provider/spotify_provider.dart'; class AlbumPage extends HookConsumerWidget { final AlbumSimple album; @@ -47,7 +45,7 @@ class AlbumPage extends HookConsumerWidget { ref.watch(PlaylistQueueNotifier.provider); 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( () => TypeConversionUtils.image_X_UrlString( diff --git a/lib/pages/artist/artist.dart b/lib/pages/artist/artist.dart index b1a372f5..d939fedf 100644 --- a/lib/pages/artist/artist.dart +++ b/lib/pages/artist/artist.dart @@ -64,7 +64,7 @@ class ArtistPage extends HookConsumerWidget { ), body: HookBuilder( builder: (context) { - final artistsQuery = Queries.artist.useGetArtist(ref, artistId); + final artistsQuery = useQueries.artist.get(ref, artistId); if (artistsQuery.isLoading || !artistsQuery.hasData) { return const ShimmerArtistProfile(); @@ -162,8 +162,8 @@ class ArtistPage extends HookConsumerWidget { if (auth != null) HookBuilder( builder: (context) { - final isFollowingQuery = Queries.artist - .useDoIFollowQuery(ref, artistId); + final isFollowingQuery = useQueries.artist + .doIFollow(ref, artistId); if (isFollowingQuery.isLoading || !isFollowingQuery.hasData) { @@ -268,7 +268,7 @@ class ArtistPage extends HookConsumerWidget { const SizedBox(height: 50), HookBuilder( builder: (context) { - final topTracksQuery = Queries.artist.useTopTracksOfQuery( + final topTracksQuery = useQueries.artist.topTracksOf( ref, artistId, ); @@ -378,8 +378,7 @@ class ArtistPage extends HookConsumerWidget { const SizedBox(height: 10), HookBuilder( builder: (context) { - final relatedArtists = - Queries.artist.useRelatedArtistsOfQuery( + final relatedArtists = useQueries.artist.relatedArtistsOf( ref, artistId, ); diff --git a/lib/pages/home/genres.dart b/lib/pages/home/genres.dart index b682d42c..3b997e10 100644 --- a/lib/pages/home/genres.dart +++ b/lib/pages/home/genres.dart @@ -22,77 +22,76 @@ class GenrePage extends HookConsumerWidget { final recommendationMarket = ref.watch( userPreferencesProvider.select((s) => s.recommendationMarket), ); - final categoriesQuery = Queries.category.useList(ref, recommendationMarket); + final categoriesQuery = useQueries.category.list(ref, recommendationMarket); final isMounted = useIsMounted(); - return HookBuilder(builder: (context) { - final searchText = useState(""); - final categories = useMemoized( - () { - final categories = categoriesQuery.pages - .expand( - (page) => page.items ?? const Iterable.empty(), - ) - .toList(); - if (searchText.value.isEmpty) { - return categories; + final searchText = useState(""); + final categories = useMemoized( + () { + final categories = categoriesQuery.pages + .expand( + (page) => page.items ?? const Iterable.empty(), + ) + .toList(); + if (searchText.value.isEmpty) { + return categories; + } + return categories + .map((e) => Tuple2( + weightedRatio(e.name!, searchText.value), + e, + )) + .sorted((a, b) => b.item1.compareTo(a.item1)) + .where((e) => e.item1 > 50) + .map((e) => e.item2) + .toList(); + }, + [categoriesQuery.pages, searchText.value], + ); + + final searchbar = CompactSearch( + onChanged: (value) { + searchText.value = value; + }, + placeholder: "Filter categories or genres...", + ); + + final list = RefreshIndicator( + onRefresh: () async { + await categoriesQuery.refreshAll(); + }, + child: Waypoint( + onTouchEdge: () async { + if (categoriesQuery.hasNextPage && isMounted()) { + await categoriesQuery.fetchNext(); } - return categories - .map((e) => Tuple2( - weightedRatio(e.name!, searchText.value), - e, - )) - .sorted((a, b) => b.item1.compareTo(a.item1)) - .where((e) => e.item1 > 50) - .map((e) => e.item2) - .toList(); }, - [categoriesQuery.pages, searchText.value], - ); - - final searchbar = CompactSearch( - onChanged: (value) { - searchText.value = value; - }, - placeholder: "Filter categories or genres...", - ); - - final list = RefreshIndicator( - onRefresh: () async { - await categoriesQuery.refreshAll(); - }, - child: Waypoint( - onTouchEdge: () async { - if (categoriesQuery.hasNextPage && isMounted()) { - await categoriesQuery.fetchNext(); - } - }, + controller: scrollController, + child: ListView.builder( + physics: const AlwaysScrollableScrollPhysics(), controller: scrollController, - child: ListView.builder( - physics: const AlwaysScrollableScrollPhysics(), - controller: scrollController, - itemCount: categories.length, - itemBuilder: (context, index) { - final category = categories[index]; - if (searchText.value.isEmpty && index == categories.length - 1) { - return const ShimmerCategories(); - } - return CategoryCard(category); - }, - ), + itemCount: categories.length, + itemBuilder: (context, index) { + final category = categories[index]; + if (searchText.value.isEmpty && index == categories.length - 1) { + return const ShimmerCategories(); + } + return CategoryCard(category); + }, ), - ); - return Stack( - children: [ - Positioned.fill(child: list), - Positioned( - top: 0, - right: 10, - child: searchbar, - ), - ], - ); - }); + ), + ); + + return Stack( + children: [ + Positioned.fill(child: list), + Positioned( + top: 0, + right: 10, + child: searchbar, + ), + ], + ); } } diff --git a/lib/pages/home/personalized.dart b/lib/pages/home/personalized.dart index 810dd00d..a502103d 100644 --- a/lib/pages/home/personalized.dart +++ b/lib/pages/home/personalized.dart @@ -102,9 +102,9 @@ class PersonalizedPage extends HookConsumerWidget { @override 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( children: [ diff --git a/lib/pages/lyrics/genius_lyrics.dart b/lib/pages/lyrics/genius_lyrics.dart index 5f23c126..b158a13b 100644 --- a/lib/pages/lyrics/genius_lyrics.dart +++ b/lib/pages/lyrics/genius_lyrics.dart @@ -22,7 +22,7 @@ class GeniusLyrics extends HookConsumerWidget { @override Widget build(BuildContext context, ref) { final playlist = ref.watch(PlaylistQueueNotifier.provider); - final geniusLyricsQuery = Queries.lyrics.useStatic( + final geniusLyricsQuery = useQueries.lyrics.static( playlist?.activeTrack, ref.watch(userPreferencesProvider).geniusAccessToken, ); diff --git a/lib/pages/lyrics/synced_lyrics.dart b/lib/pages/lyrics/synced_lyrics.dart index 670c663d..d7081399 100644 --- a/lib/pages/lyrics/synced_lyrics.dart +++ b/lib/pages/lyrics/synced_lyrics.dart @@ -44,7 +44,7 @@ class SyncedLyrics extends HookConsumerWidget { final breakpoint = useBreakpoints(); final controller = useAutoScrollController(); - final timedLyricsQuery = Queries.lyrics.useSynced(playlist?.activeTrack); + final timedLyricsQuery = useQueries.lyrics.synced(playlist?.activeTrack); final lyricValue = timedLyricsQuery.data; final lyricsMap = useMemoized( () => diff --git a/lib/pages/playlist/playlist.dart b/lib/pages/playlist/playlist.dart index 02f41e80..82f64dae 100644 --- a/lib/pages/playlist/playlist.dart +++ b/lib/pages/playlist/playlist.dart @@ -47,8 +47,8 @@ class PlaylistView extends HookConsumerWidget { final breakpoint = useBreakpoints(); - final meSnapshot = Queries.user.useMe(ref); - final tracksSnapshot = Queries.playlist.useTracksOfQuery(ref, playlist.id!); + final meSnapshot = useQueries.user.me(ref); + final tracksSnapshot = useQueries.playlist.tracksOfQuery(ref, playlist.id!); final isPlaylistPlaying = playlistNotifier.isPlayingPlaylist(tracksSnapshot.data ?? []); diff --git a/lib/pages/root/root_app.dart b/lib/pages/root/root_app.dart index ddcd2c14..b696a5f3 100644 --- a/lib/pages/root/root_app.dart +++ b/lib/pages/root/root_app.dart @@ -4,13 +4,11 @@ import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:go_router/go_router.dart'; import 'package:hooks_riverpod/hooks_riverpod.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/root/bottom_player.dart'; import 'package:spotube/components/root/sidebar.dart'; import 'package:spotube/components/root/spotube_navigation_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/provider/downloader_provider.dart'; diff --git a/lib/pages/search/search.dart b/lib/pages/search/search.dart index 1d5de6be..6cbcefc8 100644 --- a/lib/pages/search/search.dart +++ b/lib/pages/search/search.dart @@ -52,19 +52,19 @@ class SearchPage extends HookConsumerWidget { ); final searchTrack = useInfiniteQuery( - job: Queries.search.get(SearchType.track.key), + job: useQueries.search.get(SearchType.track.key), externalData: Tuple2("", spotify), ); final searchAlbum = useInfiniteQuery( - job: Queries.search.get(SearchType.album.key), + job: useQueries.search.get(SearchType.album.key), externalData: Tuple2("", spotify), ); final searchPlaylist = useInfiniteQuery( - job: Queries.search.get(SearchType.playlist.key), + job: useQueries.search.get(SearchType.playlist.key), externalData: Tuple2("", spotify), ); final searchArtist = useInfiniteQuery( - job: Queries.search.get(SearchType.artist.key), + job: useQueries.search.get(SearchType.artist.key), externalData: Tuple2("", spotify), ); diff --git a/lib/services/mutations/album.dart b/lib/services/mutations/album.dart index 3441ac66..920e11c2 100644 --- a/lib/services/mutations/album.dart +++ b/lib/services/mutations/album.dart @@ -3,7 +3,9 @@ import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:spotube/hooks/use_spotify_mutation.dart'; class AlbumMutations { - Mutation useToggleFavorite( + const AlbumMutations(); + + Mutation toggleFavorite( WidgetRef ref, String albumId, { List? refreshQueries, diff --git a/lib/services/mutations/mutations.dart b/lib/services/mutations/mutations.dart index b61f1209..28670486 100644 --- a/lib/services/mutations/mutations.dart +++ b/lib/services/mutations/mutations.dart @@ -2,8 +2,11 @@ import 'package:spotube/services/mutations/album.dart'; import 'package:spotube/services/mutations/playlist.dart'; import 'package:spotube/services/mutations/track.dart'; -abstract class Mutations { - static final playlist = PlaylistMutations(); - static final album = AlbumMutations(); - static final track = TrackMutations(); +class _UseMutations { + const _UseMutations._(); + final playlist = const PlaylistMutations(); + final album = const AlbumMutations(); + final track = const TrackMutations(); } + +const useMutations = _UseMutations._(); diff --git a/lib/services/mutations/playlist.dart b/lib/services/mutations/playlist.dart index 10b738cf..106f4cdc 100644 --- a/lib/services/mutations/playlist.dart +++ b/lib/services/mutations/playlist.dart @@ -3,7 +3,9 @@ import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:spotube/hooks/use_spotify_mutation.dart'; class PlaylistMutations { - Mutation useToggleFavorite( + const PlaylistMutations(); + + Mutation toggleFavorite( WidgetRef ref, String playlistId, { List? refreshQueries, @@ -23,7 +25,7 @@ class PlaylistMutations { ); } - Mutation useRemoveTrackOf( + Mutation removeTrackOf( WidgetRef ref, String playlistId, ) { diff --git a/lib/services/mutations/track.dart b/lib/services/mutations/track.dart index 06f3af02..2245c497 100644 --- a/lib/services/mutations/track.dart +++ b/lib/services/mutations/track.dart @@ -3,7 +3,9 @@ import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:spotube/hooks/use_spotify_mutation.dart'; class TrackMutations { - Mutation useToggleFavorite( + const TrackMutations(); + + Mutation toggleFavorite( WidgetRef ref, String trackId, { MutationOnMutationFn? onMutate, diff --git a/lib/services/queries/album.dart b/lib/services/queries/album.dart index 90a33f76..c7860ab4 100644 --- a/lib/services/queries/album.dart +++ b/lib/services/queries/album.dart @@ -7,7 +7,9 @@ import 'package:spotube/hooks/use_spotify_infinite_query.dart'; import 'package:spotube/hooks/use_spotify_query.dart'; class AlbumQueries { - Query, dynamic> useOfMineQuery(WidgetRef ref) { + const AlbumQueries(); + + Query, dynamic> ofMine(WidgetRef ref) { return useSpotifyQuery, dynamic>( "current-user-albums", (spotify) { @@ -17,7 +19,7 @@ class AlbumQueries { ); } - Query, dynamic> useTracksOfQuery( + Query, dynamic> tracksOf( WidgetRef ref, String albumId, ) { @@ -33,7 +35,7 @@ class AlbumQueries { ); } - Query useIsSavedForMeQuery( + Query isSavedForMe( WidgetRef ref, String album, ) { @@ -46,8 +48,7 @@ class AlbumQueries { ); } - InfiniteQuery, dynamic, int> useNewReleasesQuery( - WidgetRef ref) { + InfiniteQuery, dynamic, int> newReleases(WidgetRef ref) { return useSpotifyInfiniteQuery, dynamic, int>( "new-releases", (pageParam, spotify) async { diff --git a/lib/services/queries/artist.dart b/lib/services/queries/artist.dart index 3ef4d3b2..e183d702 100644 --- a/lib/services/queries/artist.dart +++ b/lib/services/queries/artist.dart @@ -6,7 +6,9 @@ import 'package:spotube/hooks/use_spotify_infinite_query.dart'; import 'package:spotube/hooks/use_spotify_query.dart'; class ArtistQueries { - Query useGetArtist( + const ArtistQueries(); + + Query get( WidgetRef ref, String artist, ) { @@ -17,7 +19,7 @@ class ArtistQueries { ); } - InfiniteQuery, dynamic, String> useFollowedByMeQuery( + InfiniteQuery, dynamic, String> followedByMe( WidgetRef ref) { return useSpotifyInfiniteQuery, dynamic, String>( "user-following-artists", @@ -35,7 +37,7 @@ class ArtistQueries { ); } - Query useDoIFollowQuery( + Query doIFollow( WidgetRef ref, String artist, ) { @@ -52,7 +54,7 @@ class ArtistQueries { ); } - Query, dynamic> useTopTracksOfQuery( + Query, dynamic> topTracksOf( WidgetRef ref, String artist, ) { @@ -65,7 +67,7 @@ class ArtistQueries { ); } - InfiniteQuery, dynamic, int> useAlbumsOfQuery( + InfiniteQuery, dynamic, int> albumsOf( WidgetRef ref, String artist, ) { @@ -86,7 +88,7 @@ class ArtistQueries { ); } - Query, dynamic> useRelatedArtistsOfQuery( + Query, dynamic> relatedArtistsOf( WidgetRef ref, String artist, ) { diff --git a/lib/services/queries/category.dart b/lib/services/queries/category.dart index c4bfacb1..2cfa6126 100644 --- a/lib/services/queries/category.dart +++ b/lib/services/queries/category.dart @@ -4,7 +4,9 @@ import 'package:spotify/spotify.dart'; import 'package:spotube/hooks/use_spotify_infinite_query.dart'; class CategoryQueries { - InfiniteQuery, dynamic, int> useList( + const CategoryQueries(); + + InfiniteQuery, dynamic, int> list( WidgetRef ref, String recommendationMarket) { return useSpotifyInfiniteQuery, dynamic, int>( "category-playlists", @@ -26,7 +28,7 @@ class CategoryQueries { ); } - InfiniteQuery, dynamic, int> usePlaylistsOf( + InfiniteQuery, dynamic, int> playlistsOf( WidgetRef ref, String category, ) { diff --git a/lib/services/queries/lyrics.dart b/lib/services/queries/lyrics.dart index 003646fb..17bca789 100644 --- a/lib/services/queries/lyrics.dart +++ b/lib/services/queries/lyrics.dart @@ -7,7 +7,9 @@ import 'package:spotube/models/spotube_track.dart'; import 'package:spotube/utils/service_utils.dart'; class LyricsQueries { - Query useStatic( + const LyricsQueries(); + + Query static( Track? track, String geniusAccessToken, ) { @@ -30,7 +32,7 @@ class LyricsQueries { ); } - Query useSynced( + Query synced( Track? track, ) { return useQuery( diff --git a/lib/services/queries/playlist.dart b/lib/services/queries/playlist.dart index ffecc137..e927779b 100644 --- a/lib/services/queries/playlist.dart +++ b/lib/services/queries/playlist.dart @@ -6,7 +6,9 @@ import 'package:spotube/hooks/use_spotify_infinite_query.dart'; import 'package:spotube/hooks/use_spotify_query.dart'; class PlaylistQueries { - Query useDoesUserFollowQuery( + const PlaylistQueries(); + + Query doesUserFollow( WidgetRef ref, String playlistId, String userId, @@ -21,7 +23,7 @@ class PlaylistQueries { ); } - Query, dynamic> useOfMineQuery(WidgetRef ref) { + Query, dynamic> ofMine(WidgetRef ref) { return useSpotifyQuery, dynamic>( "current-user-playlists", (spotify) { @@ -42,7 +44,7 @@ class PlaylistQueries { ); } - Query, dynamic> useTracksOfQuery( + Query, dynamic> tracksOfQuery( WidgetRef ref, String playlistId, ) { @@ -53,7 +55,7 @@ class PlaylistQueries { ); } - InfiniteQuery, dynamic, int> useFeaturedQuery( + InfiniteQuery, dynamic, int> featured( WidgetRef ref, ) { return useSpotifyInfiniteQuery, dynamic, int>( diff --git a/lib/services/queries/queries.dart b/lib/services/queries/queries.dart index 25ae9c81..d6f59f4f 100644 --- a/lib/services/queries/queries.dart +++ b/lib/services/queries/queries.dart @@ -6,12 +6,15 @@ import 'package:spotube/services/queries/playlist.dart'; import 'package:spotube/services/queries/search.dart'; import 'package:spotube/services/queries/user.dart'; -abstract class Queries { - static final album = AlbumQueries(); - static final artist = ArtistQueries(); - static final category = CategoryQueries(); - static final lyrics = LyricsQueries(); - static final playlist = PlaylistQueries(); - static final search = SearchQueries(); - static final user = UserQueries(); +class Queries { + const Queries._(); + final album = const AlbumQueries(); + final artist = const ArtistQueries(); + final category = const CategoryQueries(); + final lyrics = const LyricsQueries(); + final playlist = const PlaylistQueries(); + final search = const SearchQueries(); + final user = const UserQueries(); } + +const useQueries = Queries._(); diff --git a/lib/services/queries/search.dart b/lib/services/queries/search.dart index 21876ff0..4717a412 100644 --- a/lib/services/queries/search.dart +++ b/lib/services/queries/search.dart @@ -4,7 +4,8 @@ import 'package:spotify/spotify.dart'; import 'package:spotube/hooks/use_spotify_infinite_query.dart'; class SearchQueries { - InfiniteQuery, dynamic, int> useSearchQuery( + const SearchQueries(); + InfiniteQuery, dynamic, int> query( WidgetRef ref, String query, SearchType searchType, diff --git a/lib/services/queries/user.dart b/lib/services/queries/user.dart index 2449ed9e..6f94264d 100644 --- a/lib/services/queries/user.dart +++ b/lib/services/queries/user.dart @@ -5,7 +5,8 @@ import 'package:spotube/hooks/use_spotify_query.dart'; import 'package:spotube/utils/type_conversion_utils.dart'; class UserQueries { - Query useMe(WidgetRef ref) { + const UserQueries(); + Query me(WidgetRef ref) { return useSpotifyQuery( "current-user", (spotify) async {