From 14e17df3255da0b118ae606140974263e2284f28 Mon Sep 17 00:00:00 2001 From: child_duckling <19170969+quacksire@users.noreply.github.com> Date: Fri, 4 Feb 2022 23:03:24 -0800 Subject: [PATCH] Added macOS MenuBar (+ accel, actions, git links) --- src/main/base/browserwindow.ts | 111 ++++++++++++++++++++++- src/renderer/index.js | 2 +- src/renderer/views/app/sidebar.ejs | 2 +- src/renderer/views/pages/remote-pair.ejs | 21 +++++ 4 files changed, 133 insertions(+), 3 deletions(-) create mode 100644 src/renderer/views/pages/remote-pair.ejs diff --git a/src/main/base/browserwindow.ts b/src/main/base/browserwindow.ts index a3aff56c..5d1ef8b3 100644 --- a/src/main/base/browserwindow.ts +++ b/src/main/base/browserwindow.ts @@ -1,5 +1,5 @@ import {join} from "path"; -import {app, BrowserWindow as bw, ipcMain, shell, ShareMenu} from "electron"; +import {app, BrowserWindow as bw, ipcMain, shell, ShareMenu, Menu, nativeImage} from "electron"; import * as windowStateKeeper from "electron-window-state"; import * as express from "express"; import * as getPort from "get-port"; @@ -14,6 +14,9 @@ import {wsapi} from "./wsapi"; import {jsonc} from "jsonc"; import {AppImageUpdater, NsisUpdater} from "electron-updater"; import {utils} from './utils'; +import * as path from "path"; + + export class BrowserWindow { public static win: any | undefined = null; @@ -542,6 +545,11 @@ export class BrowserWindow { shell.openExternal(`https://cider.sh/pair-remote?url=${Buffer.from(encodeURI(url)).toString('base64')}`).catch(console.error); }) + ipcMain.on('get-remote-pair-url', (_event, _) => { + let url = `http://${BrowserWindow.getIP()}:${this.remotePort}`; + BrowserWindow.win.webContents.send('send-remote-pair-url', url); + }) + // Get previews for normalization ipcMain.on("getPreviewURL", (_event, url) => { @@ -654,6 +662,107 @@ export class BrowserWindow { shell.openExternal(x.url).catch(console.error); return {action: "deny"}; }); + + /* ********************************************************************************************* + * Menu + * **********************************************************************************************/ + //@ts-ignore + console.log(path.join(__dirname, '../../src/renderer/views/svg/smartphone.svg')) + const isMac = process.platform === 'darwin'; + //TODO: Figure out the icons + const remoteIcon = nativeImage.createFromPath(path.join(__dirname, '../../src/renderer/views/svg/smartphone.svg')).toPNG() + const soundIcon = nativeImage.createFromPath(path.join(__dirname, '../../src/renderer/views/svg/headphones.svg')).toPNG() + const aboutIcon = nativeImage.createFromPath(path.join(__dirname, '../../src/renderer/views/svg/info.svg')).toPNG() + const settingsIcon = nativeImage.createFromPath(path.join(__dirname, '../../src/renderer/views/svg/settings.svg')).toPNG() + const logoutIcon = nativeImage.createFromPath(path.join(__dirname, '../../src/renderer/views/svg/log-out.svg')).toPNG() + const template = [ + // { role: 'appMenu' } + ...(isMac ? [{ + label: app.name, + submenu: [ + { label: 'Web Remote', accelerator: 'CommandOrControl+W', sublabel: 'Opens in external window', click: () => BrowserWindow.win.webContents.executeJavaScript(`ipcRenderer.invoke('showQR')`)}, //accelerator + { label: 'Audio Settings', accelerator: 'CommandOrControl+Shift+A', click: () => BrowserWindow.win.webContents.executeJavaScript(`app.modals.audioSettings = true`)}, + { label: 'About', accelerator: 'CommandOrControl+Shift+B', click: () => BrowserWindow.win.webContents.executeJavaScript(`app.appRoute('about'`)}, + { label: 'Settings', accelerator: 'CommandOrControl+,', click: () => BrowserWindow.win.webContents.executeJavaScript(`app.appRoute('settings')`)}, + { label: 'Logout', accelerator: 'CommandOrControl+Shift+O', click: () => BrowserWindow.win.webContents.executeJavaScript(`app.unauthorize(); document.location.reload()`)}, + { type: 'separator' }, + { role: 'quit' } + ] + }] : []), + // { role: 'viewMenu' } + { + label: 'View', + submenu: [ + { role: 'reload' }, + { role: 'forceReload' }, + { role: 'toggleDevTools' }, + { type: 'separator' }, + { role: 'resetZoom' }, + { role: 'zoomIn' }, + { role: 'zoomOut' }, + { type: 'separator' }, + { role: 'togglefullscreen' } + ] + }, + // { role: 'windowMenu' } + { + label: 'Window', + submenu: [ + { role: 'minimize' }, + { role: 'zoom' }, + ...(isMac ? [ + { type: 'separator' }, + { role: 'front' }, + { type: 'separator' }, + { role: 'window' } + ] : [ + { role: 'close' } + ]) + ] + }, + { + role: 'help', + submenu: [ + { + label: 'Discord', + click: async () => { + const { shell } = require('electron') + await shell.openExternal('https://discord.gg/applemusic') + } + }, + { + label: 'Report a...', + submenu: [ + { + label: 'Bug', + click: async () => { + const {shell} = require('electron') + await shell.openExternal("https://github.com/ciderapp/Cider/issues/new?assignees=&labels=bug%2Ctriage&template=bug_report.yaml&title=%5BBug%5D%3A+") + } + }, + { + label: 'Feature Request', + click: async () => { + const {shell} = require('electron') + await shell.openExternal("https://github.com/ciderapp/Cider/issues/new?assignees=&labels=enhancement%2Ctriage&template=feature_request.yaml&title=%5BEnhancement%5D%3A+") + } + }, + { + label: 'Translation Report/Request', + click: async () => { + const {shell} = require('electron') + await shell.openExternal("https://github.com/ciderapp/Cider/issues/new?assignees=&labels=%F0%9F%8C%90+Translations&template=translation.yaml&title=%5BTranslation%5D%3A+") + } + }, + ] + }, + ] + } + ] + //@ts-ignore + const menu = Menu.buildFromTemplate(template) + Menu.setApplicationMenu(menu) + } /** diff --git a/src/renderer/index.js b/src/renderer/index.js index 32b226fa..dcc68a24 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -1005,7 +1005,7 @@ const app = new Vue({ }) }, copyToClipboard(str) { - if (navigator.userAgent.includes('Darwin')) { + if (navigator.userAgent.includes('Darwin') || navigator.appVersion.indexOf("Mac")!=-1) { this.darwinShare(str) } else { notyf.success(app.getLz('term.share.success')) diff --git a/src/renderer/views/app/sidebar.ejs b/src/renderer/views/app/sidebar.ejs index 7c89a71d..b4260263 100644 --- a/src/renderer/views/app/sidebar.ejs +++ b/src/renderer/views/app/sidebar.ejs @@ -92,7 +92,7 @@ {{$root.getLz('app.name')}} -