import type { Player, PlayerPlugin } from '@oplayer/core' import Danmuku from './danmuku' import type { Options } from './types' // @ts-ignore import subtitleSvg from './danmuku.svg?raw' export * from './types' export default (option: Options): PlayerPlugin => ({ name: 'oplayer-plugin-danmuku', apply: (player: Player) => { let danmuku: Danmuku | null = new Danmuku(player, option) const emitSetting = () => { player.emit('addsetting', { name: 'Danmuku', type: 'switcher', default: true, key: 'danmuku', icon: subtitleSvg, onChange: (flag: boolean, { isInit }: any = {}) => { if (flag) { !isInit && player.emit('notice', { text: 'Show danmuku' }) danmuku?.show() } else { !isInit && player.emit('notice', { text: 'Hide danmuku' }) danmuku?.hide() } } }) } player.on('loadedsetting', emitSetting) player.on('danmukusourcechange', ({ payload }) => { player.emit('removesetting', 'danmuku') emitSetting() danmuku = new Danmuku(player, { ...option, ...payload, source: payload.source }) }) player.on('videosourcechange', function () { danmuku?.destroy() danmuku = null player.emit('removesetting', 'danmuku') }) } })