47 lines
1.3 KiB
TypeScript
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)
|
|
}
|
|
}
|
|
}
|