# 自动更新/进程

服务器传过来的版本号大于致信版本号时,会弹出该窗口进行自动更新。

# 代码定位

TIP

代码定位于 src\modules\upgrade\upgrade.jscheckUpdate 函数

# 逻辑说明

为了优化性能,自动更新窗口并不是每次打开致信都需要去加载,所以只在做了版本对比判断后才会显示和加载自动更新窗口。

  • 等待主窗口发出自动更新事件,主窗口还会传一个包含版本信息对象过来,具体格式请在 WEB 端查看。
  • 如果需要更新则加载本地的自动更新页面 src\modules\page_update\download.html
  • 开始执行下载,下载完成后执行安装包进行更新。

# 涉及到的相关函数,代码、代码文件

# 事件监听

// 监听自动更新事件
ipcMain.on("check-update", (event, data) => {
  data && (updateData = data);
  let upgrade = require("./modules/upgrade/upgrade.js");
  upgrade.checkUpdate(false, updateData);
});

// 获取自动更新
ipcMain.on("set-check-update", (event, message) => {
  let upgrade = require("./modules/upgrade/upgrade.js");
  upgrade.checkUpdate(true, updateData);
});

// 下载自动更新文件。
ipcMain.on("update-getfile", (event, args) => {
  const file = require("./modules/configuration/file");
  file.file.getUpdateFile(updateData.url, (data) => {
    event.sender.send("update-progress", data);
  });
  // event.sender.send('update-progress', 0.5);
});

# checkUpdate(isMenu, updateData)

执行更新,判断版本号和通过配置信息中获取是否强制更新。

  • isMenu 是否强制更新,也就是点击取消是跳过更新还是退出程序
  • updateData 包含了版本信息,致信版本和服务器版本进行对比后判断是否显示自动更新

# createUpdateWindow()

创建更新窗口,执行自动更新。

自动更新窗口会发出 update-getfile 事件(见上方事件监听),执行下载更新,下载更新逻辑位于 src\modules\configuration\file.js 文件中,见 getUpdateFile(Url, callback)

# getUpdateFile(Url, callback)

下载更新文件并打开

  • Url 更新文件 Url 地址
  • callback 下载进度回调

# WEB 端调出自动更新

主要是下面的代码,WEB 端代码文件 src\views\_uc-login\ucLogin.vue 可以看到,如下:

sendUpdateData(showVersion, version, xp_version, force, showInfo) {
  // 是否能进行更新
  let canUpdate = false;
  if (ZX_CLIENT.config.isXP) {
    this.downloadUrl = this.getV5BaseURL + this.fileAddress + "zxsetup_xp.exe";
    canUpdate = true;
  } else {
    if (ZX_CLIENT.currentSystem === "darwin") {
      // 先检查版本号
      this.downloadUrl = this.getV5BaseURL + this.fileAddress + "zxsetup.dmg";
      ZX_CLIENT.getVersion((e) => {
        if (e.smallV == "316") {
          // 显示弹窗警告
          this.dialogFormVisible = true;
        } else {
          canUpdate = true;
        }
      });
    } else {
      this.downloadUrl = this.getV5BaseURL + this.fileAddress + "zxsetup.exe";
      canUpdate = true;
    }
  }

  let updateData = {
    showVersion: showVersion,
    version: version,
    xp_version: xp_version,
    url: this.downloadUrl,
    force: force,
    showInfo: showInfo,
  };
  setTimeout(() => {
    if (canUpdate) {
      ZX_CLIENT.checkUpdate(updateData);
    }
  }, 1200);
}

# ZX_CLIENT.checkUpdate(updateData)

执行自动更新

  • updateData 当前自动更新信息