mirror of
https://github.com/jeffvli/feishin.git
synced 2026-05-10 04:30:25 +02:00
fix mpv autoNext and next song replacement behavior (part 2)
This commit is contained in:
@@ -371,8 +371,14 @@ ipcMain.on('player-set-queue', async (_event, current?: string, next?: string, p
|
|||||||
// Replaces the queue in position 1 to the given data
|
// Replaces the queue in position 1 to the given data
|
||||||
ipcMain.on('player-set-queue-next', async (_event, url?: string) => {
|
ipcMain.on('player-set-queue-next', async (_event, url?: string) => {
|
||||||
try {
|
try {
|
||||||
|
const size = await getMpvInstance()?.getPlaylistSize();
|
||||||
|
|
||||||
|
if (size && size > 1) {
|
||||||
|
await getMpvInstance()?.playlistRemove(1);
|
||||||
|
}
|
||||||
|
|
||||||
if (url) {
|
if (url) {
|
||||||
await getMpvInstance()?.load(url, 'append');
|
getMpvInstance()?.load(url, 'append');
|
||||||
}
|
}
|
||||||
} catch (err: any | NodeMpvError) {
|
} catch (err: any | NodeMpvError) {
|
||||||
mpvLog({ action: `Failed to set play queue` }, err);
|
mpvLog({ action: `Failed to set play queue` }, err);
|
||||||
|
|||||||
@@ -2383,12 +2383,7 @@ export const subscribeCurrentTrack = (
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const subscribeNextSong = (
|
export const subscribeNextSongInsertion = (onChange: (song: QueueSong | undefined) => void) => {
|
||||||
onChange: (
|
|
||||||
properties: { index: number; song: QueueSong | undefined },
|
|
||||||
prev: { index: number; song: QueueSong | undefined },
|
|
||||||
) => void,
|
|
||||||
) => {
|
|
||||||
return usePlayerStoreBase.subscribe(
|
return usePlayerStoreBase.subscribe(
|
||||||
(state) => {
|
(state) => {
|
||||||
const queue = state.getQueue();
|
const queue = state.getQueue();
|
||||||
@@ -2417,21 +2412,25 @@ export const subscribeNextSong = (
|
|||||||
nextSong = calculateNextSong(queueIndex, queue.items, repeat);
|
nextSong = calculateNextSong(queueIndex, queue.items, repeat);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Calculate the index for the next song
|
return { index: queueIndex, song: nextSong };
|
||||||
let nextIndex: number | undefined;
|
|
||||||
if (nextSong) {
|
|
||||||
nextIndex = queue.items.findIndex((item) => item._uniqueId === nextSong?._uniqueId);
|
|
||||||
}
|
|
||||||
|
|
||||||
return { index: nextIndex ?? -1, song: nextSong };
|
|
||||||
},
|
},
|
||||||
(nextSong, prevNextSong) => {
|
(current, prev) => {
|
||||||
onChange(nextSong, prevNextSong);
|
// Only trigger if:
|
||||||
|
// 1. We have a previous value (not the first call)
|
||||||
|
// 2. Index hasn't changed (not a natural advance)
|
||||||
|
// 3. Next song has changed (song was inserted)
|
||||||
|
if (
|
||||||
|
prev &&
|
||||||
|
current.index === prev.index &&
|
||||||
|
current.song?._uniqueId !== prev.song?._uniqueId
|
||||||
|
) {
|
||||||
|
// Index stayed the same but next song changed = insertion at next position
|
||||||
|
onChange(current.song);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
equalityFn: (a, b) => {
|
// Always allow the subscription to fire so we can check conditions in the callback
|
||||||
return a.song?._uniqueId === b.song?._uniqueId;
|
equalityFn: () => false,
|
||||||
},
|
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user