Files

54 lines
1.5 KiB
TypeScript

import type Artplayer from 'artplayer'
import type { DanmukuArt, DanmukuOption } from './types'
import Danmuku from './danmuku'
import heatmap from './heatmap'
import Setting from './setting'
export default function artplayerPluginDanmuku(option: DanmukuOption) {
return (art: Artplayer) => {
// Old declarations type instance.constructor as Function; both supported cores expose these statics.
const danmuku = new Danmuku(art as DanmukuArt, option)
let setting: Setting | undefined
try {
setting = art.isDestroy ? undefined : new Setting(art as DanmukuArt, danmuku)
if (!art.isDestroy && danmuku.option.heatmap) {
heatmap(art as DanmukuArt, danmuku, danmuku.option.heatmap)
}
}
catch (error) {
try {
setting?.destroy()
}
catch {}
try {
danmuku.destroy()
}
catch {}
throw error
}
return {
name: 'artplayerPluginDanmuku' as const,
emit: danmuku.emit.bind(danmuku),
load: danmuku.load.bind(danmuku),
config: danmuku.config.bind(danmuku),
hide: danmuku.hide.bind(danmuku),
show: danmuku.show.bind(danmuku),
reset: danmuku.reset.bind(danmuku),
mount: setting ? setting.mount.bind(setting) : () => {},
get option() {
return danmuku.option
},
get isHide() {
return danmuku.isHide
},
get isStop() {
return danmuku.isStop
},
}
}
}
artplayerPluginDanmuku.icons = Setting.icons