fix: "Add () to Playlist" option not showing in favorited playlists #904

This commit is contained in:
Kingkor Roy Tirtho 2023-11-27 20:38:50 +06:00
parent 96e0e8640d
commit 96021e1a49
8 changed files with 35 additions and 34 deletions

View File

@ -11,9 +11,12 @@ import 'package:spotube/services/queries/queries.dart';
import 'package:spotube/utils/type_conversion_utils.dart'; import 'package:spotube/utils/type_conversion_utils.dart';
class PlaylistAddTrackDialog extends HookConsumerWidget { class PlaylistAddTrackDialog extends HookConsumerWidget {
/// The id of the playlist this dialog was opened from
final String? openFromPlaylist;
final List<Track> tracks; final List<Track> tracks;
const PlaylistAddTrackDialog({ const PlaylistAddTrackDialog({
required this.tracks, required this.tracks,
required this.openFromPlaylist,
Key? key, Key? key,
}) : super(key: key); }) : super(key: key);
@ -30,11 +33,12 @@ class PlaylistAddTrackDialog extends HookConsumerWidget {
?.where( ?.where(
(playlist) => (playlist) =>
playlist.owner?.id != null && playlist.owner?.id != null &&
playlist.owner!.id == me.data?.id, playlist.owner!.id == me.data?.id &&
playlist.id != openFromPlaylist,
) )
.toList() ?? .toList() ??
[], [],
[userPlaylists.data, me.data?.id], [userPlaylists.data, me.data?.id, openFromPlaylist],
); );
final playlistsCheck = useState(<String, bool>{}); final playlistsCheck = useState(<String, bool>{});

View File

@ -64,11 +64,15 @@ class TrackOptions extends HookConsumerWidget {
}); });
} }
void actionAddToPlaylist(BuildContext context, Track track) { void actionAddToPlaylist(
BuildContext context,
Track track,
) {
showDialog( showDialog(
context: context, context: context,
builder: (context) => PlaylistAddTrackDialog( builder: (context) => PlaylistAddTrackDialog(
tracks: [track], tracks: [track],
openFromPlaylist: playlistId,
), ),
); );
} }

View File

