Explorar el Código

fix(OTA): 优化软件更新下载功能

- 移除不必要的控制台日志输出
- 添加下载失败的错误提示
-优化下载路径为系统下载目录- 增加文件存在检查和删除旧文件的逻辑
- 更新下载完成后的用户提示信息- 修复部分用户反馈的下载问题
panqiuyao hace 7 meses
padre
commit
26963cfcc6
Se han modificado 2 ficheros con 26 adiciones y 9 borrados
  1. 21 3
      electron/controller/ota.js
  2. 5 6
      frontend/src/views/OTA/index.vue

+ 21 - 3
electron/controller/ota.js

@@ -31,14 +31,30 @@ class OTAController extends Controller {
 
     const win = new BrowserWindow({ show: false });
 
+
     // 设置下载路径为系统临时目录
 
     win.webContents.downloadURL(url);
 
+    win.webContents.session.removeAllListeners('will-download');
 
     win.webContents.session.on('will-download', (event, item, webContents) => {
-
-
+      // event.preventDefault();
+      // 设置默认下载路径为系统下载目录
+      const fileName = item.getFilename();
+      const downloadPath = path.join(app.getPath('downloads'), fileName);
+      console.log('下载路径:', downloadPath);
+
+      // 确保目录存在
+      const dir = path.dirname(downloadPath);
+      if (!fs.existsSync(dir)) {
+        fs.mkdirSync(dir, { recursive: true });
+      }
+      if (fs.existsSync(downloadPath)) {
+        fs.unlinkSync(downloadPath); // 删除旧文件
+      }
+      console.log(item);
+      item.setSavePath(downloadPath);
 
 
       item.on('updated', (event, state) => {
@@ -69,6 +85,7 @@ class OTAController extends Controller {
       item.once('done', (event, state) => {
 
         Log.info('[addon:done] 状态: ', state);
+
         if (state === 'completed') {
           Log.info('[addon:autoUpdater] 文件已下载完成: ', item.getSavePath());
           let info = {
@@ -83,11 +100,12 @@ class OTAController extends Controller {
             type: 'info',
             title: '下载完成',
             message: '文件已下载完成,请选择操作:',
-            buttons: ['立即安装', '打开目录', '取消']
+            buttons: ['关闭智惠映并自动安装', '打开目录手动安装', '取消']
           }).then(result => {
             if (result.response === 0) {
               // 用户选择“立即安装”,执行安装操作
               this.install(item.getSavePath());
+
             } else if (result.response === 1) {
               // 用户选择“打开目录”,打开文件所在目录
               shell.openPath(path.dirname(item.getSavePath()));

+ 5 - 6
frontend/src/views/OTA/index.vue

@@ -2,7 +2,7 @@
 import { ref, onMounted, computed } from 'vue';
 import axios from 'axios';
 import packageJson from '@/../../package.json';
-import { ElMessageBox } from 'element-plus';
+import { ElMessage } from 'element-plus';
 import client from "@/stores/modules/client";
 import  icpList from '@/utils/ipc'
 import socket from "@/stores/modules/socket";
@@ -36,7 +36,6 @@ const fetchVersions = async () => {
       }
     });
 
-    console.log(response.data);
     // 确保 response.data 是 JSON 数据
     let data;
     if (typeof response.data === 'string') {
@@ -93,6 +92,7 @@ const socketStore = socket()
 // 下载特定版本
 const downloadSpecificVersion = (url) => {
 
+  clientStore.ipc.removeAllListeners('app.updater');
   clientStore.ipc.removeAllListeners(icpList.ota.updateVersion);
   clientStore.ipc.send(icpList.ota.updateVersion,url);
   clientStore.ipc.on(icpList.ota.updateVersion, async (event, result) => {
@@ -105,10 +105,6 @@ const downloadSpecificVersion = (url) => {
 
   clientStore.ipc.on('app.updater', async (event, result) => {
 
-    console.log('==============================')
-    console.log('app.updater')
-    console.log(event)
-    console.log(result)
 
     try {
       let res =  JSON.parse(result)
@@ -117,6 +113,9 @@ const downloadSpecificVersion = (url) => {
         updateVisible.value = true
         console.log(updateResult.value)
         console.log(updateVisible.value)
+      }else{
+        updateVisible.value = false
+        ElMessage.error('下载失败')
       }
     }catch (e) {
       console.log(e)