Skip to content

jeevan15498/electron-asar-hot-updater

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

electron-asar-hot-updater-v1

NPM

What it is

A NodeJs module for Electron, that handles app.asar updates. Reconstruction of electron-asar-updater

How it works (Read this first)

  • EAU (Electron Asar Updater) was built upon Electron Application Updater to handle the process of updating the app.asar file inside an Electron app ; it simply replaces the app.asar file (at /resources/) with the new one called "update.asar"!
  • The check for "updates" must by triggered by the application. EAU doesn't make any kind of periodic checks on its own.
  • EAU talks to an API (let's call it so) to tell it if there is a new update.
    • The API receives a request from EAU with the client's current version of the application (must be specified inside the application package.json file).
    • The API then responds with the new update, ... or simply false to abort.
    • If there's an update available the API should respond with the source for this update update.asar file.
    • EAU then downloads the .asar file, deletes the old app.asar and renames the update.asar to app.asar.

But why ? (use cases)

Add New Function and Fix Issues

  • Fix App Paths
  • Error Fix: Cannot find module 'F:\Path\package.json'
  • Fix log file path
  • Add New Function Compare Versions
  • Update Method: Check Update available

Installation

$ npm install --save electron-asar-hot-updater-v1
$ npm install --save electron-asar-hot-updater-v1@version

Now, inside the main.js file, call it like this:

const { app, dialog } = require('electron');
const EAU = require('electron-asar-hot-updater-v1');

app.on('ready', function () {
  // Initiate the module
  EAU.init({
    'api': 'request.json', // The API EAU will talk to
    'server': false // Where to check. true: server side, false: client side, default: true.
  });

  EAU.check(function (error, last, body) {
    if (error) {
      if (error === 'no_update_available') { return false; }
      console.error(error)
      return false
    } else {
      if (body !== undefined) {
        const options = {
          type: 'info',
          title: 'A new version available',
          message: "v" + body.version,
          detail: "A new version available. Click the button below to download the latest version.",
          buttons: ["Update New Version"],
          cancelId: 1
        }
        dialog.showMessageBox(options, function (index) {
          if (index === 0) {
            EAU.progress(function (state) {
                // The state is an object that looks like this:
                /** First state: Response */
                // {
                //   "time":{
                //     "elapsed":0.077,
                //     "remaining":null
                //   },
                //   "speed":null,
                //   "percent":0.000275581753514208,
                //   "size":{
                //     "total":36990838,
                //     "transferred":10194
                //   }
                // }

                /** Last state: Response */

                // {
                //   "time":{
                //   "elapsed":63.327,
                //   "remaining":0.249
                //   },
                //   "speed":581835.2045730889,
                //   "percent":0.996081191780516,
                //   "size":{
                //     "total":36990838,
                //     "transferred":36845878
                //   }
                // }
            })

            EAU.download(function (error) {
                if (error) {
                    dialog.showErrorBox('info', error)
                    return false
                }
                dialog.showErrorBox('info', 'App updated successfully! Restart it please.')
            })
          }
        }
      }
    }
  })
})

API Request Response

{
    "name": "app",
    "version": "0.0.1",
    "asar": "http://127.0.0.1:8083/update.asar",
    "info": "1.fix bug\n2.feat..."
}

If you use a zip file, the plug-in will unzip the file after downloading it, which will make your update file smaller, but you must make sure that update.asar is at the root of the zip package:

── update.zip
   └── update.asar

License

yansenlei

About

✌️ A NodeJs module for Electron, that handles app.asar updates.

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 100.0%