@ -24,6 +24,7 @@ class TrackViewBodySection extends HookConsumerWidget {
final playlist = ref.watch(ProxyPlaylistNotifier.provider); final playlist = ref.watch(ProxyPlaylistNotifier.provider);
final playlistNotifier = ref.watch(ProxyPlaylistNotifier.notifier); final playlistNotifier = ref.watch(ProxyPlaylistNotifier.notifier);
final props = InheritedTrackView.of(context); final props = InheritedTrackView.of(context);
final trackViewState = ref.watch(trackViewProvider(props.tracks));
final searchController = useTextEditingController(); final searchController = useTextEditingController();
final searchFocus = useFocusNode(); final searchFocus = useFocusNode();
@ -38,8 +39,6 @@ class TrackViewBodySection extends HookConsumerWidget {
return props.tracks.where((e) => trackIds.remove(e.id)).toList(); return props.tracks.where((e) => trackIds.remove(e.id)).toList();
}, [props.tracks]); }, [props.tracks]);
final trackViewState = ref.watch(trackViewProvider(uniqTracks));
final tracks = useMemoized(() { final tracks = useMemoized(() {
List<Track> filteredTracks; List<Track> filteredTracks;
if (searchQuery.isEmpty) { if (searchQuery.isEmpty) {

View File

@ -38,20 +38,16 @@ class TrackViewBodyHeaders extends HookConsumerWidget {
), ),
); );
}, },
child: trackViewState.isSelecting child: Checkbox(
? Checkbox( value: trackViewState.hasSelectedAll,
value: trackViewState.hasSelectedAll, onChanged: (checked) {
onChanged: (checked) { if (checked == true) {
if (checked == true) { trackViewState.selectAll();
trackViewState.selectAll(); } else {
} else { trackViewState.deselectAll();
trackViewState.deselectAll(); }
} },
}, ),
)
: constrains.mdAndUp
? const SizedBox(width: 32)
: const SizedBox(width: 16),
), ),
Expanded( Expanded(
flex: 7, flex: 7,

View File

@ -11,7 +11,6 @@ import 'package:spotube/provider/download_manager_provider.dart';
import 'package:spotube/provider/proxy_playlist/proxy_playlist_provider.dart'; import 'package:spotube/provider/proxy_playlist/proxy_playlist_provider.dart';
import 'package:spotube/provider/user_preferences/user_preferences_provider.dart'; import 'package:spotube/provider/user_preferences/user_preferences_provider.dart';
import 'package:spotube/provider/user_preferences/user_preferences_state.dart'; import 'package:spotube/provider/user_preferences/user_preferences_state.dart';
import 'package:spotube/services/queries/queries.dart';
class TrackViewBodyOptions extends HookConsumerWidget { class TrackViewBodyOptions extends HookConsumerWidget {
const TrackViewBodyOptions({Key? key}) : super(key: key); const TrackViewBodyOptions({Key? key}) : super(key: key);
@ -30,11 +29,6 @@ class TrackViewBodyOptions extends HookConsumerWidget {
final trackViewState = ref.watch(trackViewProvider(props.tracks)); final trackViewState = ref.watch(trackViewProvider(props.tracks));
final selectedTracks = trackViewState.selectedTracks; final selectedTracks = trackViewState.selectedTracks;
final userPlaylists = useQueries.playlist.ofMineAll(ref);
final isUserPlaylist =
userPlaylists.data?.any((e) => e.id == props.collectionId) ?? false;
return AdaptivePopSheetList( return AdaptivePopSheetList(
tooltip: context.l10n.more_actions, tooltip: context.l10n.more_actions,
headings: [ headings: [
@ -66,6 +60,7 @@ class TrackViewBodyOptions extends HookConsumerWidget {
context: context, context: context,
builder: (context) { builder: (context) {
return PlaylistAddTrackDialog( return PlaylistAddTrackDialog(
openFromPlaylist: props.collectionId,
tracks: selectedTracks.toList(), tracks: selectedTracks.toList(),
); );
}, },
@ -100,15 +95,14 @@ class TrackViewBodyOptions extends HookConsumerWidget {
context.l10n.download_count(selectedTracks.length), context.l10n.download_count(selectedTracks.length),
), ),
), ),
if (!isUserPlaylist) PopSheetEntry(
PopSheetEntry( value: "add-to-playlist",
value: "add-to-playlist", leading: const Icon(SpotubeIcons.playlistAdd),
leading: const Icon(SpotubeIcons.playlistAdd), enabled: selectedTracks.isNotEmpty,
enabled: selectedTracks.isNotEmpty, title: Text(
title: Text( context.l10n.add_count_to_playlist(selectedTracks.length),
context.l10n.add_count_to_playlist(selectedTracks.length),
),
), ),
),
PopSheetEntry( PopSheetEntry(
enabled: selectedTracks.isNotEmpty, enabled: selectedTracks.isNotEmpty,
value: "add-to-queue", value: "add-to-queue",

View File

@ -201,7 +201,7 @@ class SpotubeState extends ConsumerState<Spotube> {
Brightness.dark, Brightness.dark,
isAmoledTheme, isAmoledTheme,
), ),
[paletteColor, accentMaterialColor, isAmoledTheme],
); );
return MaterialApp.router( return MaterialApp.router(

View File

@ -163,6 +163,7 @@ class PlaylistGenerateResultPage extends HookConsumerWidget {
context: context, context: context,
builder: (context) => builder: (context) =>
PlaylistAddTrackDialog( PlaylistAddTrackDialog(
openFromPlaylist: null,
tracks: selectedTracks.value tracks: selectedTracks.value
.map( .map(
(e) => generatedPlaylist.data! (e) => generatedPlaylist.data!

View File

@ -71,5 +71,8 @@ ThemeData theme(Color seed, Brightness brightness, bool isAmoled) {
scrollbarTheme: const ScrollbarThemeData( scrollbarTheme: const ScrollbarThemeData(
thickness: MaterialStatePropertyAll(14), thickness: MaterialStatePropertyAll(14),
), ),
checkboxTheme: CheckboxThemeData(
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)),
),
); );
} }