mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-14 00:06:17 -08:00
46 lines
1.2 KiB
TypeScript
46 lines
1.2 KiB
TypeScript
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)
|
|
}
|