mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-19 19:51:20 -08:00
31 lines
938 B
TypeScript
31 lines
938 B
TypeScript
import { isHlsSource } from './input'
|
|
|
|
interface RangeEvents {
|
|
emit: (type: string, detail?: Event) => void
|
|
}
|
|
|
|
export async function preflightRange(url: unknown, enabled: boolean, events: RangeEvents, signal?: AbortSignal, isCurrent = (): boolean => true): Promise<boolean> {
|
|
if (signal?.aborted || !isCurrent())
|
|
return false
|
|
if (!enabled || typeof url !== 'string' || isHlsSource(url))
|
|
return true
|
|
|
|
try {
|
|
const res = await fetch(url, signal ? { method: 'HEAD', signal } : { method: 'HEAD' })
|
|
if (signal?.aborted || !isCurrent())
|
|
return false
|
|
const acceptRanges = res.headers.get('accept-ranges')
|
|
if (!acceptRanges || acceptRanges === 'none') {
|
|
events.emit('error', new Event('RangeNotSupported'))
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
catch (error) {
|
|
if (signal?.aborted || !isCurrent())
|
|
return false
|
|
console.warn('Preflight check failed:', error)
|
|
return true
|
|
}
|
|
}
|