Files
cherry-studio/src/main/services/AppMenuService.ts
T
2025-10-28 09:12:51 +08:00

86 lines
2.3 KiB
TypeScript

import { isMac } from '@main/constant'
import { windowService } from '@main/services/WindowService'
import { getAppLanguage, locales } from '@main/utils/language'
import { IpcChannel } from '@shared/IpcChannel'
import type { MenuItemConstructorOptions } from 'electron'
import { app, Menu, shell } from 'electron'
export class AppMenuService {
public setupApplicationMenu(): void {
const locale = locales[getAppLanguage()]
const { common } = locale.translation
const template: MenuItemConstructorOptions[] = [
{
label: app.name,
submenu: [
{
label: common.about + ' ' + app.name,
click: () => {
// Emit event to navigate to About page
const mainWindow = windowService.getMainWindow()
if (mainWindow && !mainWindow.isDestroyed()) {
mainWindow.webContents.send(IpcChannel.Windows_NavigateToAbout)
windowService.showMainWindow()
}
}
},
{ type: 'separator' },
{ role: 'services' },
{ type: 'separator' },
{ role: 'hide' },
{ role: 'hideOthers' },
{ role: 'unhide' },
{ type: 'separator' },
{ role: 'quit' }
]
},
{
role: 'fileMenu'
},
{
role: 'editMenu'
},
{
role: 'viewMenu'
},
{
role: 'windowMenu'
},
{
role: 'help',
submenu: [
{
label: 'Website',
click: () => {
shell.openExternal('https://cherry-ai.com')
}
},
{
label: 'Documentation',
click: () => {
shell.openExternal('https://cherry-ai.com/docs')
}
},
{
label: 'Feedback',
click: () => {
shell.openExternal('https://github.com/CherryHQ/cherry-studio/issues/new/choose')
}
},
{
label: 'Releases',
click: () => {
shell.openExternal('https://github.com/CherryHQ/cherry-studio/releases')
}
}
]
}
]
const menu = Menu.buildFromTemplate(template)
Menu.setApplicationMenu(menu)
}
}
export const appMenuService = isMac ? new AppMenuService() : null