lx-music-desktop/src/renderer/core/useApp/useUpdate.js
2021-12-03 22:11:11 +08:00

107 lines
2.9 KiB
JavaScript

import { useAction, nextTick, onBeforeUnmount } from '@renderer/utils/vueTools'
import { onUpdateAvailable, onUpdateDownloaded, onUpdateError, onUpdateNotAvailable, onUpdateProgress } from '@renderer/utils/tools'
import { compareVer } from '@renderer/utils'
import { versionInfo } from '@renderer/core/share'
export default (setting) => {
const getVersionInfo = useAction('getVersionInfo')
// 更新超时定时器
let updateTimeout = setTimeout(() => {
updateTimeout = null
versionInfo.isTimeOut = true
nextTick(() => {
showUpdateModal()
})
}, 60 * 30 * 1000)
const clearUpdateTimeout = () => {
if (!updateTimeout) return
clearTimeout(updateTimeout)
updateTimeout = null
}
const showUpdateModal = () => {
(versionInfo.newVersion && versionInfo.newVersion.history
? Promise.resolve(versionInfo.newVersion)
: getVersionInfo().then(body => {
versionInfo.newVersion = body
return body
})
).catch(() => {
if (versionInfo.newVersion) return versionInfo.newVersion
versionInfo.isUnknow = true
let result = {
version: '0.0.0',
desc: null,
}
versionInfo.newVersion = result
return result
}).then(result => {
if (result.version == '0.0.0') {
versionInfo.isUnknow = true
versionInfo.showModal = true
return
}
if (compareVer(versionInfo.version, result.version) != -1) {
versionInfo.isLatestVer = true
return
}
if (result.version === setting.value.ignoreVersion) return
// console.log(this.version)
nextTick(() => {
versionInfo.showModal = true
})
})
}
const rUpdateAvailable = onUpdateAvailable((event, info) => {
versionInfo.isDownloading = true
getVersionInfo().catch(() => ({
version: info.version,
desc: info.releaseNotes,
})).then(body => {
// console.log(body)
versionInfo.newVersion = body
nextTick(() => {
versionInfo.showModal = true
})
})
})
const rUpdateNotAvailable = onUpdateNotAvailable((event, info) => {
clearUpdateTimeout()
versionInfo.newVersion = {
version: info.version,
desc: info.releaseNotes,
}
versionInfo.isLatestVer = true
})
const rUpdateError = onUpdateError((event, info) => {
clearUpdateTimeout()
versionInfo.isError = true
nextTick(() => {
showUpdateModal()
})
})
const rUpdateProgress = onUpdateProgress((event, progress) => {
versionInfo.downloadProgress = progress
})
const rUpdateDownloaded = onUpdateDownloaded((event, info) => {
clearUpdateTimeout()
versionInfo.isDownloaded = true
nextTick(() => {
showUpdateModal()
})
})
onBeforeUnmount(() => {
clearUpdateTimeout()
rUpdateAvailable()
rUpdateNotAvailable()
rUpdateError()
rUpdateProgress()
rUpdateDownloaded()
})
}