This commit is contained in:
G1org1o 2025-11-19 12:07:38 +00:00 committed by GitHub
commit ac3714f344
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 37 additions and 29 deletions

View File

@ -89,7 +89,7 @@ class TrackOptions extends HookConsumerWidget {
], ],
), ),
), ),
if (!isInQueue) ...[ if (!isInQueue)
ButtonTile( ButtonTile(
style: ButtonVariance.menu, style: ButtonVariance.menu,
onPressed: () async { onPressed: () async {
@ -102,21 +102,8 @@ class TrackOptions extends HookConsumerWidget {
}, },
leading: const Icon(SpotubeIcons.queueAdd), leading: const Icon(SpotubeIcons.queueAdd),
title: Text(context.l10n.add_to_queue), title: Text(context.l10n.add_to_queue),
), )
ButtonTile( else
style: ButtonVariance.menu,
onPressed: () async {
await trackOptionActions.action(
rootNavigatorKey.currentContext!,
TrackOptionValue.playNext,
playlistId,
);
onTapItem?.call();
},
leading: const Icon(SpotubeIcons.lightning),
title: Text(context.l10n.play_next),
),
] else
ButtonTile( ButtonTile(
style: ButtonVariance.menu, style: ButtonVariance.menu,
onPressed: () async { onPressed: () async {
@ -131,6 +118,19 @@ class TrackOptions extends HookConsumerWidget {
leading: const Icon(SpotubeIcons.queueRemove), leading: const Icon(SpotubeIcons.queueRemove),
title: Text(context.l10n.remove_from_queue), title: Text(context.l10n.remove_from_queue),
), ),
ButtonTile(
style: ButtonVariance.menu,
onPressed: () async {
await trackOptionActions.action(
rootNavigatorKey.currentContext!,
TrackOptionValue.playNext,
playlistId,
);
onTapItem?.call();
},
leading: const Icon(SpotubeIcons.lightning),
title: Text(context.l10n.play_next),
),
if (isAuthenticated && !isLocalTrack) if (isAuthenticated && !isLocalTrack)
ButtonTile( ButtonTile(
style: ButtonVariance.menu, style: ButtonVariance.menu,

View File

@ -228,24 +228,32 @@ class AudioPlayerNotifier extends Notifier<AudioPlayerState> {
final addableTracks = _blacklist final addableTracks = _blacklist
.filter(tracks) .filter(tracks)
.where(
(track) =>
allowDuplicates ||
!state.tracks.any((element) => _compareTracks(element, track)),
)
.toList(); .toList();
state = state.copyWith(
tracks: [...addableTracks, ...state.tracks],
);
for (int i = 0; i < addableTracks.length; i++) { for (int i = 0; i < addableTracks.length; i++) {
final track = addableTracks.elementAt(i); final track = addableTracks.elementAt(i);
await audioPlayer.addTrackAt( final (currentTrackIndex, _) = state.tracks
SpotubeMedia(track), .indexed
max(state.currentIndex, 0) + i + 1, .cast<(int, SpotubeTrackObject?)>()
); .firstWhere(
(record) {
final (idx, element) = record;
return _compareTracks(element!, track);
},
orElse: () => (-1, null)
);
final newIndex = max(state.currentIndex, 0) + i + 1;
if (allowDuplicates || currentTrackIndex < 0) {
await audioPlayer.addTrackAt(
SpotubeMedia(track),
newIndex
);
} else {
await audioPlayer.moveTrack(currentTrackIndex, newIndex);
}
} }
await _updatePlayerState( await _updatePlayerState(