Skip to content

Commit

Permalink
refactor: query and mutation jobs as separate abstract class
Browse files Browse the repository at this point in the history
  • Loading branch information
KRTirtho committed Dec 8, 2022
1 parent 7c25e1c commit 42d284f
Show file tree
Hide file tree
Showing 33 changed files with 437 additions and 363 deletions.
4 changes: 2 additions & 2 deletions lib/collections/routes.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import 'package:flutter/widgets.dart';
import 'package:go_router/go_router.dart';
import 'package:spotify/spotify.dart' hide Search;
import 'package:spotube/utils/platform.dart';
import 'package:spotube/components/shared/spotube_page_route.dart';
import 'package:spotube/pages/album/album.dart';
import 'package:spotube/pages/artist/artist.dart';
import 'package:spotube/pages/genre/genres.dart';
Expand All @@ -12,9 +14,7 @@ import 'package:spotube/pages/player/player.dart';
import 'package:spotube/pages/playlist/playlist.dart';
import 'package:spotube/pages/root/root_app.dart';
import 'package:spotube/pages/search/search.dart';
import 'package:spotube/components/shared/spotube_page_route.dart';
import 'package:spotube/pages/settings/settings.dart';
import 'package:spotube/utils/platform.dart';
import 'package:spotube/pages/mobile_login/mobile_login.dart';

final rootNavigatorKey = GlobalKey<NavigatorState>();
Expand Down
4 changes: 2 additions & 2 deletions lib/components/artist/artist_album_list.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import 'package:spotube/components/shared/shimmers/shimmer_playbutton_card.dart'
import 'package:spotube/components/shared/waypoint.dart';
import 'package:spotube/models/logger.dart';
import 'package:spotube/provider/spotify_provider.dart';
import 'package:spotube/provider/SpotifyRequests.dart';
import 'package:spotube/services/queries/queries.dart';

