Fix first launch mpv playback (#210)
This commit is contained in:
parent
1badecc20a
commit
d75ea94161
1 changed files with 27 additions and 40 deletions
|
@ -1,17 +1,17 @@
|
||||||
import console from 'console';
|
import console from 'console';
|
||||||
import { ipcMain } from 'electron';
|
import { ipcMain } from 'electron';
|
||||||
import { getMainWindow, getMpvInstance } from '../../../main';
|
import { getMpvInstance } from '../../../main';
|
||||||
import { PlayerData } from '/@/renderer/store';
|
import { PlayerData } from '/@/renderer/store';
|
||||||
|
|
||||||
declare module 'node-mpv';
|
declare module 'node-mpv';
|
||||||
|
|
||||||
function wait(timeout: number) {
|
// function wait(timeout: number) {
|
||||||
return new Promise((resolve) => {
|
// return new Promise((resolve) => {
|
||||||
setTimeout(() => {
|
// setTimeout(() => {
|
||||||
resolve('resolved');
|
// resolve('resolved');
|
||||||
}, timeout);
|
// }, timeout);
|
||||||
});
|
// });
|
||||||
}
|
// }
|
||||||
|
|
||||||
ipcMain.handle('player-is-running', async () => {
|
ipcMain.handle('player-is-running', async () => {
|
||||||
return getMpvInstance()?.isRunning();
|
return getMpvInstance()?.isRunning();
|
||||||
|
@ -101,6 +101,7 @@ ipcMain.on('player-set-queue', async (_event, data: PlayerData, pause?: boolean)
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
console.log('MPV failed to clear playlist', err);
|
console.log('MPV failed to clear playlist', err);
|
||||||
});
|
});
|
||||||
|
|
||||||
await getMpvInstance()
|
await getMpvInstance()
|
||||||
?.pause()
|
?.pause()
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
|
@ -109,42 +110,27 @@ ipcMain.on('player-set-queue', async (_event, data: PlayerData, pause?: boolean)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let complete = false;
|
|
||||||
let tryAttempts = 0;
|
|
||||||
|
|
||||||
while (!complete) {
|
|
||||||
if (tryAttempts > 3) {
|
|
||||||
getMainWindow()?.webContents.send('renderer-player-error', 'Failed to load song');
|
|
||||||
complete = true;
|
|
||||||
} else {
|
|
||||||
try {
|
try {
|
||||||
if (data.queue.current) {
|
if (data.queue.current) {
|
||||||
await getMpvInstance()
|
getMpvInstance()
|
||||||
?.load(data.queue.current.streamUrl, 'replace')
|
?.load(data.queue.current.streamUrl, 'replace')
|
||||||
|
.then(() => {
|
||||||
|
// eslint-disable-next-line promise/always-return
|
||||||
|
if (data.queue.next) {
|
||||||
|
getMpvInstance()?.load(data.queue.next.streamUrl, 'append');
|
||||||
|
}
|
||||||
|
})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
console.log('MPV failed to load song', err);
|
console.log('MPV failed to load song', err);
|
||||||
|
getMpvInstance()?.play();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.queue.next) {
|
|
||||||
await getMpvInstance()
|
|
||||||
?.load(data.queue.next.streamUrl, 'append')
|
|
||||||
.catch((err) => {
|
|
||||||
console.log('MPV failed to load next song', err);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
complete = true;
|
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
tryAttempts += 1;
|
|
||||||
await wait(500);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pause) {
|
if (pause) {
|
||||||
await getMpvInstance()?.pause();
|
getMpvInstance()?.pause();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -186,6 +172,7 @@ ipcMain.on('player-auto-next', async (_event, data: PlayerData) => {
|
||||||
?.playlistRemove(0)
|
?.playlistRemove(0)
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
console.log('MPV failed to remove song from playlist', err);
|
console.log('MPV failed to remove song from playlist', err);
|
||||||
|
getMpvInstance()?.pause();
|
||||||
});
|
});
|
||||||
|
|
||||||
if (data.queue.next) {
|
if (data.queue.next) {
|
||||||
|
|
Reference in a new issue