338 lines
14 KiB
TypeScript
338 lines
14 KiB
TypeScript
import { app, Menu, shell } from "electron";
|
|
import { utils } from "../base/utils";
|
|
|
|
export default class Thumbar {
|
|
/**
|
|
* Base Plugin Details (Eventually implemented into a GUI in settings)
|
|
*/
|
|
public name: string = "Menubar Plugin";
|
|
public description: string = "Creates the menubar";
|
|
public version: string = "1.0.0";
|
|
public author: string = "Core";
|
|
public contributors: string[] = ["Core", "Qwack", "Monochromish"];
|
|
|
|
/**
|
|
* Menubar Assets
|
|
* @private
|
|
*/
|
|
|
|
private isNotMac: boolean = process.platform !== "darwin";
|
|
private isMac: boolean = process.platform === "darwin";
|
|
private _menuTemplate: any = [
|
|
{
|
|
label: app.getName(),
|
|
submenu: [
|
|
{
|
|
label: `${utils.getLocale(utils.getStoreValue("general.language"), "term.about")} ${app.getName()}`,
|
|
click: () => utils.getWindow().webContents.executeJavaScript(`app.appRoute('about')`),
|
|
},
|
|
{ type: "separator" },
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "term.toggleprivate"),
|
|
accelerator: utils.getStoreValue("general.keybindings.togglePrivateSession").join("+"),
|
|
click: () => utils.getWindow().webContents.executeJavaScript(`app.cfg.general.privateEnabled = !app.cfg.general.privateEnabled`),
|
|
},
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "term.settings"),
|
|
accelerator: utils.getStoreValue("general.keybindings.settings").join("+"),
|
|
click: () => utils.getWindow().webContents.executeJavaScript(`app.openSettingsPage()`),
|
|
},
|
|
...(this.isMac ? [{ type: "separator" }, { role: "services" }, { type: "separator" }, { role: "hide" }, { role: "hideOthers" }, { role: "unhide" }, { type: "separator" }, { role: "quit" }] : []),
|
|
...(this.isNotMac
|
|
? [
|
|
{ type: "separator" },
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "term.quit"),
|
|
accelerator: "Control+Q",
|
|
click: () => app.quit(),
|
|
},
|
|
]
|
|
: []),
|
|
],
|
|
},
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "menubar.options.view"),
|
|
submenu: [
|
|
...(this.isMac
|
|
? [
|
|
{ role: "reload" },
|
|
{ role: "forceReload" },
|
|
{ role: "toggleDevTools" },
|
|
{ type: "separator" },
|
|
{ role: "resetZoom" },
|
|
{ role: "zoomIn" },
|
|
{ role: "zoomOut" },
|
|
{ type: "separator" },
|
|
{ role: "togglefullscreen" },
|
|
{ type: "separator" },
|
|
]
|
|
: []),
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "term.search"),
|
|
accelerator: utils.getStoreValue("general.keybindings.search").join("+"),
|
|
click: () => utils.getWindow().webContents.executeJavaScript("app.focusSearch()"),
|
|
},
|
|
{ type: "separator" },
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "term.listenNow"),
|
|
accelerator: utils.getStoreValue("general.keybindings.listnow").join("+"),
|
|
click: () => utils.getWindow().webContents.executeJavaScript(`app.appRoute('listen_now')`),
|
|
},
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "term.browse"),
|
|
accelerator: utils.getStoreValue("general.keybindings.browse").join("+"),
|
|
click: () => utils.getWindow().webContents.executeJavaScript(`app.appRoute('browse')`),
|
|
},
|
|
{ type: "separator" },
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "term.recentlyAdded"),
|
|
accelerator: utils.getStoreValue("general.keybindings.recentAdd").join("+"),
|
|
click: () => utils.getWindow().webContents.executeJavaScript(`app.appRoute('library-recentlyadded')`),
|
|
},
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "term.songs"),
|
|
accelerator: utils.getStoreValue("general.keybindings.songs").join("+"),
|
|
click: () => utils.getWindow().webContents.executeJavaScript(`app.appRoute('library-songs')`),
|
|
},
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "term.albums"),
|
|
accelerator: utils.getStoreValue("general.keybindings.albums").join("+"),
|
|
click: () => utils.getWindow().webContents.executeJavaScript(`app.appRoute('library-albums')`),
|
|
},
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "term.artists"),
|
|
accelerator: utils.getStoreValue("general.keybindings.artists").join("+"),
|
|
click: () => utils.getWindow().webContents.executeJavaScript(`app.appRoute('library-artists')`),
|
|
},
|
|
],
|
|
},
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "menubar.options.window"),
|
|
submenu: [
|
|
{
|
|
role: "minimize",
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "menubar.options.minimize"),
|
|
},
|
|
{ type: "separator" },
|
|
...(this.isMac
|
|
? [
|
|
{
|
|
label: "Show",
|
|
click: () => utils.getWindow().show(),
|
|
},
|
|
{ role: "zoom" },
|
|
{ type: "separator" },
|
|
{ role: "front" },
|
|
{ role: "close" },
|
|
{
|
|
label: "Edit",
|
|
submenu: [{ role: "undo" }, { role: "redo" }, { type: "separator" }, { role: "cut" }, { role: "copy" }, { role: "paste" }],
|
|
},
|
|
{ type: "separator" },
|
|
]
|
|
: []),
|
|
...(this.isNotMac
|
|
? [
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "menubar.options.zoom"),
|
|
submenu: [
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "term.zoomin"),
|
|
role: "zoomIn",
|
|
accelerator: utils.getStoreValue("general.keybindings.zoomn").join("+"),
|
|
},
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "term.zoomout"),
|
|
role: "zoomOut",
|
|
accelerator: utils.getStoreValue("general.keybindings.zoomt").join("+"),
|
|
},
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "term.zoomreset"),
|
|
role: "resetZoom",
|
|
accelerator: utils.getStoreValue("general.keybindings.zoomrst").join("+"),
|
|
},
|
|
],
|
|
},
|
|
{ type: "separator" },
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "term.fullscreen"),
|
|
accelerator: "Control+Enter",
|
|
role: "togglefullscreen",
|
|
},
|
|
{ type: "separator" },
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "action.close"),
|
|
accelerator: "Control+W",
|
|
role: "close",
|
|
},
|
|
{ type: "separator" },
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "menubar.options.reload"),
|
|
accelerator: "Control+R",
|
|
role: "reload",
|
|
},
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "menubar.options.forcereload"),
|
|
accelerator: "Control+Shift+R",
|
|
role: "forceReload",
|
|
},
|
|
]
|
|
: []),
|
|
],
|
|
},
|
|
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "menubar.options.controls"),
|
|
submenu: [
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "term.playpause"),
|
|
accelerator: "Space",
|
|
click: () => utils.getWindow().webContents.executeJavaScript(`app.SpacePause()`),
|
|
},
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "term.next"),
|
|
accelerator: "CommandOrControl+Right",
|
|
click: () => utils.getWindow().webContents.executeJavaScript(`MusicKitInterop.next()`),
|
|
},
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "term.previous"),
|
|
accelerator: "CommandOrControl+Left",
|
|
click: () => utils.getWindow().webContents.executeJavaScript(`MusicKitInterop.previous()`),
|
|
},
|
|
{ type: "separator" },
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "menubar.options.volumeup"),
|
|
accelerator: "CommandOrControl+Up",
|
|
click: () => utils.getWindow().webContents.executeJavaScript(`app.volumeUp()`),
|
|
},
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "menubar.options.volumedown"),
|
|
accelerator: "CommandOrControl+Down",
|
|
click: () => utils.getWindow().webContents.executeJavaScript(`app.volumeDown()`),
|
|
},
|
|
{ type: "separator" },
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "term.cast2"),
|
|
accelerator: utils.getStoreValue("general.keybindings.castToDevices").join("+"),
|
|
click: () => utils.getWindow().webContents.executeJavaScript(`app.modals.castMenu = true`),
|
|
},
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "term.webremote"),
|
|
accelerator: utils.getStoreValue("general.keybindings.webRemote").join("+"),
|
|
sublabel: "Opens in external window",
|
|
click: () => utils.getWindow().webContents.executeJavaScript(`app.appRoute('remote-pair')`),
|
|
},
|
|
{ type: "separator" },
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "term.audioSettings"),
|
|
accelerator: utils.getStoreValue("general.keybindings.audioSettings").join("+"),
|
|
click: () => utils.getWindow().webContents.executeJavaScript(`app.modals.audioSettings = true`),
|
|
},
|
|
{ type: "separator" },
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "menubar.options.plugins"),
|
|
accelerator: utils.getStoreValue("general.keybindings.pluginMenu").join("+"),
|
|
click: () => utils.getWindow().webContents.executeJavaScript(`app.modals.pluginMenu = true`),
|
|
},
|
|
],
|
|
},
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "menubar.options.account"),
|
|
submenu: [
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "term.accountSettings"),
|
|
click: () => utils.getWindow().webContents.executeJavaScript(`app.appRoute('apple-account-settings')`),
|
|
},
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "menubar.options.signout"),
|
|
click: () => utils.getWindow().webContents.executeJavaScript(`app.unauthorize()`),
|
|
},
|
|
],
|
|
},
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "menubar.options.support"),
|
|
role: "help",
|
|
submenu: [
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "term.discord"),
|
|
click: () => shell.openExternal("https://discord.gg/AppleMusic").catch(console.error),
|
|
},
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "term.github"),
|
|
click: () => shell.openExternal("https://github.com/ciderapp/Cider/wiki/Troubleshooting").catch(console.error),
|
|
},
|
|
{ type: "separator" },
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "menubar.options.report"),
|
|
submenu: [
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "menubar.options.bug"),
|
|
click: () => shell.openExternal("https://github.com/ciderapp/Cider/issues/new?assignees=&labels=bug%2Ctriage&template=bug_report.yaml&title=%5BBug%5D%3A+").catch(console.error),
|
|
},
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "menubar.options.feature"),
|
|
click: () => shell.openExternal("https://github.com/ciderapp/Cider/discussions/new?category=feature-request").catch(console.error),
|
|
},
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "menubar.options.trans"),
|
|
click: () => shell.openExternal("https://github.com/ciderapp/Cider/issues/new?assignees=&labels=%F0%9F%8C%90+Translations&template=translation.yaml&title=%5BTranslation%5D%3A+").catch(console.error),
|
|
},
|
|
],
|
|
},
|
|
{ type: "separator" },
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "menubar.options.license"),
|
|
click: () => shell.openExternal("https://github.com/ciderapp/Cider/blob/main/LICENSE").catch(console.error),
|
|
},
|
|
{ type: "separator" },
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "menubar.options.toggledevtools"),
|
|
accelerator: utils.getStoreValue("general.keybindings.openDeveloperTools").join("+"),
|
|
click: () => utils.getWindow().webContents.openDevTools(),
|
|
},
|
|
{
|
|
label: utils.getLocale(utils.getStoreValue("general.language"), "menubar.options.conf"),
|
|
click: () => utils.getStoreInstance().openInEditor(),
|
|
},
|
|
],
|
|
},
|
|
];
|
|
|
|
/*******************************************************************************************
|
|
* Public Methods
|
|
* ****************************************************************************************/
|
|
|
|
/**
|
|
* Runs on plugin load (Currently run on application start)
|
|
*/
|
|
constructor(_utils: utils) {
|
|
console.debug(`[Plugin][${this.name}] Loading Complete.`);
|
|
}
|
|
|
|
/**
|
|
* Runs on app ready
|
|
*/
|
|
onReady(_win: Electron.BrowserWindow): void {
|
|
const menu = Menu.buildFromTemplate(this._menuTemplate);
|
|
Menu.setApplicationMenu(menu);
|
|
}
|
|
|
|
/**
|
|
* Runs on app stop
|
|
*/
|
|
onBeforeQuit(): void {
|
|
console.debug(`[Plugin][${this.name}] Stopped.`);
|
|
}
|
|
|
|
/**
|
|
* Runs on playback State Change
|
|
* @param attributes Music Attributes (attributes.status = current state)
|
|
*/
|
|
onPlaybackStateDidChange(attributes: object): void {}
|
|
|
|
/**
|
|
* Runs on song change
|
|
* @param attributes Music Attributes
|
|
*/
|
|
onNowPlayingItemDidChange(attributes: object): void {}
|
|
}
|