feat: desktop auto update or notify and menu

release/desktop
moonrailgun 3 years ago
parent 2a95505514
commit 02656b34bd

@ -31,7 +31,10 @@
"typescript": "~4.5.4"
},
"dependencies": {
"electron-log": "^4.4.6",
"electron-squirrel-startup": "^1.0.0",
"electron-window-state": "^5.0.3"
"electron-update-notifier": "^1.5.3",
"electron-window-state": "^5.0.3",
"update-electron-app": "^2.0.1"
}
}

@ -0,0 +1,11 @@
import { app } from 'electron';
const isDev = !app.isPackaged;
const webUrl = isDev
? 'http://localhost:11011'
: 'https://nightly.paw.msgbyte.com';
export const config = {
isDev,
webUrl,
};

@ -1,11 +1,8 @@
import { app, BrowserWindow } from 'electron';
import path from 'path';
import windowStateKeeper from 'electron-window-state';
const isDev = !app.isPackaged;
const webUrl = isDev
? 'http://localhost:11011'
: 'https://nightly.paw.msgbyte.com';
import { config } from './config';
import './update';
import './menu';
// Handle creating/removing shortcuts on Windows when installing/uninstalling.
if (require('electron-squirrel-startup')) {
@ -28,18 +25,17 @@ const createWindow = (): void => {
minHeight: 640,
minWidth: 960,
center: true,
icon: path.resolve(__dirname, '../assets/logo@192.png'),
webPreferences: {
nodeIntegration: false,
sandbox: true,
},
});
mainWindow.loadURL(webUrl);
mainWindow.loadURL(config.webUrl);
mainWindowState.manage(mainWindow);
if (isDev) {
if (config.isDev) {
// Open the DevTools.
mainWindow.webContents.openDevTools();
}

@ -0,0 +1,119 @@
import {
app,
Menu,
MenuItem,
MenuItemConstructorOptions,
shell,
} from 'electron';
import { config } from './config';
import { checkUpdates } from './update';
const isMac = process.platform === 'darwin';
const template = [
// { role: 'appMenu' }
...(isMac
? [
{
label: app.name,
submenu: [
{ role: 'about' },
{ type: 'separator' },
{ role: 'services' },
{ type: 'separator' },
{ role: 'hide' },
{ role: 'hideOthers' },
{ role: 'unhide' },
{ type: 'separator' },
{ role: 'quit' },
],
},
]
: []),
// { role: 'fileMenu' }
{
label: 'File',
submenu: [isMac ? { role: 'close' } : { role: 'quit' }],
},
// { role: 'editMenu' }
{
label: 'Edit',
submenu: [
{ role: 'undo' },
{ role: 'redo' },
{ type: 'separator' },
{ role: 'cut' },
{ role: 'copy' },
{ role: 'paste' },
...(isMac
? [
{ role: 'pasteAndMatchStyle' },
{ role: 'delete' },
{ role: 'selectAll' },
{ type: 'separator' },
{
label: 'Speech',
submenu: [{ role: 'startSpeaking' }, { role: 'stopSpeaking' }],
},
]
: [{ role: 'delete' }, { type: 'separator' }, { role: 'selectAll' }]),
],
},
// { role: 'viewMenu' }
{
label: 'View',
submenu: [
{ role: 'reload' },
{ role: 'forceReload' },
{ role: 'toggleDevTools' },
{ type: 'separator' },
{ role: 'resetZoom' },
{ role: 'zoomIn' },
{ role: 'zoomOut' },
{ type: 'separator' },
{ role: 'togglefullscreen' },
],
},
// { role: 'windowMenu' }
{
label: 'Window',
submenu: [
{ role: 'minimize' },
{ role: 'zoom' },
...(isMac
? [
{ type: 'separator' },
{ role: 'front' },
{ type: 'separator' },
{ role: 'window' },
]
: [{ role: 'close' }]),
],
},
{
role: 'help',
submenu: [
{
label: 'Github',
click: async () => {
await shell.openExternal('https://github.com/msgbyte/tailchat');
},
},
{
label: '打开网页版',
click: async () => {
await shell.openExternal(config.webUrl);
},
},
{
label: '检查更新',
click: async () => {
await checkUpdates();
},
},
],
},
] as Array<MenuItemConstructorOptions | MenuItem>;
const menu = Menu.buildFromTemplate(template);
Menu.setApplicationMenu(menu);

@ -0,0 +1,36 @@
import { app } from 'electron';
import {
setUpdateNotification,
checkForUpdates,
} from 'electron-update-notifier';
import updateElectronApp from 'update-electron-app';
import logger from 'electron-log';
const repo = 'msgbyte/tailchat';
app.whenReady().then(() => {
switch (process.platform) {
// case 'darwin': // NOTICE: require codesign
case 'win32':
updateElectronApp({
repo,
logger,
});
break;
default:
setUpdateNotification({
repository: repo, // Optional, use repository field from your package.json when not specified
silent: true, // Optional, notify when new version available, otherwise remain silent
});
}
});
/**
*
*/
export function checkUpdates(): Promise<void> {
return checkForUpdates({
repository: repo,
silent: false,
});
}

@ -558,6 +558,13 @@ aws4@^1.8.0:
resolved "https://registry.npmmirror.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59"
integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==
axios@^0.24.0:
version "0.24.0"
resolved "https://registry.npmmirror.com/axios/-/axios-0.24.0.tgz#804e6fa1e4b9c5288501dd9dff56a7a0940d20d6"
integrity sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==
dependencies:
follow-redirects "^1.14.4"
balanced-match@^1.0.0:
version "1.0.2"
resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
@ -834,6 +841,11 @@ compare-version@^0.1.2:
resolved "https://registry.npmmirror.com/compare-version/-/compare-version-0.1.2.tgz#0162ec2d9351f5ddd59a9202cba935366a725080"
integrity sha1-AWLsLZNR9d3VmpICy6k1NmpyUIA=
compare-versions@^3.6.0:
version "3.6.0"
resolved "https://registry.npmmirror.com/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62"
integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==
concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
@ -1069,6 +1081,16 @@ electron-installer-redhat@^3.2.0:
word-wrap "^1.2.3"
yargs "^16.0.2"
electron-is-dev@^0.3.0:
version "0.3.0"
resolved "https://registry.npmmirror.com/electron-is-dev/-/electron-is-dev-0.3.0.tgz#14e6fda5c68e9e4ecbeff9ccf037cbd7c05c5afe"
integrity sha512-jLttuuq8QK67n3mXmIe9pkrO7IH3LGIk12xJkhTmc852U2sCJaRAOpRGPSh+1Xnzck5v9escd9YXzuze9nGejg==
electron-log@^4.4.6:
version "4.4.6"
resolved "https://registry.npmmirror.com/electron-log/-/electron-log-4.4.6.tgz#e7824fc725370384f6edaaac0480c423e570dc69"
integrity sha512-nirYgRdY+F+vclr8ijdwy2vW03IzFpDHTaKNWu76dEN21Y76+smcES5knS7cgHUUB0qNLOi8vZO36taakjbSXA==
electron-notarize@^1.1.1:
version "1.1.1"
resolved "https://registry.npmmirror.com/electron-notarize/-/electron-notarize-1.1.1.tgz#3ed274b36158c1beb1dbef14e7faf5927e028629"
@ -1140,6 +1162,15 @@ electron-squirrel-startup@^1.0.0:
dependencies:
debug "^2.2.0"
electron-update-notifier@^1.5.3:
version "1.5.3"
resolved "https://registry.npmmirror.com/electron-update-notifier/-/electron-update-notifier-1.5.3.tgz#23c4e6f255e2b8a8cc24061c742c180e2fd5fe99"
integrity sha512-nIru/heVVrlv8WI578KfaB/8oXlpLdkiAgzv6fb5x8O2kkWDymDGo4QJrWJPtPzB/TABnJhUURocN37r6XJdXQ==
dependencies:
axios "^0.24.0"
compare-versions "^3.6.0"
github-url-to-object "^4.0.4"
electron-window-state@^5.0.3:
version "5.0.3"
resolved "https://registry.npmmirror.com/electron-window-state/-/electron-window-state-5.0.3.tgz#4f36d09e3f953d87aff103bf010f460056050aa8"
@ -1388,6 +1419,11 @@ flora-colossus@^1.0.0:
debug "^4.1.1"
fs-extra "^7.0.0"
follow-redirects@^1.14.4:
version "1.14.9"
resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.14.9.tgz#dd4ea157de7bfaf9ea9b3fbd85aa16951f78d8d7"
integrity sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==
forever-agent@~0.6.1:
version "0.6.1"
resolved "https://registry.npmmirror.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
@ -1545,6 +1581,13 @@ getpass@^0.1.1:
dependencies:
assert-plus "^1.0.0"
github-url-to-object@^4.0.4:
version "4.0.6"
resolved "https://registry.npmmirror.com/github-url-to-object/-/github-url-to-object-4.0.6.tgz#5ea8701dc8c336b8d582dc3fa5bf964165c3b365"
integrity sha512-NaqbYHMUAlPcmWFdrAB7bcxrNIiiJWJe8s/2+iOc9vlcHlwHqSGrPk+Yi3nu6ebTwgsZEa7igz+NH2vEq3gYwQ==
dependencies:
is-url "^1.1.0"
glob-parent@^5.1.2:
version "5.1.2"
resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
@ -1888,6 +1931,11 @@ is-unicode-supported@^0.1.0:
resolved "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"
integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
is-url@^1.1.0, is-url@^1.2.4:
version "1.2.4"
resolved "https://registry.npmmirror.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52"
integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==
is-windows@^1.0.1:
version "1.0.2"
resolved "https://registry.npmmirror.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
@ -3389,6 +3437,16 @@ universalify@^2.0.0:
resolved "https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
update-electron-app@^2.0.1:
version "2.0.1"
resolved "https://registry.npmmirror.com/update-electron-app/-/update-electron-app-2.0.1.tgz#229dbeb4534f51ec949e6a46ae1ac32f68a17eed"
integrity sha512-e4xEner89UZZaBGYJbYlMdL1uUrC0VjOsTAL2N4opPjzFtn+j7mdsJJsnyXZzUVeLY+8tuCX4XEsUM98oBHmZg==
dependencies:
electron-is-dev "^0.3.0"
github-url-to-object "^4.0.4"
is-url "^1.2.4"
ms "^2.1.1"
uri-js@^4.2.2:
version "4.4.1"
resolved "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"

Loading…
Cancel
Save