-
Notifications
You must be signed in to change notification settings - Fork 241
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
10 changed files
with
197 additions
and
95 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,10 @@ | ||
import { app, ipcMain } from 'electron' | ||
import './updater/index.js' | ||
import updaterEvents from './updater/index.js' | ||
|
||
ipcMain.on('restart-app', () => { | ||
app.relaunch() | ||
app.quit() | ||
}) | ||
export default (mainWindow) => { | ||
ipcMain.on('restart-app', () => { | ||
app.relaunch() | ||
app.quit() | ||
}) | ||
updaterEvents(mainWindow) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,90 +1,75 @@ | ||
import { app, dialog, ipcMain } from 'electron' | ||
import { app, ipcMain } from 'electron' | ||
import { is } from '@electron-toolkit/utils' | ||
import { autoUpdater } from 'electron-updater' | ||
|
||
const path = require('node:path') | ||
|
||
// dev-start, 这里是为了在本地做应用升级测试使用,正式环境请务必删除 | ||
if (is.dev && process.env.ELECTRON_RENDERER_URL) { | ||
autoUpdater.updateConfigPath = path.join(__dirname, '../../../../dev-app-update.yml') | ||
} | ||
export default (mainWindow) => { | ||
// dev-start, 这里是为了在本地做应用升级测试使用,正式环境请务必删除 | ||
if (is.dev && process.env.ELECTRON_RENDERER_URL) { | ||
const updateConfigPath = path.join(process.cwd(), './dev-app-update.yml') | ||
// console.log('updateConfigPath', updateConfigPath) | ||
autoUpdater.updateConfigPath = updateConfigPath | ||
} | ||
|
||
Object.defineProperty(app, 'isPackaged', { | ||
get() { | ||
return true | ||
}, | ||
}) | ||
// dev-end | ||
Object.defineProperty(app, 'isPackaged', { | ||
get() { | ||
return true | ||
}, | ||
}) | ||
// dev-end | ||
|
||
// 触发检查更新(此方法用于被渲染线程调用,例如页面点击检查更新按钮来调用此方法) | ||
ipcMain.on('check-for-update', () => { | ||
console.log('触发检查更新') | ||
autoUpdater.checkForUpdates() | ||
}) | ||
// 触发检查更新(此方法用于被渲染线程调用,例如页面点击检查更新按钮来调用此方法) | ||
ipcMain.on('check-for-update', () => { | ||
console.log('ipcMain:check-for-update') | ||
autoUpdater.checkForUpdates() | ||
}) | ||
|
||
// 设置自动下载为false(默认为true,检测到有更新就自动下载) | ||
autoUpdater.autoDownload = false | ||
// 检测下载错误 | ||
autoUpdater.on('error', (error) => { | ||
console.error('更新异常', error) | ||
}) | ||
// 下载更新 | ||
ipcMain.on('download-update', () => { | ||
console.log('ipcMain:download-update') | ||
autoUpdater.downloadUpdate() | ||
}) | ||
|
||
// 检测是否需要更新 | ||
autoUpdater.on('checking-for-update', () => { | ||
console.log('正在检查更新……') | ||
}) | ||
// 检测到可以更新时 | ||
autoUpdater.on('update-available', (releaseInfo) => { | ||
console.log('检测到新版本,确认是否下载') | ||
const releaseNotes = releaseInfo.releaseNotes | ||
let releaseContent = '' | ||
if (releaseNotes) { | ||
if (typeof releaseNotes === 'string') { | ||
releaseContent = releaseNotes | ||
} | ||
else if (Array.isArray(releaseNotes)) { | ||
releaseNotes.forEach((releaseNote) => { | ||
releaseContent += `${releaseNote}\n` | ||
}) | ||
} | ||
} | ||
else { | ||
releaseContent = '暂无更新说明' | ||
} | ||
// 弹框确认是否下载更新(releaseContent是更新日志) | ||
dialog | ||
.showMessageBox({ | ||
type: 'info', | ||
title: '应用有新的更新', | ||
detail: releaseContent, | ||
message: '发现新版本,是否现在更新?', | ||
buttons: ['否', '是'], | ||
}) | ||
.then(({ response }) => { | ||
if (response === 1) { | ||
// 下载更新 | ||
autoUpdater.downloadUpdate() | ||
} | ||
}) | ||
}) | ||
// 检测到不需要更新时 | ||
autoUpdater.on('update-not-available', () => { | ||
console.log('现在使用的就是最新版本,不用更新') | ||
}) | ||
// 更新下载进度 | ||
autoUpdater.on('download-progress', (progress) => { | ||
console.log('下载进度', progress) | ||
}) | ||
// 当需要更新的内容下载完成后 | ||
autoUpdater.on('update-downloaded', () => { | ||
console.log('下载完成,准备更新') | ||
dialog | ||
.showMessageBox({ | ||
title: '安装更新', | ||
message: '更新下载完毕,应用将重启并进行安装', | ||
}) | ||
.then(() => { | ||
// 退出并安装应用 | ||
setImmediate(() => autoUpdater.quitAndInstall()) | ||
}) | ||
}) | ||
// 安装更新 | ||
ipcMain.on('quit-and-install', () => { | ||
console.log('ipcMain:quit-and-install') | ||
setImmediate(() => autoUpdater.quitAndInstall()) | ||
}) | ||
|
||
// 设置自动下载为false(默认为true,检测到有更新就自动下载) | ||
autoUpdater.autoDownload = false | ||
// 检测下载错误 | ||
autoUpdater.on('error', (error) => { | ||
console.error('update-error', error) | ||
}) | ||
|
||
// 检测是否需要更新 | ||
autoUpdater.on('checking-for-update', (ret) => { | ||
console.log('checking-for-update', ret) | ||
}) | ||
|
||
// 检测到可以更新时 | ||
autoUpdater.on('update-available', (ret) => { | ||
console.log('update-available') | ||
mainWindow.webContents.send('update-available', ret) | ||
}) | ||
|
||
// 检测到不需要更新时 | ||
autoUpdater.on('update-not-available', (ret) => { | ||
console.log('update-not-available') | ||
mainWindow.webContents.send('update-not-available', ret) | ||
}) | ||
|
||
// 更新下载进度 | ||
autoUpdater.on('download-progress', (ret) => { | ||
console.log('download-progress') | ||
mainWindow.webContents.send('download-progress', ret) | ||
}) | ||
|
||
// 当需要更新的内容下载完成后 | ||
autoUpdater.on('update-downloaded', (ret) => { | ||
console.log('update-downloaded') | ||
mainWindow.webContents.send('update-downloaded', ret) | ||
}) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,102 @@ | ||
<template> | ||
<div class="flex flex-col items-center justify-center h-full -mt-8"> | ||
<div class=""> | ||
<img src="@renderer/assets/icon.png" class="h-48" alt="" /> | ||
</div> | ||
<div class="pt-4 text-xl text-center italic text-gray-700"> | ||
📱 使用图形化的 | ||
<a | ||
class="hover:underline text-primary-500" | ||
href="https://github.com/viarotel-org/escrcpy" | ||
target="_blank" | ||
>Scrcpy</a> | ||
显示和控制您的 Android 设备,由 Electron 驱动 | ||
</div> | ||
<div class="pt-16 pb-4"> | ||
<el-button :loading="loading" type="primary" size="large" @click="handleUpdate"> | ||
{{ loading && percent ? `正在更新中...(${percent.toFixed(1)}%)` : '版本检测更新' }} | ||
</el-button> | ||
</div> | ||
<div class="text-sm"> | ||
Supported by | ||
<a class="hover:underline text-primary-500" href="https://viarotel.github.io/" target="_blank">Viarotel</a> | ||
v{{ version }} | ||
</div> | ||
</div> | ||
</template> | ||
|
||
<script> | ||
import { version } from '@root/package.json' | ||
export default { | ||
data() { | ||
return { | ||
loading: false, | ||
version, | ||
percent: 0, | ||
} | ||
}, | ||
created() { | ||
this.onUpdateAvailable() | ||
this.onDownloadProgress() | ||
this.onUpdateDownloaded() | ||
this.$electron.ipcRenderer.on('update-not-available', () => { | ||
this.loading = false | ||
this.$message.success('已经是最新版本') | ||
}) | ||
this.$electron.ipcRenderer.on('error', () => { | ||
this.loading = false | ||
}) | ||
}, | ||
methods: { | ||
handleUpdate() { | ||
this.loading = true | ||
this.$electron.ipcRenderer.send('check-for-update') | ||
}, | ||
onDownloadProgress() { | ||
this.$electron.ipcRenderer.on('download-progress', async (event, ret) => { | ||
console.log('ret', ret) | ||
this.percent = ret.percent | ||
}) | ||
}, | ||
async onUpdateDownloaded() { | ||
this.$electron.ipcRenderer.on('update-downloaded', async (event, ret) => { | ||
console.log('ret', ret) | ||
this.loading = false | ||
try { | ||
await this.$confirm('是否立即重启更新?', '下载新版本成功', { | ||
confirmButtonText: '更新', | ||
cancelButtonText: '取消', | ||
closeOnClickModal: false, | ||
}) | ||
this.$electron.ipcRenderer.send('quit-and-install') | ||
} | ||
catch (error) { | ||
console.warn(error.message) | ||
} | ||
}) | ||
}, | ||
onUpdateAvailable() { | ||
this.$electron.ipcRenderer.on('update-available', async (event, ret) => { | ||
this.loading = false | ||
try { | ||
console.log('ret', ret) | ||
await this.$confirm(ret.releaseNotes, '发现新版本', { | ||
dangerouslyUseHTMLString: true, | ||
closeOnClickModal: false, | ||
confirmButtonText: '更新', | ||
cancelButtonText: '取消', | ||
}) | ||
this.$electron.ipcRenderer.send('download-update') | ||
this.loading = true | ||
} | ||
catch (error) { | ||
console.warn(error.message) | ||
} | ||
}) | ||
}, | ||
}, | ||
} | ||
</script> | ||
|
||
<style></style> |