PicList/src/main/utils/updateChecker.ts

69 lines
2.0 KiB
TypeScript
Raw Normal View History

2017-12-23 03:38:19 -05:00
import { dialog, shell } from 'electron'
import db from '~/main/apis/core/datastore'
2017-12-23 03:38:19 -05:00
import axios from 'axios'
2019-12-19 06:17:21 -05:00
import pkg from 'root/package.json'
import { lt } from 'semver'
2017-12-23 03:38:19 -05:00
const version = pkg.version
const releaseUrl = 'https://api.github.com/repos/Molunerfinn/PicGo/releases/latest'
const releaseUrlBackup = 'https://cdn.jsdelivr.net/gh/Molunerfinn/PicGo@latest/package.json'
2017-12-23 03:38:19 -05:00
const downloadUrl = 'https://github.com/Molunerfinn/PicGo/releases/latest'
const checkVersion = async () => {
2019-09-11 07:30:08 -04:00
let showTip = db.get('settings.showUpdateTip')
2017-12-23 03:38:19 -05:00
if (showTip === undefined) {
2019-09-11 07:30:08 -04:00
db.set('settings.showUpdateTip', true)
2017-12-23 03:38:19 -05:00
showTip = true
}
if (showTip) {
2019-12-19 06:17:21 -05:00
let res: any
try {
res = await axios.get(releaseUrl).catch(async () => {
const result = await axios.get(releaseUrlBackup)
return result
})
2019-12-19 06:17:21 -05:00
} catch (err) {
console.log(err)
}
2017-12-23 03:38:19 -05:00
if (res.status === 200) {
const latest = res.data.version || res.data.name
2017-12-23 03:38:19 -05:00
const result = compareVersion2Update(version, latest)
if (result) {
dialog.showMessageBox({
type: 'info',
title: '发现新版本',
buttons: ['Yes', 'No'],
2019-01-13 03:21:48 -05:00
message: `发现新版本${latest},更新了很多功能,是否去下载最新的版本?`,
2017-12-23 03:38:19 -05:00
checkboxLabel: '以后不再提醒',
checkboxChecked: false
2019-12-19 06:17:21 -05:00
}).then(res => {
if (res.response === 0) { // if selected yes
2017-12-23 03:38:19 -05:00
shell.openExternal(downloadUrl)
}
2019-12-19 06:17:21 -05:00
db.set('settings.showUpdateTip', !res.checkboxChecked)
2017-12-23 03:38:19 -05:00
})
}
} else {
return false
}
} else {
return false
}
}
// if true -> update else return false
2019-12-19 06:17:21 -05:00
const compareVersion2Update = (current: string, latest: string) => {
try {
2020-04-30 06:54:48 -04:00
if (latest.includes('beta')) {
const isCheckBetaUpdate = db.get('settings.checkBetaUpdate') !== false
if (!isCheckBetaUpdate) {
return false
}
2017-12-23 03:38:19 -05:00
}
return lt(current, latest)
} catch (e) {
return false
2017-12-23 03:38:19 -05:00
}
}
export default checkVersion