refactor(core): CORE-04 scope initialization and make destruction reentrant-safe

This commit is contained in:
Harvey Zhao committed 2026-09-11 00:43:49 +08:00
1 parent 3e38dd0d19
commit 4eec8112fa
32 files changed
+2779 -189

No files matched your search

+7 -3
View File
@@ -1,5 +1,7 @@
import config from '../config'
import { addClass, isMobile, setStyle, silencePromise, sleep } from '../utils'
import { getScope } from '../lifecycle/instance'
import { wait } from '../lifecycle/resources'
import { addClass, isMobile, setStyle, silencePromise } from '../utils'
export default function eventInit(art) {
const {
@@ -63,7 +65,8 @@ export default function eventInit(art) {
art.on('video:error', async (error) => {
if (reconnectTime < constructor.RECONNECT_TIME_MAX) {
await sleep(constructor.RECONNECT_SLEEP_TIME)
if (!await wait(getScope(art), constructor.RECONNECT_SLEEP_TIME) || getScope(art).closed)
return
reconnectTime += 1
art.url = option.url
notice.show = `${i18n.get('Reconnect')}: ${reconnectTime}`
@@ -74,7 +77,8 @@ export default function eventInit(art) {
art.loading.show = false
art.controls.show = true
addClass($player, 'art-error')
await sleep(constructor.RECONNECT_SLEEP_TIME)
if (!await wait(getScope(art), constructor.RECONNECT_SLEEP_TIME) || getScope(art).closed)
return
notice.show = i18n.get('Video Load Failed')
}
})
+7 -3
View File
@@ -1,4 +1,6 @@
import { def, getExt, sleep } from '../utils'
import { getScope } from '../lifecycle/instance'
import { wait } from '../lifecycle/resources'
import { def, getExt } from '../utils'
export default function urlMix(art) {
const {
@@ -17,7 +19,8 @@ export default function urlMix(art) {
const typeCallback = option.customType[typeName]
if (typeName && typeCallback) {
await sleep()
if (!await wait(getScope(art)) || getScope(art).closed)
return
art.loading.show = true
typeCallback.call(art, $video, newUrl, art)
}
@@ -36,7 +39,8 @@ export default function urlMix(art) {
}
}
else {
await sleep()
if (!await wait(getScope(art)) || getScope(art).closed)
return
art.loading.show = true
}
},