Files
youtube-music/tray.js
2023-03-17 11:49:22 -05:00

98 lines
1.8 KiB
JavaScript

const path = require("path");
const { Menu, nativeImage, Tray } = require("electron");
const { restart } = require("./providers/app-controls");
const config = require("./config");
const getSongControls = require("./providers/song-controls");
// Prevent tray being garbage collected
/** @type {Electron.Tray} */
let tray;
module.exports.setTrayOnClick = (fn) => {
if (!tray) return;
tray.removeAllListeners('click');
tray.on("click", fn);
};
// wont do anything on macos since its disabled
module.exports.setTrayOnDoubleClick = (fn) => {
if (!tray) return;
tray.removeAllListeners('double-click');
tray.on("double-click", fn);
};
module.exports.setUpTray = (app, win) => {
if (!config.get("options.tray")) {
tray = undefined;
return;
}
const { playPause, next, previous } = getSongControls(win);
const iconPath = path.join(__dirname, "assets", "youtube-music-tray.png");
let trayIcon = nativeImage.createFromPath(iconPath).resize({
width: 16,
height: 16,
});
tray = new Tray(trayIcon);
tray.setToolTip("YouTube Music");
// macOS only
tray.setIgnoreDoubleClickEvents(true);
tray.on("click", () => {
if (config.get("options.trayClickPlayPause")) {
playPause();
} else {
if (win.isVisible()) {
win.hide();
app.dock?.hide();
} else {
win.show();
app.dock?.show();
}
}
});
let template = [
{
label: "Play/Pause",
click: () => {
playPause();
},
},
{
label: "Next",
click: () => {
next();
},
},
{
label: "Previous",
click: () => {
previous();
},
},
{
label: "Show",
click: () => {
win.show();
app.dock?.show();
},
},
{
label: "Restart App",
click: restart
},
{ role: "quit" },
];
const trayMenu = Menu.buildFromTemplate(template);
tray.setContextMenu(trayMenu);
};