You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

88 lines
2.9 KiB

import { defineStore } from "pinia";
import { ref } from "vue";
import { getSystemKey, setSystemKey, parseJson, getSystemConfig } from '@/system/config'
import { RestartApp } from '@/util/goutil';
import { ElMessage } from 'element-plus'
export const useUpgradeStore = defineStore('upgradeStore', () => {
const hasUpgrade = ref(false);
const hasNotice = ref(false);
const hasAd = ref(false);
const updateUrl = ref('');
const versionTag = ref(0)
const currentVersion = ref(0)
const progress = ref(0)
const noticeList:any = ref([])
const adList:any = ref([])
async function checkUpdate() {
const config = getSystemConfig();
currentVersion.value = config.version;
const releaseRes = await fetch(`${config.apiUrl}/system/updateInfo`)
if (!releaseRes.ok) return;
const releaseData = await releaseRes.json()
versionTag.value = releaseData.version
if(versionTag.value > config.version){
hasUpgrade.value = true
updateUrl.value = releaseData.url
}
if (releaseData.noticeList && releaseData.noticeList.length > 0) {
hasNotice.value = true
noticeList.value = releaseData.noticeList
}
if (!hasUpgrade.value && releaseData.adList && releaseData.adList.length > 0) {
hasAd.value = true
adList.value = releaseData.adList
}
}
async function update() {
const apiUrl = getSystemKey('apiUrl')
const upUrl = `${apiUrl}/system/update?url=${updateUrl.value}`
const upRes = await fetch(upUrl)
if (!upRes.ok) return;
const reader: any = upRes.body?.getReader();
if (!reader) {
ElMessage({
type: 'error',
message: "the system has not stream!"
})
}
while (true) {
const { done, value } = await reader.read();
if (done) {
reader.releaseLock();
break;
}
const rawjson = new TextDecoder().decode(value);
const json = parseJson(rawjson);
//console.log(json)
if (json) {
if (json.progress) {
progress.value = json.progress
}
if (json.updateCompleted) {
hasUpgrade.value = false
progress.value = 0
ElMessage({
type: 'success',
message: "update completed!"
})
setSystemKey('version', versionTag.value)
currentVersion.value = versionTag.value
RestartApp()
break;
}
}
}
}
return {
hasUpgrade,
hasNotice,
hasAd,
versionTag,
updateUrl,
noticeList,
adList,
progress,
checkUpdate,
update
}
})