mirror of
https://github.com/rubickCenter/rubick
synced 2025-06-07 11:04:11 +08:00
✨ add windows auto-update feature
This commit is contained in:
parent
2eff73f581
commit
6ea706127d
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "rubick",
|
||||
"version": "2.2.8",
|
||||
"version": "1.1.1",
|
||||
"author": "muwoo <2424880409@qq.com>",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
@ -62,6 +62,5 @@
|
||||
"typescript": "~4.1.5",
|
||||
"vue-cli-plugin-electron-builder": "~2.1.1",
|
||||
"worker-plugin": "^5.0.1"
|
||||
},
|
||||
"__npminstall_done": false
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
import { app, BrowserWindow, protocol } from "electron";
|
||||
import path from "path";
|
||||
import { createProtocol } from "vue-cli-plugin-electron-builder/lib";
|
||||
import { app, BrowserWindow, protocol } from 'electron';
|
||||
import path from 'path';
|
||||
import { createProtocol } from 'vue-cli-plugin-electron-builder/lib';
|
||||
import versonHandler from '../common/versionHandler';
|
||||
export default () => {
|
||||
let win: any;
|
||||
|
||||
@ -15,7 +16,7 @@ export default () => {
|
||||
resizable: true,
|
||||
width: 800,
|
||||
frame: false,
|
||||
title: "拉比克",
|
||||
title: '拉比克',
|
||||
show: false,
|
||||
skipTaskbar: true,
|
||||
webPreferences: {
|
||||
@ -25,40 +26,41 @@ export default () => {
|
||||
contextIsolation: false,
|
||||
webviewTag: true,
|
||||
nodeIntegration: true,
|
||||
preload: path.join(__static, "preload.js")
|
||||
}
|
||||
preload: path.join(__static, 'preload.js'),
|
||||
},
|
||||
});
|
||||
if (process.env.WEBPACK_DEV_SERVER_URL) {
|
||||
// Load the url of the dev server if in development mode
|
||||
win.loadURL(process.env.WEBPACK_DEV_SERVER_URL as string);
|
||||
} else {
|
||||
createProtocol("app");
|
||||
createProtocol('app');
|
||||
// Load the index.html when not in development
|
||||
win.loadURL("app://./index.html");
|
||||
win.loadURL('app://./index.html');
|
||||
}
|
||||
protocol.interceptFileProtocol("image", (req, callback) => {
|
||||
protocol.interceptFileProtocol('image', (req, callback) => {
|
||||
const url = req.url.substr(8);
|
||||
callback(decodeURI(url));
|
||||
});
|
||||
win.on("closed", () => {
|
||||
win.on('closed', () => {
|
||||
win = undefined;
|
||||
});
|
||||
|
||||
win.on("show", () => {
|
||||
win.on('show', () => {
|
||||
win.webContents.executeJavaScript(
|
||||
`window.rubick && window.rubick.hooks && typeof window.rubick.hooks.onShow === "function" && window.rubick.hooks.onShow()`
|
||||
);
|
||||
versonHandler.checkUpdate();
|
||||
// win.webContents.openDevTools();
|
||||
});
|
||||
|
||||
win.on("hide", () => {
|
||||
win.on('hide', () => {
|
||||
win.webContents.executeJavaScript(
|
||||
`window.rubick && window.rubick.hooks && typeof window.rubick.hooks.onHide === "function" && window.rubick.hooks.onHide()`
|
||||
);
|
||||
});
|
||||
|
||||
// 判断失焦是否隐藏
|
||||
win.on("blur", () => {
|
||||
win.on('blur', () => {
|
||||
const config = { ...global.OP_CONFIG.get() };
|
||||
if (config.perf.common.hideOnBlur) {
|
||||
win.hide();
|
||||
@ -70,6 +72,6 @@ export default () => {
|
||||
|
||||
return {
|
||||
init,
|
||||
getWindow
|
||||
getWindow,
|
||||
};
|
||||
};
|
||||
|
@ -69,7 +69,7 @@ const registerHotKey = (mainWindow: BrowserWindow): void => {
|
||||
)
|
||||
);
|
||||
|
||||
mainWindow.setAlwaysOnTop(true);
|
||||
mainWindow.setAlwaysOnTop(false);
|
||||
mainWindow.setVisibleOnAllWorkspaces(true, { visibleOnFullScreen: true });
|
||||
mainWindow.focus();
|
||||
mainWindow.setVisibleOnAllWorkspaces(false, {
|
||||
|
105
src/main/common/versionHandler.ts
Normal file
105
src/main/common/versionHandler.ts
Normal file
@ -0,0 +1,105 @@
|
||||
import { dialog } from 'electron';
|
||||
import { autoUpdater } from 'electron-updater';
|
||||
import pkg from '../../../package.json';
|
||||
import API from './api';
|
||||
import commonConst from '@/common/utils/commonConst';
|
||||
import { main } from '../browsers';
|
||||
import { app } from 'electron';
|
||||
|
||||
Object.defineProperty(app, 'isPackaged', {
|
||||
get() {
|
||||
return true;
|
||||
},
|
||||
});
|
||||
|
||||
class VersionHandler {
|
||||
private lastestVersion: string;
|
||||
private currentVersion: string;
|
||||
private releaseNotes: string;
|
||||
private isUpdate: boolean;
|
||||
|
||||
constructor() {
|
||||
this.lastestVersion = '';
|
||||
this.currentVersion = pkg.version;
|
||||
this.releaseNotes = '';
|
||||
this.isUpdate = false;
|
||||
autoUpdater.autoDownload = false;
|
||||
autoUpdater.autoInstallOnAppQuit = false;
|
||||
}
|
||||
|
||||
checkForMacAndWindows() {
|
||||
let sendUpdateMsg = false;
|
||||
autoUpdater.removeAllListeners();
|
||||
// update-available 会触发多次,限制只通知一次
|
||||
autoUpdater.checkForUpdates();
|
||||
|
||||
autoUpdater.on('download-progress', ({ percent }) => {
|
||||
console.log('下载进度', percent);
|
||||
// if (percent < 50) {
|
||||
// }
|
||||
this.isUpdate = true;
|
||||
});
|
||||
autoUpdater.on('update-available', (info) => {
|
||||
if (sendUpdateMsg) return;
|
||||
const { version, releaseName = 'normal', releaseNotes } = info;
|
||||
this.lastestVersion = version;
|
||||
|
||||
sendUpdateMsg = true;
|
||||
|
||||
autoUpdater.on('update-downloaded', () => {
|
||||
console.log('下载完成');
|
||||
this.isUpdate = false;
|
||||
if (releaseName === 'major') {
|
||||
autoUpdater.quitAndInstall(true, true);
|
||||
}
|
||||
const mainWindow = main().getWindow()
|
||||
dialog
|
||||
.showMessageBox(mainWindow, {
|
||||
title: '版本更新',
|
||||
message: `发现新版本${this.lastestVersion},是否更新\n\n${releaseNotes}`,
|
||||
type: 'info',
|
||||
buttons: ['稍后提示', '立即更新'],
|
||||
})
|
||||
.then(({ response }) => {
|
||||
console.log(response);
|
||||
if (response === 1) {
|
||||
this.update();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 自动下载安装包
|
||||
if (!this.isUpdate) {
|
||||
autoUpdater.downloadUpdate();
|
||||
console.log('download');
|
||||
}
|
||||
});
|
||||
autoUpdater.on('update-not-available', (info) => {
|
||||
if (sendUpdateMsg) return;
|
||||
sendUpdateMsg = true;
|
||||
});
|
||||
autoUpdater.on('error', () => {
|
||||
this.isUpdate = false;
|
||||
});
|
||||
}
|
||||
|
||||
checkUpdate(): void {
|
||||
this.checkForMacAndWindows();
|
||||
}
|
||||
|
||||
update() {
|
||||
let sendUpdateMsg = false;
|
||||
|
||||
this.checkUpdate();
|
||||
|
||||
autoUpdater.on('update-downloaded', () => {
|
||||
if (sendUpdateMsg) return;
|
||||
sendUpdateMsg = true;
|
||||
this.isUpdate = false;
|
||||
autoUpdater.quitAndInstall(true, true);
|
||||
// App.quit();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export default new VersionHandler();
|
@ -33,6 +33,13 @@ module.exports = {
|
||||
directories: {
|
||||
output: 'build',
|
||||
},
|
||||
// publish: [
|
||||
// {
|
||||
// provider: 'github',
|
||||
// owner: 'rubickCenter',
|
||||
// repo: 'rubick',
|
||||
// },
|
||||
// ],
|
||||
// files: ["dist_electron/**/*"],
|
||||
dmg: {
|
||||
contents: [
|
||||
|
Loading…
x
Reference in New Issue
Block a user