116 lines
3.2 KiB
TypeScript
116 lines
3.2 KiB
TypeScript
import { Menu, MenuItem, PredefinedMenuItem, Submenu } from "@tauri-apps/api/menu"
|
|
import { type as ostype } from "@tauri-apps/plugin-os"
|
|
import { invoke } from "@tauri-apps/api/core"
|
|
import { relaunch } from "@tauri-apps/plugin-process"
|
|
|
|
import { runUpdater, UPDATER_ENABLED } from "./updater"
|
|
import { installCli } from "./cli"
|
|
import { initI18n, t } from "./i18n"
|
|
|
|
export async function createMenu() {
|
|
if (ostype() !== "macos") return
|
|
|
|
await initI18n()
|
|
|
|
const menu = await Menu.new({
|
|
items: [
|
|
await Submenu.new({
|
|
text: "OpenCode",
|
|
items: [
|
|
await PredefinedMenuItem.new({
|
|
item: { About: null },
|
|
}),
|
|
await MenuItem.new({
|
|
enabled: UPDATER_ENABLED,
|
|
action: () => runUpdater({ alertOnFail: true }),
|
|
text: t("desktop.menu.checkForUpdates"),
|
|
}),
|
|
await MenuItem.new({
|
|
action: () => installCli(),
|
|
text: t("desktop.menu.installCli"),
|
|
}),
|
|
await MenuItem.new({
|
|
action: async () => window.location.reload(),
|
|
text: t("desktop.menu.reloadWebview"),
|
|
}),
|
|
await MenuItem.new({
|
|
action: async () => {
|
|
await invoke("kill_sidecar").catch(() => undefined)
|
|
await relaunch().catch(() => undefined)
|
|
},
|
|
text: t("desktop.menu.restart"),
|
|
}),
|
|
await PredefinedMenuItem.new({
|
|
item: "Separator",
|
|
}),
|
|
await PredefinedMenuItem.new({
|
|
item: "Hide",
|
|
}),
|
|
await PredefinedMenuItem.new({
|
|
item: "HideOthers",
|
|
}),
|
|
await PredefinedMenuItem.new({
|
|
item: "ShowAll",
|
|
}),
|
|
await PredefinedMenuItem.new({
|
|
item: "Separator",
|
|
}),
|
|
await PredefinedMenuItem.new({
|
|
item: "Quit",
|
|
}),
|
|
].filter(Boolean),
|
|
}),
|
|
// await Submenu.new({
|
|
// text: "File",
|
|
// items: [
|
|
// await MenuItem.new({
|
|
// enabled: false,
|
|
// text: "Open Project...",
|
|
// }),
|
|
// await PredefinedMenuItem.new({
|
|
// item: "Separator"
|
|
// }),
|
|
// await MenuItem.new({
|
|
// enabled: false,
|
|
// text: "New Session",
|
|
// }),
|
|
// await PredefinedMenuItem.new({
|
|
// item: "Separator"
|
|
// }),
|
|
// await MenuItem.new({
|
|
// enabled: false,
|
|
// text: "Close Project",
|
|
// })
|
|
// ]
|
|
// }),
|
|
await Submenu.new({
|
|
text: "Edit",
|
|
items: [
|
|
await PredefinedMenuItem.new({
|
|
item: "Undo",
|
|
}),
|
|
await PredefinedMenuItem.new({
|
|
item: "Redo",
|
|
}),
|
|
await PredefinedMenuItem.new({
|
|
item: "Separator",
|
|
}),
|
|
await PredefinedMenuItem.new({
|
|
item: "Cut",
|
|
}),
|
|
await PredefinedMenuItem.new({
|
|
item: "Copy",
|
|
}),
|
|
await PredefinedMenuItem.new({
|
|
item: "Paste",
|
|
}),
|
|
await PredefinedMenuItem.new({
|
|
item: "SelectAll",
|
|
}),
|
|
],
|
|
}),
|
|
],
|
|
})
|
|
menu.setAsAppMenu()
|
|
}
|