mirror of
https://github.com/th-ch/youtube-music.git
synced 2026-01-11 18:41:47 +00:00
80 lines
2.1 KiB
JavaScript
80 lines
2.1 KiB
JavaScript
const path = require("path");
|
|
|
|
const { app, ipcMain } = require("electron");
|
|
|
|
const { setOptions } = require("../../config/plugins");
|
|
const { injectCSS } = require("../utils");
|
|
|
|
let isInPiPMode = false;
|
|
let originalPosition;
|
|
let originalSize;
|
|
|
|
const pipPosition = [10, 10];
|
|
const pipSize = [450, 275];
|
|
|
|
const togglePiP = async (win) => {
|
|
isInPiPMode = !isInPiPMode;
|
|
setOptions("picture-in-picture", { isInPiP: isInPiPMode });
|
|
|
|
if (isInPiPMode) {
|
|
originalPosition = win.getPosition();
|
|
originalSize = win.getSize();
|
|
|
|
win.webContents.on("before-input-event", blockShortcutsInPiP);
|
|
|
|
win.setFullScreenable(false);
|
|
await win.webContents.executeJavaScript(
|
|
// Go fullscreen
|
|
`
|
|
if (!document.querySelector("ytmusic-player-page").playerPageOpen_) {
|
|
document.querySelector(".toggle-player-page-button").click();
|
|
}
|
|
document.querySelector(".fullscreen-button").click();
|
|
document.querySelector("ytmusic-player-bar").classList.add("pip");
|
|
`
|
|
);
|
|
win.setFullScreenable(true);
|
|
|
|
app.dock?.hide();
|
|
win.setVisibleOnAllWorkspaces(true, {
|
|
visibleOnFullScreen: true,
|
|
});
|
|
app.dock?.show();
|
|
win.setAlwaysOnTop(true, "screen-saver", 1);
|
|
} else {
|
|
win.webContents.removeListener("before-input-event", blockShortcutsInPiP);
|
|
|
|
await win.webContents.executeJavaScript(
|
|
// Exit fullscreen
|
|
`
|
|
document.querySelector(".exit-fullscreen-button").click();
|
|
document.querySelector("ytmusic-player-bar").classList.remove("pip");
|
|
`
|
|
);
|
|
|
|
win.setVisibleOnAllWorkspaces(false);
|
|
win.setAlwaysOnTop(false);
|
|
}
|
|
|
|
const [x, y] = isInPiPMode ? pipPosition : originalPosition;
|
|
const [w, h] = isInPiPMode ? pipSize : originalSize;
|
|
win.setPosition(x, y);
|
|
win.setSize(w, h);
|
|
|
|
win.setWindowButtonVisibility?.(!isInPiPMode);
|
|
};
|
|
|
|
module.exports = (win) => {
|
|
injectCSS(win.webContents, path.join(__dirname, "style.css"));
|
|
ipcMain.on("picture-in-picture", async () => {
|
|
await togglePiP(win);
|
|
});
|
|
};
|
|
|
|
const blockShortcutsInPiP = (event, input) => {
|
|
const blockedShortcuts = ["f", "escape"];
|
|
if (blockedShortcuts.includes(input.key.toLowerCase())) {
|
|
event.preventDefault();
|
|
}
|
|
};
|