unpixel/src/back/updater.ts

47 lines
1.3 KiB
TypeScript

import semver from 'semver'
import axios from 'axios'
import logger from 'electron-log'
import { dialog, shell } from 'electron'
import pkg from '../../package.json'
const current = semver.coerce(pkg.version)
const url = 'https://api.github.com/repos/cupcakearmy/unpixel/tags'
const interval = 1000 * 60 * 15 // 10 Minutes
export default class Updater {
static init() {
this.check()
}
static async check() {
const { data } = await axios({
method: 'get',
url,
})
// parse tags and reverse sort them to get the highest
const tags = data.map((d: any) => semver.coerce(d.name)).sort(semver.rcompare)
const latest = tags[0]
if (!current) throw new Error('Could not determine current version')
if (semver.lt(current, latest)) {
logger.info('New version available')
dialog
.showMessageBox(null, {
title: 'Update available',
message: 'A newer version is available, please download.',
buttons: ['Download', 'Later'],
cancelId: 1,
})
.then(({ response }) => {
if (response === 0) {
shell.openExternal('https://github.com/cupcakearmy/unpixel/releases')
process.exit(0)
}
})
} else {
logger.info('Up to date')
setTimeout(() => this.check(), interval)
}
}
}