menu.ts 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. import { Menu, MenuItem, PredefinedMenuItem, Submenu } from "@tauri-apps/api/menu"
  2. import { type as ostype } from "@tauri-apps/plugin-os"
  3. import { relaunch } from "@tauri-apps/plugin-process"
  4. import { runUpdater, UPDATER_ENABLED } from "./updater"
  5. import { installCli } from "./cli"
  6. import { initI18n, t } from "./i18n"
  7. import { commands } from "./bindings"
  8. export async function createMenu() {
  9. if (ostype() !== "macos") return
  10. await initI18n()
  11. const menu = await Menu.new({
  12. items: [
  13. await Submenu.new({
  14. text: "OpenCode",
  15. items: [
  16. await PredefinedMenuItem.new({
  17. item: { About: null },
  18. }),
  19. await MenuItem.new({
  20. enabled: UPDATER_ENABLED,
  21. action: () => runUpdater({ alertOnFail: true }),
  22. text: t("desktop.menu.checkForUpdates"),
  23. }),
  24. await MenuItem.new({
  25. action: () => installCli(),
  26. text: t("desktop.menu.installCli"),
  27. }),
  28. await MenuItem.new({
  29. action: async () => window.location.reload(),
  30. text: t("desktop.menu.reloadWebview"),
  31. }),
  32. await MenuItem.new({
  33. action: async () => {
  34. await commands.killSidecar().catch(() => undefined)
  35. await relaunch().catch(() => undefined)
  36. },
  37. text: t("desktop.menu.restart"),
  38. }),
  39. await PredefinedMenuItem.new({
  40. item: "Separator",
  41. }),
  42. await PredefinedMenuItem.new({
  43. item: "Hide",
  44. }),
  45. await PredefinedMenuItem.new({
  46. item: "HideOthers",
  47. }),
  48. await PredefinedMenuItem.new({
  49. item: "ShowAll",
  50. }),
  51. await PredefinedMenuItem.new({
  52. item: "Separator",
  53. }),
  54. await PredefinedMenuItem.new({
  55. item: "Quit",
  56. }),
  57. ].filter(Boolean),
  58. }),
  59. // await Submenu.new({
  60. // text: "File",
  61. // items: [
  62. // await MenuItem.new({
  63. // enabled: false,
  64. // text: "Open Project...",
  65. // }),
  66. // await PredefinedMenuItem.new({
  67. // item: "Separator"
  68. // }),
  69. // await MenuItem.new({
  70. // enabled: false,
  71. // text: "New Session",
  72. // }),
  73. // await PredefinedMenuItem.new({
  74. // item: "Separator"
  75. // }),
  76. // await MenuItem.new({
  77. // enabled: false,
  78. // text: "Close Project",
  79. // })
  80. // ]
  81. // }),
  82. await Submenu.new({
  83. text: "Edit",
  84. items: [
  85. await PredefinedMenuItem.new({
  86. item: "Undo",
  87. }),
  88. await PredefinedMenuItem.new({
  89. item: "Redo",
  90. }),
  91. await PredefinedMenuItem.new({
  92. item: "Separator",
  93. }),
  94. await PredefinedMenuItem.new({
  95. item: "Cut",
  96. }),
  97. await PredefinedMenuItem.new({
  98. item: "Copy",
  99. }),
  100. await PredefinedMenuItem.new({
  101. item: "Paste",
  102. }),
  103. await PredefinedMenuItem.new({
  104. item: "SelectAll",
  105. }),
  106. ],
  107. }),
  108. ],
  109. })
  110. menu.setAsAppMenu()
  111. }