feat(api-server): add endpoint to get shuffle state (#2792)

This commit is contained in:
Franz DC
2025-01-18 13:23:17 +08:00
committed by GitHub
parent 3339f997e3
commit 368b251e3f
6 changed files with 102 additions and 6 deletions

View File

@ -62,6 +62,9 @@ export default (win: BrowserWindow) => {
win.webContents.send('ytmd:seek-by', seconds);
}
},
requestShuffleInformation: () => {
win.webContents.send('ytmd:get-shuffle');
},
shuffle: () => win.webContents.send('ytmd:shuffle'),
switchRepeat: (n: ArgsType<number> = 1) => {
const repeat = parseNumberFromArgsType(n);

View File

@ -87,6 +87,28 @@ export const setupVolumeChangedListener = singleton((api: YoutubePlayer) => {
window.ipcRenderer.send('ytmd:volume-changed', api.getVolume());
});
export const setupShuffleChangedListener = singleton(() => {
const playerBar = document.querySelector('ytmusic-player-bar');
if (!playerBar) {
window.ipcRenderer.send('ytmd:shuffle-changed-supported', false);
return;
}
const observer = new MutationObserver(() => {
window.ipcRenderer.send(
'ytmd:shuffle-changed',
(playerBar?.attributes.getNamedItem('shuffle-on') ?? null) !== null,
);
});
observer.observe(playerBar, {
attributes: true,
childList: false,
subtree: false,
});
});
export const setupFullScreenChangedListener = singleton(() => {
const playerBar = document.querySelector('ytmusic-player-bar');
@ -139,6 +161,10 @@ export default (api: YoutubePlayer) => {
setupVolumeChangedListener(api);
});
window.ipcRenderer.on('ytmd:setup-shuffle-changed-listener', () => {
setupShuffleChangedListener();
});
window.ipcRenderer.on('ytmd:setup-fullscreen-changed-listener', () => {
setupFullScreenChangedListener();
});