mirror of
https://github.com/th-ch/youtube-music.git
synced 2026-01-14 11:51:47 +00:00
feat(menu): add theme list in menu
This commit is contained in:
@ -162,6 +162,14 @@
|
|||||||
"submenu": {
|
"submenu": {
|
||||||
"import-css-file": "Import custom CSS file",
|
"import-css-file": "Import custom CSS file",
|
||||||
"no-theme": "No theme"
|
"no-theme": "No theme"
|
||||||
|
},
|
||||||
|
"dialog": {
|
||||||
|
"remove-theme": "Are you sure you want to remove the custom theme?",
|
||||||
|
"remove-theme-message": "This will remove the custom theme",
|
||||||
|
"button": {
|
||||||
|
"cancel": "Cancel",
|
||||||
|
"remove": "Remove"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
148
src/menu.ts
148
src/menu.ts
@ -1,13 +1,5 @@
|
|||||||
import is from 'electron-is';
|
import is from 'electron-is';
|
||||||
import {
|
import { app, BrowserWindow, clipboard, dialog, Menu, MenuItem, shell, } from 'electron';
|
||||||
app,
|
|
||||||
BrowserWindow,
|
|
||||||
clipboard,
|
|
||||||
dialog,
|
|
||||||
Menu,
|
|
||||||
MenuItem,
|
|
||||||
shell,
|
|
||||||
} from 'electron';
|
|
||||||
import prompt from 'custom-electron-prompt';
|
import prompt from 'custom-electron-prompt';
|
||||||
import { satisfies } from 'semver';
|
import { satisfies } from 'semver';
|
||||||
|
|
||||||
@ -235,16 +227,41 @@ export const mainMenuTemplate = async (
|
|||||||
'main.menu.options.submenu.visual-tweaks.submenu.theme.label',
|
'main.menu.options.submenu.visual-tweaks.submenu.theme.label',
|
||||||
),
|
),
|
||||||
submenu: [
|
submenu: [
|
||||||
{
|
...((config.get('options.themes')?.length ?? 0) === 0
|
||||||
label: t(
|
? [
|
||||||
'main.menu.options.submenu.visual-tweaks.submenu.theme.submenu.no-theme',
|
{
|
||||||
),
|
label: t(
|
||||||
type: 'radio',
|
'main.menu.options.submenu.visual-tweaks.submenu.theme.submenu.no-theme',
|
||||||
checked: config.get('options.themes')?.length === 0, // Todo rename "themes"
|
),
|
||||||
click() {
|
}
|
||||||
config.set('options.themes', []);
|
]
|
||||||
},
|
: []),
|
||||||
},
|
...config.get('options.themes')?.map((theme: string) => ({
|
||||||
|
type: 'normal' as const,
|
||||||
|
label: theme,
|
||||||
|
async click() {
|
||||||
|
const { response } = await dialog.showMessageBox(win, {
|
||||||
|
type: 'question',
|
||||||
|
defaultId: 1,
|
||||||
|
title: t(
|
||||||
|
'main.menu.options.submenu.visual-tweaks.submenu.theme.dialog.remove-theme',
|
||||||
|
),
|
||||||
|
message: t(
|
||||||
|
'main.menu.options.submenu.visual-tweaks.submenu.theme.dialog.remove-theme-message',
|
||||||
|
{ theme },
|
||||||
|
),
|
||||||
|
buttons: [
|
||||||
|
t('main.menu.options.submenu.visual-tweaks.submenu.theme.dialog.button.cancel'),
|
||||||
|
t('main.menu.options.submenu.visual-tweaks.submenu.theme.dialog.button.remove'),
|
||||||
|
],
|
||||||
|
});
|
||||||
|
|
||||||
|
if (response === 1) {
|
||||||
|
config.set('options.themes', config.get('options.themes')?.filter((t) => t !== theme));
|
||||||
|
innerRefreshMenu();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})),
|
||||||
{ type: 'separator' },
|
{ type: 'separator' },
|
||||||
{
|
{
|
||||||
label: t(
|
label: t(
|
||||||
@ -258,6 +275,7 @@ export const mainMenuTemplate = async (
|
|||||||
});
|
});
|
||||||
if (filePaths) {
|
if (filePaths) {
|
||||||
config.set('options.themes', filePaths);
|
config.set('options.themes', filePaths);
|
||||||
|
innerRefreshMenu();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -288,40 +306,40 @@ export const mainMenuTemplate = async (
|
|||||||
},
|
},
|
||||||
...((is.windows() || is.linux()
|
...((is.windows() || is.linux()
|
||||||
? [
|
? [
|
||||||
{
|
{
|
||||||
label: t('main.menu.options.submenu.hide-menu.label'),
|
label: t('main.menu.options.submenu.hide-menu.label'),
|
||||||
type: 'checkbox',
|
type: 'checkbox',
|
||||||
checked: config.get('options.hideMenu'),
|
checked: config.get('options.hideMenu'),
|
||||||
click(item) {
|
click(item) {
|
||||||
config.setMenuOption('options.hideMenu', item.checked);
|
config.setMenuOption('options.hideMenu', item.checked);
|
||||||
if (item.checked && !config.get('options.hideMenuWarned')) {
|
if (item.checked && !config.get('options.hideMenuWarned')) {
|
||||||
dialog.showMessageBox(win, {
|
dialog.showMessageBox(win, {
|
||||||
type: 'info',
|
type: 'info',
|
||||||
title: t(
|
title: t(
|
||||||
'main.menu.options.submenu.hide-menu.dialog.title',
|
'main.menu.options.submenu.hide-menu.dialog.title',
|
||||||
),
|
),
|
||||||
message: t(
|
message: t(
|
||||||
'main.menu.options.submenu.hide-menu.dialog.message',
|
'main.menu.options.submenu.hide-menu.dialog.message',
|
||||||
),
|
),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
|
||||||
},
|
},
|
||||||
]
|
},
|
||||||
|
]
|
||||||
: []) satisfies Electron.MenuItemConstructorOptions[]),
|
: []) satisfies Electron.MenuItemConstructorOptions[]),
|
||||||
...((is.windows() || is.macOS()
|
...((is.windows() || is.macOS()
|
||||||
? // Only works on Win/Mac
|
? // Only works on Win/Mac
|
||||||
// https://www.electronjs.org/docs/api/app#appsetloginitemsettingssettings-macos-windows
|
// https://www.electronjs.org/docs/api/app#appsetloginitemsettingssettings-macos-windows
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
label: t('main.menu.options.submenu.start-at-login'),
|
label: t('main.menu.options.submenu.start-at-login'),
|
||||||
type: 'checkbox',
|
type: 'checkbox',
|
||||||
checked: config.get('options.startAtLogin'),
|
checked: config.get('options.startAtLogin'),
|
||||||
click(item) {
|
click(item) {
|
||||||
config.setMenuOption('options.startAtLogin', item.checked);
|
config.setMenuOption('options.startAtLogin', item.checked);
|
||||||
},
|
|
||||||
},
|
},
|
||||||
]
|
},
|
||||||
|
]
|
||||||
: []) satisfies Electron.MenuItemConstructorOptions[]),
|
: []) satisfies Electron.MenuItemConstructorOptions[]),
|
||||||
{
|
{
|
||||||
label: t('main.menu.options.submenu.tray.label'),
|
label: t('main.menu.options.submenu.tray.label'),
|
||||||
@ -475,25 +493,25 @@ export const mainMenuTemplate = async (
|
|||||||
{ type: 'separator' },
|
{ type: 'separator' },
|
||||||
is.macOS()
|
is.macOS()
|
||||||
? {
|
? {
|
||||||
label: t(
|
label: t(
|
||||||
'main.menu.options.submenu.advanced-options.submenu.toggle-dev-tools',
|
'main.menu.options.submenu.advanced-options.submenu.toggle-dev-tools',
|
||||||
),
|
),
|
||||||
// Cannot use "toggleDevTools" role in macOS
|
// Cannot use "toggleDevTools" role in macOS
|
||||||
click() {
|
click() {
|
||||||
const { webContents } = win;
|
const { webContents } = win;
|
||||||
if (webContents.isDevToolsOpened()) {
|
if (webContents.isDevToolsOpened()) {
|
||||||
webContents.closeDevTools();
|
webContents.closeDevTools();
|
||||||
} else {
|
} else {
|
||||||
webContents.openDevTools();
|
webContents.openDevTools();
|
||||||
}
|
}
|
||||||
},
|
|
||||||
}
|
|
||||||
: {
|
|
||||||
label: t(
|
|
||||||
'main.menu.options.submenu.advanced-options.submenu.toggle-dev-tools',
|
|
||||||
),
|
|
||||||
role: 'toggleDevTools',
|
|
||||||
},
|
},
|
||||||
|
}
|
||||||
|
: {
|
||||||
|
label: t(
|
||||||
|
'main.menu.options.submenu.advanced-options.submenu.toggle-dev-tools',
|
||||||
|
),
|
||||||
|
role: 'toggleDevTools',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
label: t(
|
label: t(
|
||||||
'main.menu.options.submenu.advanced-options.submenu.edit-config-json',
|
'main.menu.options.submenu.advanced-options.submenu.edit-config-json',
|
||||||
|
|||||||
Reference in New Issue
Block a user