Files
vtsuru.live/src/data/Initializer.ts
Megghy 07948e6777 feat: 更新项目配置和依赖,增强功能和用户体验
- 完成弹幕机功能
- 在 .editorconfig 中新增对 vine.ts 文件的支持。
- 更新 package.json 中多个依赖的版本,提升稳定性和性能。
- 在 vite.config.mts 中引入 @guolao/vue-monaco-editor 插件,增强代码编辑功能。
- 在 App.vue 中调整内容填充的样式,优化界面布局。
- 新增获取配置文件哈希的 API 方法,提升配置管理能力。
- 在多个组件中优化了样式和逻辑,提升用户交互体验。
2025-04-25 00:08:06 +08:00

150 lines
4.6 KiB
TypeScript

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<string>(`${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<string>(`${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服务')
}
}