mirror of
https://github.com/th-ch/youtube-music.git
synced 2026-01-15 20:31:46 +00:00
fix: fix bugs in MPRIS, and improve MPRIS (#1760)
Co-authored-by: JellyBrick <shlee1503@naver.com> Co-authored-by: Totto <32566573+Totto16@users.noreply.github.com>
This commit is contained in:
@ -1,43 +1,82 @@
|
||||
// This is used for to control the songs
|
||||
import { BrowserWindow, ipcMain } from 'electron';
|
||||
import { BrowserWindow } from 'electron';
|
||||
|
||||
// see protocol-handler.ts
|
||||
type ArgsType<T> = T | string[] | undefined;
|
||||
|
||||
const parseNumberFromArgsType = (args: ArgsType<number>) => {
|
||||
if (typeof args === 'number') {
|
||||
return args;
|
||||
} else if (Array.isArray(args)) {
|
||||
return Number(args[0]);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
const parseBooleanFromArgsType = (args: ArgsType<boolean>) => {
|
||||
if (typeof args === 'boolean') {
|
||||
return args;
|
||||
} else if (Array.isArray(args)) {
|
||||
return args[0] === 'true';
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
export default (win: BrowserWindow) => {
|
||||
const commands = {
|
||||
return {
|
||||
// Playback
|
||||
previous: () => win.webContents.send('ytmd:previous-video'),
|
||||
next: () => win.webContents.send('ytmd:next-video'),
|
||||
playPause: () => win.webContents.send('ytmd:toggle-play'),
|
||||
like: () => win.webContents.send('ytmd:update-like', 'LIKE'),
|
||||
dislike: () => win.webContents.send('ytmd:update-like', 'DISLIKE'),
|
||||
go10sBack: () => win.webContents.send('ytmd:seek-by', -10),
|
||||
go10sForward: () => win.webContents.send('ytmd:seek-by', 10),
|
||||
go1sBack: () => win.webContents.send('ytmd:seek-by', -1),
|
||||
go1sForward: () => win.webContents.send('ytmd:seek-by', 1),
|
||||
goBack: (seconds: ArgsType<number>) => {
|
||||
const secondsNumber = parseNumberFromArgsType(seconds);
|
||||
if (secondsNumber !== null) {
|
||||
win.webContents.send('ytmd:seek-by', -secondsNumber);
|
||||
}
|
||||
},
|
||||
goForward: (seconds: ArgsType<number>) => {
|
||||
const secondsNumber = parseNumberFromArgsType(seconds);
|
||||
if (secondsNumber !== null) {
|
||||
win.webContents.send('ytmd:seek-by', seconds);
|
||||
}
|
||||
},
|
||||
shuffle: () => win.webContents.send('ytmd:shuffle'),
|
||||
switchRepeat: (n = 1) => win.webContents.send('ytmd:switch-repeat', n),
|
||||
switchRepeat: (n: ArgsType<number> = 1) => {
|
||||
const repeat = parseNumberFromArgsType(n);
|
||||
if (repeat !== null) {
|
||||
win.webContents.send('ytmd:switch-repeat', n);
|
||||
}
|
||||
},
|
||||
// General
|
||||
volumeMinus10: () => {
|
||||
ipcMain.once('ytmd:get-volume-return', (_, volume) => {
|
||||
win.webContents.send('ytmd:update-volume', volume - 10);
|
||||
});
|
||||
win.webContents.send('ytmd:get-volume');
|
||||
setVolume: (volume: ArgsType<number>) => {
|
||||
const volumeNumber = parseNumberFromArgsType(volume);
|
||||
if (volumeNumber !== null) {
|
||||
win.webContents.send('ytmd:update-volume', volume);
|
||||
}
|
||||
},
|
||||
volumePlus10: () => {
|
||||
ipcMain.once('ytmd:get-volume-return', (_, volume) => {
|
||||
win.webContents.send('ytmd:update-volume', volume + 10);
|
||||
});
|
||||
win.webContents.send('ytmd:get-volume');
|
||||
setFullscreen: (isFullscreen: ArgsType<boolean>) => {
|
||||
const isFullscreenValue = parseBooleanFromArgsType(isFullscreen);
|
||||
if (isFullscreenValue !== null) {
|
||||
win.setFullScreen(isFullscreenValue);
|
||||
win.webContents.send('ytmd:click-fullscreen-button', isFullscreenValue);
|
||||
}
|
||||
},
|
||||
requestFullscreenInformation: () => {
|
||||
win.webContents.send('ytmd:get-fullscreen');
|
||||
},
|
||||
requestQueueInformation: () => {
|
||||
win.webContents.send('ytmd:get-queue');
|
||||
},
|
||||
fullscreen: () => win.webContents.send('ytmd:toggle-fullscreen'),
|
||||
muteUnmute: () => win.webContents.send('ytmd:toggle-mute'),
|
||||
search: () => win.webContents.sendInputEvent({
|
||||
type: 'keyDown',
|
||||
keyCode: '/',
|
||||
}),
|
||||
};
|
||||
return {
|
||||
...commands,
|
||||
play: commands.playPause,
|
||||
pause: commands.playPause,
|
||||
search: () => {
|
||||
win.webContents.sendInputEvent({
|
||||
type: 'keyDown',
|
||||
keyCode: '/',
|
||||
});
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user