import { GetSelfAccount, useAccount, UpdateAccountLoop } from "@/api/account"; import { QueryGetAPI } from "@/api/query"; import { useAuthStore } from "@/store/useAuthStore"; import { useNotificationStore } from "@/store/useNotificationStore"; import { createDiscreteApi, NText, NFlex, NButton } from "naive-ui"; import { BASE_API_URL, isTauri, apiFail } from "./constants"; import { GetNotifactions } from "./notifactions"; import HyperDX from '@hyperdx/browser' import EasySpeech from "easy-speech"; import { checkUpdateNote } from "./UpdateNote"; let currentVersion: string let isHaveNewVersion = false const { notification } = createDiscreteApi(['notification']) export function InitVTsuru() { QueryGetAPI(`${BASE_API_URL}vtsuru/version`) .then((version) => { if (version.code == 200) { currentVersion = version.data const savedVersion = localStorage.getItem('Version') localStorage.setItem('Version', currentVersion) if (currentVersion && savedVersion && savedVersion !== currentVersion) { setTimeout(() => { location.reload() }, 1000) // alert('发现新的版本更新, 请按 Ctrl+F5 强制刷新页面') notification.info({ title: '发现新的版本更新', content: '将自动刷新页面', duration: 5000, meta: () => h(NText, { depth: 3 }, () => currentVersion), }) } else { InitVersionCheck(); } } InitOther(); }) .catch(() => { apiFail.value = true console.log('默认API调用失败, 切换至故障转移节点') }) .finally(async () => { }) } async function InitOther() { if (process.env.NODE_ENV !== 'development') { HyperDX.init({ apiKey: '7d1eb66c-24b8-445e-a406-dc2329fa9423', service: 'vtsuru.live', tracePropagationTargets: [/vtsuru.suki.club/i], // Set to link traces from frontend to backend requests consoleCapture: true, // Capture console logs (default false) advancedNetworkCapture: true, // Capture full HTTP request/response headers and bodies (default false) }) } // 加载其他数据 InitTTS() await GetSelfAccount() const account = useAccount() const useAuth = useAuthStore() if (account.value.id) { if (account.value.biliUserAuthInfo && !useAuth.currentToken) { useAuth.currentToken = account.value.biliUserAuthInfo.token } HyperDX.setGlobalAttributes({ userId: account.value.id.toString(), userName: account.value.name, }) } useAuth.getAuthInfo() GetNotifactions() UpdateAccountLoop() useNotificationStore().init() } function InitVersionCheck() { setInterval(() => { if (isHaveNewVersion) { return } QueryGetAPI(`${BASE_API_URL}vtsuru/version`).then( (keepCheckData) => { if ( keepCheckData.code == 200 && keepCheckData.data != currentVersion ) { isHaveNewVersion = true currentVersion = keepCheckData.data localStorage.setItem('Version', currentVersion) console.log(`[vtsuru] 发现新版本: ${currentVersion}`) if (window.$route.meta.forceReload || isTauri()) { location.reload() } else { const n = notification.info({ title: '发现新的版本更新', content: '是否现在刷新?', meta: () => h(NText, { depth: 3 }, () => currentVersion), action: () => h(NFlex, null, () => [ h( NButton, { text: true, type: 'primary', onClick: () => location.reload(), size: 'small', }, { default: () => '刷新' }, ), h( NButton, { text: true, onClick: () => n.destroy(), size: 'small', }, { default: () => '稍后' }, ), ]), }) } } }, ) }, 60 * 1000) } function InitTTS() { try { const result = EasySpeech.detect() if (result.speechSynthesis) { EasySpeech.init({ maxTimeout: 5000, interval: 250 }) .then(() => console.log('[SpeechSynthesis] 已加载tts服务')) .catch(e => console.error(e)) } else { console.log('[SpeechSynthesis] 当前浏览器不支持tts服务') } } catch (e) { console.log('[SpeechSynthesis] 当前浏览器不支持tts服务') } }