mirror of
https://github.com/antebudimir/feishin.git
synced 2025-12-31 10:03:33 +00:00
use initial index for shuffling when availabe
This commit is contained in:
parent
039d008223
commit
055d9ac5c1
2 changed files with 22 additions and 8 deletions
|
|
@ -75,7 +75,9 @@ export const useHandlePlayQueueAdd = () => {
|
|||
if (!server) return toast.error({ message: 'No server selected', type: 'error' });
|
||||
const { byData, byItemType, initialIndex, initialSongId, playType, query } = options;
|
||||
let songs: null | QueueSong[] = null;
|
||||
let initialSongIndex = 0;
|
||||
// Allow this to be undefined for "play shuffled". If undefined, default to 0,
|
||||
// otherwise, choose the selected item in the queue
|
||||
let initialSongIndex: number | undefined;
|
||||
|
||||
if (byItemType) {
|
||||
let songList: SongListResponse | undefined;
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ import { Play, PlayerRepeat, PlayerShuffle, PlayerStatus } from '/@/shared/types
|
|||
export interface PlayerSlice extends PlayerState {
|
||||
actions: {
|
||||
addToQueue: (args: {
|
||||
initialIndex: number;
|
||||
initialIndex?: number;
|
||||
playType: Play;
|
||||
songs: QueueSong[];
|
||||
}) => PlayerData;
|
||||
|
|
@ -92,19 +92,30 @@ export const usePlayerStore = createWithEqualityFn<PlayerSlice>()(
|
|||
uniqueId: nanoid(),
|
||||
}));
|
||||
|
||||
// If the queue is empty, next/last should behave the same as now
|
||||
if (playType === Play.SHUFFLE) {
|
||||
const songs = shuffle(songsToAddToQueue);
|
||||
const initialSong = songs[0];
|
||||
let shuffled: QueueSong[];
|
||||
|
||||
if (
|
||||
initialIndex !== undefined &&
|
||||
initialIndex < songsToAddToQueue.length
|
||||
) {
|
||||
const removed = songsToAddToQueue.splice(initialIndex, 1);
|
||||
const restShuffled = shuffle(songsToAddToQueue);
|
||||
shuffled = removed.concat(restShuffled);
|
||||
} else {
|
||||
shuffled = shuffle(songsToAddToQueue);
|
||||
}
|
||||
|
||||
const initialSong = shuffled[0];
|
||||
|
||||
if (get().shuffle === PlayerShuffle.TRACK) {
|
||||
const shuffledIds = [
|
||||
initialSong.uniqueId,
|
||||
...shuffle(songs.slice(1).map((song) => song.uniqueId)),
|
||||
...shuffle(shuffled.slice(1).map((song) => song.uniqueId)),
|
||||
];
|
||||
|
||||
set((state) => {
|
||||
state.queue.default = songs;
|
||||
state.queue.default = shuffled;
|
||||
state.queue.shuffled = shuffledIds;
|
||||
state.current.time = 0;
|
||||
state.current.player = 1;
|
||||
|
|
@ -114,7 +125,7 @@ export const usePlayerStore = createWithEqualityFn<PlayerSlice>()(
|
|||
});
|
||||
} else {
|
||||
set((state) => {
|
||||
state.queue.default = songs;
|
||||
state.queue.default = shuffled;
|
||||
state.queue.shuffled = [];
|
||||
state.current.time = 0;
|
||||
state.current.player = 1;
|
||||
|
|
@ -131,6 +142,7 @@ export const usePlayerStore = createWithEqualityFn<PlayerSlice>()(
|
|||
const queue = get().queue.default;
|
||||
const { shuffledIndex } = get().current;
|
||||
|
||||
// If the queue is empty, next/last should behave the same as now
|
||||
if (playType === Play.NOW || queue.length === 0) {
|
||||
const index = initialIndex || 0;
|
||||
if (get().shuffle === PlayerShuffle.TRACK) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue