@@ -6,9 +6,12 @@ import {
66 BrowserWindow ,
77 dialog ,
88 type MenuItemConstructorOptions ,
9+ shell ,
910} from 'electron'
11+ import { repository } from '../../../package.json'
1012import i18n from '../i18n'
1113import { send } from '../ipc'
14+ import { fethUpdates } from '../updates'
1215import { createMenu , createPlatformMenuItems } from './utils'
1316
1417const year = new Date ( ) . getFullYear ( )
@@ -40,6 +43,40 @@ const appMenuItems: MenuConfig[] = [
4043 platforms : [ 'darwin' ] ,
4144 click : ( ) => aboutApp ( ) ,
4245 } ,
46+ {
47+ id : 'update' ,
48+ label : i18n . t ( 'menu:app.update' ) ,
49+ click : async ( ) => {
50+ const latestVersion = await fethUpdates ( )
51+
52+ if ( latestVersion ) {
53+ const buttonId = dialog . showMessageBoxSync (
54+ BrowserWindow . getFocusedWindow ( ) ! ,
55+ {
56+ message : i18n . t ( 'messages:update.available' , {
57+ newVersion : latestVersion ,
58+ oldVersion : version ,
59+ } ) ,
60+ buttons : [ i18n . t ( 'button.update.0' ) , i18n . t ( 'button.update.1' ) ] ,
61+ defaultId : 0 ,
62+ cancelId : 1 ,
63+ } ,
64+ )
65+
66+ if ( buttonId === 0 ) {
67+ shell . openExternal ( `${ repository } /releases` )
68+ }
69+ }
70+ else {
71+ dialog . showMessageBoxSync ( BrowserWindow . getFocusedWindow ( ) ! , {
72+ message : i18n . t ( 'messages:update.noAvailable' ) ,
73+ } )
74+ }
75+ } ,
76+ } ,
77+ {
78+ type : 'separator' ,
79+ } ,
4380 {
4481 id : 'preferences' ,
4582 label : i18n . t ( 'menu:app.preferences' ) ,
@@ -229,7 +266,6 @@ const menuItems: MenuItemConstructorOptions[] = [
229266 submenu : createPlatformMenuItems ( appMenuItems ) ,
230267 } ,
231268 {
232- // role: 'fileMenu',
233269 label : 'File' ,
234270 submenu : createPlatformMenuItems ( fileMenuItems ) ,
235271 } ,
0 commit comments