mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-29 11:11:20 -08:00
refactor(multiple-subtitles): [PKG-MULTI-SUB-04] type runtime modules and vendor boundaries
This commit is contained in:
1 parent
beaa93d6cc
commit
da64aae267
28 files changed
+7075
-86
No files matched your search
@@ -0,0 +1,33 @@
|
||||
import type { Cue, WrappedNode } from './parser'
|
||||
import type { Track, TrackOption } from './types'
|
||||
import { WebVTTParser, WebVTTSerializer } from './parser'
|
||||
|
||||
export function parseTracks(vtts: readonly string[], subtitles: readonly TrackOption[]): Track[] {
|
||||
const parser = new WebVTTParser()
|
||||
return vtts.map((vtt, index) => {
|
||||
const tree = parser.parse(vtt, 'metadata')
|
||||
// Options and completed downloads share the same Promise.all index.
|
||||
return { ...tree, url: subtitles[index]!.url, name: subtitles[index]!.name }
|
||||
})
|
||||
}
|
||||
|
||||
export function serializeTracks(trees: readonly (Track | undefined)[]): string {
|
||||
const cues: Cue<WrappedNode>[] = []
|
||||
for (const selected of trees) {
|
||||
// Unknown names retain the historical TypeError at the property access below.
|
||||
const tree = selected!
|
||||
for (const cue of tree.cues) {
|
||||
cues.push({
|
||||
...cue,
|
||||
tree: {
|
||||
...cue.tree,
|
||||
children: cue.tree.children.map(child => ({
|
||||
...child,
|
||||
value: `<div class="art-subtitle-${tree.name}">${child.value}</div>`,
|
||||
})),
|
||||
},
|
||||
})
|
||||
}
|
||||
}
|
||||
return new WebVTTSerializer().serialize(cues)
|
||||
}
|
||||
Reference in new issue
Block a user