@@ -5,9 +5,46 @@ import { musicInfo } from '@renderer/store/player/state'
5
5
// import { getList } from '@renderer/store/utils'
6
6
import { getNextPlayMusicInfo , resetRandomNextMusicInfo } from '@renderer/core/player'
7
7
import { getMusicUrl } from '@renderer/core/music'
8
- import { checkUrl } from '@renderer/utils/request'
9
8
import { appSetting } from '@renderer/store/setting'
10
9
10
+ let audio : HTMLAudioElement
11
+ const initAudio = ( ) => {
12
+ if ( audio ) return
13
+ audio = new Audio ( )
14
+ audio . controls = false
15
+ audio . preload = 'auto'
16
+ audio . crossOrigin = 'anonymous'
17
+ audio . muted = true
18
+ audio . volume = 0
19
+ audio . autoplay = true
20
+ audio . addEventListener ( 'playing' , ( ) => {
21
+ audio . pause ( )
22
+ } )
23
+ }
24
+ const checkMusicUrl = async ( url : string ) => {
25
+ initAudio ( )
26
+ return new Promise ( ( resolve ) => {
27
+ const clear = ( ) => {
28
+ audio . removeEventListener ( 'error' , handleErr )
29
+ audio . removeEventListener ( 'canplay' , handlePlay )
30
+ }
31
+ const handleErr = ( ) => {
32
+ if ( audio ?. error ?. code !== 1 ) {
33
+ resolve ( false )
34
+ } else {
35
+ resolve ( true )
36
+ }
37
+ }
38
+ const handlePlay = ( ) => {
39
+ clear ( )
40
+ resolve ( true )
41
+ }
42
+ audio . addEventListener ( 'error' , handleErr )
43
+ audio . addEventListener ( 'canplay' , handlePlay )
44
+ audio . src = url
45
+ } )
46
+ }
47
+
11
48
const preloadMusicInfo = {
12
49
isLoading : false ,
13
50
preProgress : 0 ,
@@ -28,9 +65,10 @@ const preloadNextMusicUrl = async(curTime: number) => {
28
65
const url = await getMusicUrl ( { musicInfo : info . musicInfo } ) . catch ( ( ) => '' )
29
66
if ( url ) {
30
67
console . log ( 'preload url' , url )
31
- const result = await checkUrl ( url ) . then ( ( ) => true ) . catch ( ( ) => false )
68
+ const result = await checkMusicUrl ( url )
32
69
if ( ! result ) {
33
70
const url = await getMusicUrl ( { musicInfo : info . musicInfo , isRefresh : true } ) . catch ( ( ) => '' )
71
+ void checkMusicUrl ( url )
34
72
console . log ( 'preload url refresh' , url )
35
73
}
36
74
}
0 commit comments