From 36447ae5d81c5360e9c82ea7db8e1bb3997b9273 Mon Sep 17 00:00:00 2001 From: wenjie Date: Thu, 25 Mar 2021 21:20:53 +0800 Subject: [PATCH] feat: add global shortcut setting (#470) * feat: add global short cut setting * fix: fix settings not work * fix: call initIpcMan after createWindow * fix: fix build error (typo) --- src/background.js | 10 ++++++---- src/electron/ipcMain.js | 12 +++++++++++- src/locale/lang/en.js | 1 + src/locale/lang/zh-CN.js | 1 + src/store/initLocalStorage.js | 1 + src/store/plugins/sendSettings.js | 1 + src/views/settings.vue | 31 +++++++++++++++++++++++++++++-- 7 files changed, 50 insertions(+), 7 deletions(-) diff --git a/src/background.js b/src/background.js index fca47dc..7ceab6b 100644 --- a/src/background.js +++ b/src/background.js @@ -50,9 +50,6 @@ class Background { // create Express app this.createExpressApp(); - // init ipcMain - initIpcMain(this.window, this.store); - // Scheme must be registered before the app is ready protocol.registerSchemesAsPrivileged([ { scheme: "app", privileges: { secure: true, standard: true } }, @@ -226,6 +223,9 @@ class Background { this.createWindow(); this.handleWindowEvents(); + // init ipcMain + initIpcMain(this.window, this.store); + // check for updates this.checkForUpdates(); @@ -244,7 +244,9 @@ class Background { this.window.setTouchBar(createTouchBar(this.window)); // register global shortcuts - registerGlobalShortcut(this.window); + if (this.store.get("settings.enableGlobalShortcut")) { + registerGlobalShortcut(this.window); + } }); app.on("activate", () => { diff --git a/src/electron/ipcMain.js b/src/electron/ipcMain.js index 7a3b52b..b0dfcec 100644 --- a/src/electron/ipcMain.js +++ b/src/electron/ipcMain.js @@ -1,5 +1,7 @@ -import { app, ipcMain, dialog } from "electron"; +import { app, dialog, globalShortcut, ipcMain } from "electron"; import match from "@njzy/unblockneteasemusic"; +import { registerGlobalShortcut } from "@/electron/globalShortcut"; + const client = require("discord-rich-presence")("818936529484906596"); export function initIpcMain(win, store) { @@ -61,6 +63,14 @@ export function initIpcMain(win, store) { ipcMain.on("settings", (event, options) => { store.set("settings", options); + const isRegisterShortcut = globalShortcut.isRegistered( + "Alt+CommandOrControl+P" + ); + if (options.enableGlobalShortcut) { + !isRegisterShortcut && registerGlobalShortcut(win); + } else { + isRegisterShortcut && globalShortcut.unregisterAll(); + } }); ipcMain.on("playDiscordPresence", (event, track) => { diff --git a/src/locale/lang/en.js b/src/locale/lang/en.js index 195c393..2d8c29d 100644 --- a/src/locale/lang/en.js +++ b/src/locale/lang/en.js @@ -149,6 +149,7 @@ export default { showUnavailableSongInGreyStyle: "Show unavailable song in grey style", showPlaylistsByAppleMusic: "Show playlists by Apple Music", enableDiscordRichPresence: "Enable Discord Rich Presence", + enableGlobalShortcut: "Enable Global Shortcut", }, contextMenu: { play: "Play", diff --git a/src/locale/lang/zh-CN.js b/src/locale/lang/zh-CN.js index abf5b34..0bebcd0 100644 --- a/src/locale/lang/zh-CN.js +++ b/src/locale/lang/zh-CN.js @@ -150,6 +150,7 @@ export default { showUnavailableSongInGreyStyle: "显示不可播放的歌曲为灰色", showPlaylistsByAppleMusic: "首页显示来自 Apple Music 的歌单", enableDiscordRichPresence: "启用 Discord Rich Presence", + enableGlobalShortcut: "启用全局快捷键", }, contextMenu: { play: "播放", diff --git a/src/store/initLocalStorage.js b/src/store/initLocalStorage.js index add7635..3fb106f 100644 --- a/src/store/initLocalStorage.js +++ b/src/store/initLocalStorage.js @@ -17,6 +17,7 @@ let localStorage = { showLyricsDynamicBackground: false, minimizeToTray: false, enableDiscordRichPresence: false, + enableGlobalShortcut: true, }, data: { user: {}, diff --git a/src/store/plugins/sendSettings.js b/src/store/plugins/sendSettings.js index acb4eb5..e92078e 100644 --- a/src/store/plugins/sendSettings.js +++ b/src/store/plugins/sendSettings.js @@ -7,6 +7,7 @@ export function getSendSettingsPlugin() { if (mutation.type !== "updateSettings") return; ipcRenderer.send("settings", { minimizeToTray: state.settings.minimizeToTray, + enableGlobalShortcut: state.settings.enableGlobalShortcut, }); }); }; diff --git a/src/views/settings.vue b/src/views/settings.vue index d05d57a..8cec889 100644 --- a/src/views/settings.vue +++ b/src/views/settings.vue @@ -271,6 +271,22 @@ +
+
+
{{ $t("settings.enableGlobalShortcut") }}
+
+
+
+ + +
+
+
🐈️ 🏳️‍🌈
@@ -491,8 +507,19 @@ export default { }); }, }, - isLastfmConnected() { - return this.lastfm.key !== undefined; + enableGlobalShortcut: { + get() { + return this.settings.enableGlobalShortcut; + }, + set(value) { + this.$store.commit("updateSettings", { + key: "enableGlobalShortcut", + value, + }); + }, + isLastfmConnected() { + return this.lastfm.key !== undefined; + }, }, }, methods: {