diff --git a/lib/components/shared/track_tile/track_options.dart b/lib/components/shared/track_tile/track_options.dart index 9a587be68..8405d6eaf 100644 --- a/lib/components/shared/track_tile/track_options.dart +++ b/lib/components/shared/track_tile/track_options.dart @@ -3,6 +3,7 @@ import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; +import 'package:go_router/go_router.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:spotify/spotify.dart'; import 'package:spotube/collections/spotube_icons.dart'; @@ -12,6 +13,7 @@ import 'package:spotube/components/shared/dialogs/playlist_add_track_dialog.dart import 'package:spotube/components/shared/dialogs/track_details_dialog.dart'; import 'package:spotube/components/shared/heart_button.dart'; import 'package:spotube/components/shared/image/universal_image.dart'; +import 'package:spotube/extensions/constrains.dart'; import 'package:spotube/extensions/context.dart'; import 'package:spotube/models/local_track.dart'; import 'package:spotube/provider/authentication_provider.dart'; @@ -22,6 +24,7 @@ import 'package:spotube/services/mutations/mutations.dart'; import 'package:spotube/utils/type_conversion_utils.dart'; enum TrackOptionValue { + album, share, addToPlaylist, addToQueue, @@ -79,9 +82,12 @@ class TrackOptions extends HookConsumerWidget { @override Widget build(BuildContext context, ref) { + final scaffoldMessenger = ScaffoldMessenger.of(context); + final mediaQuery = MediaQuery.of(context); + final router = GoRouter.of(context); + final playlist = ref.watch(ProxyPlaylistNotifier.provider); final playback = ref.watch(ProxyPlaylistNotifier.notifier); - final scaffoldMessenger = ScaffoldMessenger.of(context); final auth = ref.watch(AuthenticationNotifier.provider); ref.watch(downloadManagerProvider); final downloadManager = ref.watch(downloadManagerProvider.notifier); @@ -122,6 +128,12 @@ class TrackOptions extends HookConsumerWidget { final adaptivePopSheetList = AdaptivePopSheetList( onSelected: (value) async { switch (value) { + case TrackOptionValue.album: + await router.push( + '/album/${track.album!.id}', + extra: track.album!, + ); + break; case TrackOptionValue.delete: await File((track as LocalTrack).path).delete(); ref.refresh(localTracksProvider); @@ -233,6 +245,13 @@ class TrackOptions extends HookConsumerWidget { ) ], _ => [ + if (mediaQuery.smAndDown) + PopSheetEntry( + value: TrackOptionValue.album, + leading: const Icon(SpotubeIcons.album), + title: Text(context.l10n.go_to_album), + subtitle: Text(track.album!.name!), + ), if (!playlist.containsTrack(track)) ...[ PopSheetEntry( value: TrackOptionValue.addToQueue, diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 2ce5b8cae..5aded7d54 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -279,5 +279,6 @@ "password": "Password", "login": "Login", "login_with_your_lastfm": "Login with your Last.fm account", - "scrobble_to_lastfm": "Scrobble to Last.fm" + "scrobble_to_lastfm": "Scrobble to Last.fm", + "go_to_album": "Go to Album" } \ No newline at end of file diff --git a/untranslated_messages.json b/untranslated_messages.json index 9e26dfeeb..0130c162c 100644 --- a/untranslated_messages.json +++ b/untranslated_messages.json @@ -1 +1,61 @@ -{} \ No newline at end of file +{ + "ar": [ + "go_to_album" + ], + + "bn": [ + "go_to_album" + ], + + "ca": [ + "go_to_album" + ], + + "de": [ + "go_to_album" + ], + + "es": [ + "go_to_album" + ], + + "fa": [ + "go_to_album" + ], + + "fr": [ + "go_to_album" + ], + + "hi": [ + "go_to_album" + ], + + "ja": [ + "go_to_album" + ], + + "pl": [ + "go_to_album" + ], + + "pt": [ + "go_to_album" + ], + + "ru": [ + "go_to_album" + ], + + "tr": [ + "go_to_album" + ], + + "uk": [ + "go_to_album" + ], + + "zh": [ + "go_to_album" + ] +}