mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-28 10:31:20 -08:00
refactor(core): CORE-15 type subtitles and own request and track lifetimes
This commit is contained in:
1 parent
64d1939daa
commit
1b83081e8f
28 files changed
+11286
-405
No files matched your search
@@ -0,0 +1,45 @@
|
||||
import type ResourceScope from '../lifecycle/scope'
|
||||
import { getScope } from '../lifecycle/instance'
|
||||
import SubtitleRequest from './request'
|
||||
|
||||
export interface SubtitleState {
|
||||
scope: ResourceScope
|
||||
request?: SubtitleRequest
|
||||
track?: ResourceScope
|
||||
ownedURL?: string
|
||||
revision: number
|
||||
render: number
|
||||
trackRevision: number
|
||||
}
|
||||
|
||||
const states = new WeakMap<object, SubtitleState>()
|
||||
|
||||
export function initSubtitleState(subtitle: object, art: object): SubtitleState {
|
||||
const scope = getScope(art).child()
|
||||
const state: SubtitleState = { scope, revision: 0, render: 0, trackRevision: 0 }
|
||||
states.set(subtitle, state)
|
||||
scope.add(() => {
|
||||
releaseSubtitleURL(state)
|
||||
})
|
||||
return state
|
||||
}
|
||||
|
||||
export function subtitleState(subtitle: object): SubtitleState {
|
||||
return states.get(subtitle)!
|
||||
}
|
||||
|
||||
export function beginSubtitleRequest(state: SubtitleState): SubtitleRequest {
|
||||
const previous = state.request
|
||||
const request = new SubtitleRequest(state.scope)
|
||||
state.request = request
|
||||
state.revision += 1
|
||||
previous?.cancel()
|
||||
return request
|
||||
}
|
||||
|
||||
export function releaseSubtitleURL(state: SubtitleState): void {
|
||||
const url = state.ownedURL
|
||||
state.ownedURL = undefined
|
||||
if (url)
|
||||
URL.revokeObjectURL(url)
|
||||
}
|
||||
Reference in new issue
Block a user