| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- const { app: electronApp } = require('electron');
- const { autoUpdater } = require("electron-updater");
- const is = require('ee-core/utils/is');
- const Log = require('ee-core/log');
- const Conf = require('ee-core/config');
- const CoreWindow = require('ee-core/electron/window');
- /**
- * 自动升级插件
- * @class
- */
- class AutoUpdaterAddon {
- constructor() {
- }
- /**
- * 创建
- */
- create () {
- Log.info('[addon:autoUpdater] load');
- const cfg = Conf.getValue('addons.autoUpdater');
- if ((is.windows() && cfg.windows)
- || (is.macOS() && cfg.macOS)
- || (is.linux() && cfg.linux))
- {
- // continue
- } else {
- return
- }
- // 是否检查更新
- if (cfg.force) {
- this.checkUpdate();
- }
- const status = {
- error: -1,
- available: 1,
- noAvailable: 2,
- downloading: 3,
- downloaded: 4,
- }
- const version = electronApp.getVersion();
- Log.info('[addon:autoUpdater] current version: ', version);
-
- // 设置下载服务器地址
- let server = cfg.options.url;
- let lastChar = server.substring(server.length - 1);
- server = lastChar === '/' ? server : server + "/";
- //Log.info('[addon:autoUpdater] server: ', server);
- cfg.options.url = server;
-
- // 是否后台自动下载
- autoUpdater.autoDownload = cfg.force ? true : false;
-
- try {
- autoUpdater.setFeedURL(cfg.options);
- } catch (error) {
- Log.error('[addon:autoUpdater] setFeedURL error : ', error);
- }
-
- autoUpdater.on('checking-for-update', () => {
- //sendStatusToWindow('正在检查更新...');
- })
- autoUpdater.on('update-available', (info) => {
- info.status = status.available;
- info.desc = '有可用更新';
- this.sendStatusToWindow(info);
- })
- autoUpdater.on('update-not-available', (info) => {
- info.status = status.noAvailable;
- info.desc = '没有可用更新';
- this.sendStatusToWindow(info);
- })
- autoUpdater.on('error', (err) => {
- let info = {
- status: status.error,
- desc: err
- }
- this.sendStatusToWindow(info);
- })
- autoUpdater.on('download-progress', (progressObj) => {
- let percentNumber = parseInt(progressObj.percent);
- let totalSize = this.bytesChange(progressObj.total);
- let transferredSize = this.bytesChange(progressObj.transferred);
- let text = '已下载 ' + percentNumber + '%';
- text = text + ' (' + transferredSize + "/" + totalSize + ')';
-
- let info = {
- status: status.downloading,
- desc: text,
- percentNumber: percentNumber,
- totalSize: totalSize,
- transferredSize: transferredSize
- }
- Log.info('[addon:autoUpdater] progress: ', text);
- this.sendStatusToWindow(info);
- })
- autoUpdater.on('update-downloaded', (info) => {
- info.status = status.downloaded;
- info.desc = '下载完成';
- this.sendStatusToWindow(info);
- // quit and update
- // app.appQuit();
- autoUpdater.quitAndInstall();
- });
- }
- /**
- * 检查更新
- */
- checkUpdate () {
- autoUpdater.checkForUpdates();
- }
-
- /**
- * 下载更新
- */
- download () {
- autoUpdater.downloadUpdate();
- }
- /**
- * 向前端发消息
- */
- sendStatusToWindow(content = {}) {
- const textJson = JSON.stringify(content);
- const channel = 'app.updater';
- const win = CoreWindow.getMainWindow();
- win.webContents.send(channel, textJson);
- }
-
- /**
- * 单位转换
- */
- bytesChange (limit) {
- let size = "";
- if(limit < 0.1 * 1024){
- size = limit.toFixed(2) + "B";
- }else if(limit < 0.1 * 1024 * 1024){
- size = (limit/1024).toFixed(2) + "KB";
- }else if(limit < 0.1 * 1024 * 1024 * 1024){
- size = (limit/(1024 * 1024)).toFixed(2) + "MB";
- }else{
- size = (limit/(1024 * 1024 * 1024)).toFixed(2) + "GB";
- }
- let sizeStr = size + "";
- let index = sizeStr.indexOf(".");
- let dou = sizeStr.substring(index + 1 , index + 3);
- if(dou == "00"){
- return sizeStr.substring(0, index) + sizeStr.substring(index + 3, index + 5);
- }
- return size;
- }
- }
- AutoUpdaterAddon.toString = () => '[class AutoUpdaterAddon]';
- module.exports = AutoUpdaterAddon;
|