class ArtistAlbumList extends HookConsumerWidget {
final String artistId;
Expand All @@ -24,7 +24,7 @@ class ArtistAlbumList extends HookConsumerWidget {
Widget build(BuildContext context, ref) {
final scrollController = useScrollController();
final albumsQuery = useInfiniteQuery(
job: artistAlbumsQueryJob(artistId),
job: Queries.artist.albumsOf(artistId),
externalData: ref.watch(spotifyProvider),
);

Expand Down
4 changes: 2 additions & 2 deletions lib/components/genre/category_card.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import 'package:spotube/components/shared/waypoint.dart';
import 'package:spotube/components/playlist/playlist_card.dart';
import 'package:spotube/models/logger.dart';
import 'package:spotube/provider/spotify_provider.dart';
import 'package:spotube/provider/SpotifyRequests.dart';
import 'package:spotube/services/queries/queries.dart';

class CategoryCard extends HookConsumerWidget {
final Category category;
Expand All @@ -28,7 +28,7 @@ class CategoryCard extends HookConsumerWidget {
final scrollController = useScrollController();
final spotify = ref.watch(spotifyProvider);
final playlistQuery = useInfiniteQuery(
job: categoryPlaylistsQueryJob(category.id!),
job: Queries.category.playlistsOf(category.id!),
externalData: spotify,
);
final hasNextPage = playlistQuery.pages.isEmpty
Expand Down
5 changes: 3 additions & 2 deletions lib/components/library/user_albums.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ import 'package:spotube/components/shared/shimmers/shimmer_playbutton_card.dart'
import 'package:spotube/components/shared/fallbacks/anonymous_fallback.dart';
import 'package:spotube/provider/auth_provider.dart';
import 'package:spotube/provider/spotify_provider.dart';
import 'package:spotube/provider/SpotifyRequests.dart';
import 'package:spotube/services/queries/queries.dart';

import 'package:spotube/utils/type_conversion_utils.dart';

class UserAlbums extends HookConsumerWidget {
Expand All @@ -20,7 +21,7 @@ class UserAlbums extends HookConsumerWidget {
return const AnonymousFallback();
}
final albumsQuery = useQuery(
job: currentUserAlbumsQueryJob,
job: Queries.album.ofMine,
externalData: ref.watch(spotifyProvider),
);

Expand Down
4 changes: 2 additions & 2 deletions lib/components/library/user_artists.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import 'package:spotube/components/shared/waypoint.dart';
import 'package:spotube/components/artist/artist_card.dart';
import 'package:spotube/provider/auth_provider.dart';
import 'package:spotube/provider/spotify_provider.dart';
import 'package:spotube/provider/SpotifyRequests.dart';
import 'package:spotube/services/queries/queries.dart';

class UserArtists extends HookConsumerWidget {
const UserArtists({Key? key}) : super(key: key);
Expand All @@ -21,7 +21,7 @@ class UserArtists extends HookConsumerWidget {
return const AnonymousFallback();
}
final artistQuery = useInfiniteQuery(
job: currentUserFollowingArtistsQueryJob,
job: Queries.artist.followedByMe,
externalData: ref.watch(spotifyProvider),
);

Expand Down
4 changes: 2 additions & 2 deletions lib/components/library/user_playlists.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import 'package:spotube/components/playlist/playlist_card.dart';
import 'package:spotube/components/playlist/playlist_create_dialog.dart';
import 'package:spotube/provider/auth_provider.dart';
import 'package:spotube/provider/spotify_provider.dart';
import 'package:spotube/provider/SpotifyRequests.dart';
import 'package:spotube/services/queries/queries.dart';

class UserPlaylists extends HookConsumerWidget {
const UserPlaylists({Key? key}) : super(key: key);
Expand All @@ -22,7 +22,7 @@ class UserPlaylists extends HookConsumerWidget {
}

final playlistsQuery = useQuery(
job: currentUserPlaylistsQueryJob,
job: Queries.playlist.ofMine,
externalData: ref.watch(spotifyProvider),
);
Image image = Image();
Expand Down
4 changes: 2 additions & 2 deletions lib/components/playlist/playlist_create_dialog.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:platform_ui/platform_ui.dart';
import 'package:spotube/components/root/sidebar.dart';
import 'package:spotube/provider/spotify_provider.dart';
import 'package:spotube/provider/SpotifyRequests.dart';
import 'package:spotube/services/queries/queries.dart';

class PlaylistCreateDialog extends HookConsumerWidget {
const PlaylistCreateDialog({Key? key}) : super(key: key);
Expand Down Expand Up @@ -44,7 +44,7 @@ class PlaylistCreateDialog extends HookConsumerWidget {
)
.then((_) {
QueryBowl.of(context).refetchQueries([
currentUserPlaylistsQueryJob.queryKey,
Queries.playlist.ofMine.queryKey,
]);
Navigator.pop(context);
});
Expand Down
10 changes: 5 additions & 5 deletions lib/components/root/bottom_player.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import 'package:flutter/gestures.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:macos_ui/macos_ui.dart';
import 'package:fluent_ui/fluent_ui.dart' as FluentUI;
import 'package:fluent_ui/fluent_ui.dart' as fluent_ui;
import 'package:platform_ui/platform_ui.dart';
import 'package:spotube/components/player/player_actions.dart';
import 'package:spotube/components/player/player_overlay.dart';
Expand All @@ -17,10 +17,10 @@ import 'package:flutter/material.dart';
import 'package:spotube/provider/user_preferences_provider.dart';
import 'package:spotube/utils/type_conversion_utils.dart';

class Player extends HookConsumerWidget {
Player({Key? key}) : super(key: key);
class BottomPlayer extends HookConsumerWidget {
BottomPlayer({Key? key}) : super(key: key);

final logger = getLogger(Player);
final logger = getLogger(BottomPlayer);
@override
Widget build(BuildContext context, ref) {
Playback playback = ref.watch(playbackProvider);
Expand Down Expand Up @@ -59,7 +59,7 @@ class Player extends HookConsumerWidget {
? Colors.grey[800]
: Colors.blueGrey[50],
linux: Theme.of(context).backgroundColor,
windows: FluentUI.FluentTheme.maybeOf(context)?.micaBackgroundColor,
windows: fluent_ui.FluentTheme.maybeOf(context)?.micaBackgroundColor,
),
);

Expand Down
11 changes: 6 additions & 5 deletions lib/components/root/sidebar.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,12 @@ import 'package:spotube/hooks/use_breakpoints.dart';
import 'package:spotube/provider/auth_provider.dart';
import 'package:spotube/provider/downloader_provider.dart';
import 'package:spotube/provider/spotify_provider.dart';
import 'package:spotube/provider/SpotifyRequests.dart';

import 'package:spotube/provider/user_preferences_provider.dart';
import 'package:spotube/services/queries/queries.dart';
import 'package:spotube/utils/platform.dart';
import 'package:spotube/utils/type_conversion_utils.dart';
import 'package:fluent_ui/fluent_ui.dart' as FluentUI;
import 'package:fluent_ui/fluent_ui.dart' as fluent_ui;

final sidebarExtendedStateProvider = StateProvider<bool?>((ref) => null);

Expand Down Expand Up @@ -153,8 +154,8 @@ class Sidebar extends HookConsumerWidget {
],
),
windowsFooterItems: [
FluentUI.PaneItemAction(
icon: const FluentUI.Icon(FluentUI.FluentIcons.settings),
fluent_ui.PaneItemAction(
icon: const fluent_ui.Icon(fluent_ui.FluentIcons.settings),
onTap: () => goToSettings(context),
),
],
Expand All @@ -180,7 +181,7 @@ class SidebarFooter extends HookConsumerWidget {
child: HookBuilder(
builder: (context) {
final me = useQuery(
job: currentUserQueryJob,
job: Queries.user.me,
externalData: ref.watch(spotifyProvider),
);
final data = me.data;
Expand Down
6 changes: 3 additions & 3 deletions lib/components/shared/dialogs/playlist_add_track_dialog.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:platform_ui/platform_ui.dart';
import 'package:spotify/spotify.dart';
import 'package:spotube/provider/spotify_provider.dart';
import 'package:spotube/provider/SpotifyRequests.dart';
import 'package:spotube/services/queries/queries.dart';

class PlaylistAddTrackDialog extends HookConsumerWidget {
final List<Track> tracks;
Expand All @@ -18,11 +18,11 @@ class PlaylistAddTrackDialog extends HookConsumerWidget {
Widget build(BuildContext context, ref) {
final spotify = ref.watch(spotifyProvider);
final userPlaylists = useQuery(
job: currentUserPlaylistsQueryJob,
job: Queries.playlist.ofMine,
externalData: spotify,
);
final me = useQuery(
job: currentUserQueryJob,
job: Queries.user.me,
externalData: spotify,
);
final filteredPlaylists = userPlaylists.data?.where(
Expand Down
37 changes: 21 additions & 16 deletions lib/components/shared/heart_button.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ import 'package:spotify/spotify.dart';
import 'package:spotube/hooks/use_palette_color.dart';
import 'package:spotube/provider/auth_provider.dart';
import 'package:spotube/provider/spotify_provider.dart';
import 'package:spotube/provider/SpotifyRequests.dart';
import 'package:spotube/services/mutations/mutations.dart';
import 'package:spotube/services/queries/queries.dart';

import 'package:spotube/utils/type_conversion_utils.dart';
import 'package:tuple/tuple.dart';

Expand Down Expand Up @@ -49,11 +51,11 @@ class HeartButton extends ConsumerWidget {

Tuple3<bool, Mutation<bool, Tuple2<SpotifyApi, bool>>, Query<User, SpotifyApi>>
useTrackToggleLike(Track track, WidgetRef ref) {
final me = useQuery(
job: currentUserQueryJob, externalData: ref.watch(spotifyProvider));
final me =
useQuery(job: Queries.user.me, externalData: ref.watch(spotifyProvider));

final savedTracks = useQuery(
job: playlistTracksQueryJob("user-liked-tracks"),
job: Queries.playlist.tracksOf("user-liked-tracks"),
externalData: ref.watch(spotifyProvider),
);

Expand All @@ -63,7 +65,7 @@ Tuple3<bool, Mutation<bool, Tuple2<SpotifyApi, bool>>, Query<User, SpotifyApi>>
final mounted = useIsMounted();

final toggleTrackLike = useMutation<bool, Tuple2<SpotifyApi, bool>>(
job: toggleFavoriteTrackMutationJob(track.id!),
job: Mutations.track.toggleFavorite(track.id!),
onMutate: (variable) {
savedTracks.setQueryData(
(oldData) {
Expand Down Expand Up @@ -117,7 +119,7 @@ class TrackHeartButton extends HookConsumerWidget {
@override
Widget build(BuildContext context, ref) {
final savedTracks = useQuery(
job: playlistTracksQueryJob("user-liked-tracks"),
job: Queries.playlist.tracksOf("user-liked-tracks"),
externalData: ref.watch(spotifyProvider),
);
final toggler = useTrackToggleLike(track, ref);
Expand Down Expand Up @@ -150,22 +152,23 @@ class PlaylistHeartButton extends HookConsumerWidget {
@override
Widget build(BuildContext context, ref) {
final me = useQuery(
job: currentUserQueryJob,
job: Queries.user.me,
externalData: ref.watch(spotifyProvider),
);

final job = playlistIsFollowedQueryJob("${playlist.id}:${me.data?.id}");
final job =
Queries.playlist.doesUserFollow("${playlist.id}:${me.data?.id}");
final isLikedQuery = useQuery(
job: job,
externalData: ref.watch(spotifyProvider),
);

final togglePlaylistLike = useMutation<bool, Tuple2<SpotifyApi, bool>>(
job: toggleFavoritePlaylistMutationJob(playlist.id!),
job: Mutations.playlist.toggleFavorite(playlist.id!),
onData: (payload, variables, queryContext) {
isLikedQuery.refetch();
QueryBowl.of(context)
.getQuery(currentUserPlaylistsQueryJob.queryKey)
.getQuery(Queries.playlist.ofMine.queryKey)
?.refetch();
},
);
Expand All @@ -182,8 +185,9 @@ class PlaylistHeartButton extends HookConsumerWidget {
titleImage,
).dominantColor;

if (me.isLoading || !me.hasData)
if (me.isLoading || !me.hasData) {
return const PlatformCircularProgressIndicator();
}

return HeartButton(
isLiked: isLikedQuery.data ?? false,
Expand Down Expand Up @@ -217,28 +221,29 @@ class AlbumHeartButton extends HookConsumerWidget {
Widget build(BuildContext context, ref) {
final spotify = ref.watch(spotifyProvider);
final me = useQuery(
job: currentUserQueryJob,
job: Queries.user.me,
externalData: spotify,
);

final albumIsSaved = useQuery(
job: albumIsSavedForCurrentUserQueryJob(album.id!),
job: Queries.album.isSavedForMe(album.id!),
externalData: spotify,
);
final isLiked = albumIsSaved.data ?? false;

final toggleAlbumLike = useMutation<bool, Tuple2<SpotifyApi, bool>>(
job: toggleFavoriteAlbumMutationJob(album.id!),
job: Mutations.album.toggleFavorite(album.id!),
onData: (payload, variables, queryContext) {
albumIsSaved.refetch();
QueryBowl.of(context)
.getQuery(currentUserAlbumsQueryJob.queryKey)
.getQuery(Queries.album.ofMine.queryKey)
?.refetch();
},
);

if (me.isLoading || !me.hasData)
if (me.isLoading || !me.hasData) {
return const PlatformCircularProgressIndicator();
}

return HeartButton(
isLiked: isLiked,
Expand Down
8 changes: 5 additions & 3 deletions lib/components/shared/track_table/track_tile.dart
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@ import 'package:spotube/models/logger.dart';
import 'package:spotube/provider/auth_provider.dart';
import 'package:spotube/provider/playback_provider.dart';
import 'package:spotube/provider/spotify_provider.dart';
import 'package:spotube/provider/SpotifyRequests.dart';
import 'package:spotube/services/mutations/mutations.dart';
import 'package:spotube/services/queries/queries.dart';

import 'package:spotube/utils/type_conversion_utils.dart';
import 'package:tuple/tuple.dart';

Expand Down Expand Up @@ -63,12 +65,12 @@ class TrackTile extends HookConsumerWidget {
final spotify = ref.watch(spotifyProvider);
final removingTrack = useState<String?>(null);
final removeTrack = useMutation<bool, Tuple2<SpotifyApi, String>>(
job: removeTrackFromPlaylistMutationJob(playlistId ?? ""),
job: Mutations.playlist.removeTrackOf(playlistId ?? ""),
onData: (payload, variables, ctx) {
if (playlistId == null || !payload) return;
QueryBowl.of(context)
.getQuery(
playlistTracksQueryJob(playlistId!).queryKey,
Queries.playlist.tracksOf(playlistId!).queryKey,
)
?.refetch();
},
Expand Down
4 changes: 2 additions & 2 deletions lib/pages/album/album.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@ import 'package:spotube/components/shared/heart_button.dart';
import 'package:spotube/components/shared/track_table/track_collection_view.dart';
import 'package:spotube/components/shared/track_table/tracks_table_view.dart';
import 'package:spotube/hooks/use_breakpoints.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/models/current_playlist.dart';
import 'package:spotube/provider/playback_provider.dart';
import 'package:spotube/provider/spotify_provider.dart';
import 'package:spotube/provider/SpotifyRequests.dart';

class AlbumPage extends HookConsumerWidget {
final AlbumSimple album;
Expand Down Expand Up @@ -56,7 +56,7 @@ class AlbumPage extends HookConsumerWidget {
final SpotifyApi spotify = ref.watch(spotifyProvider);

final tracksSnapshot = useQuery(
job: albumTracksQueryJob(album.id!),
job: Queries.album.tracksOf(album.id!),
externalData: spotify,
);

Expand Down
Loading

0 comments on commit 42d284f

Please sign in to comment.