mirror of https://gitee.com/godoos/godoos.git
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
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
|
|
}
|
|
})
|