添加繁忙重试重试

This commit is contained in:
lyswhut
2023-05-05 19:01:57 +08:00
parent 1a3d84d4c4
commit b0bf1bf4be
13 changed files with 104 additions and 42 deletions
+3 -1
View File
@@ -9,6 +9,7 @@ import {
} from '@renderer/utils/ipc'
import { appSetting } from '@renderer/store/setting'
import { langS2T, toNewMusicInfo, toOldMusicInfo } from '@renderer/utils'
import { requestMsg } from '@renderer/utils/message'
const getOtherSourcePromises = new Map()
@@ -187,6 +188,7 @@ export const getOnlineOtherSourceMusicUrl = async({ musicInfos, quality, onToggl
return { musicInfo, url, quality: type, isFromCache: false }
// eslint-disable-next-line @typescript-eslint/promise-function-async
}).catch((err: any) => {
if (err.message == requestMsg.tooManyRequests) throw err
console.log(err)
return getOnlineOtherSourceMusicUrl({ musicInfos, quality, onToggleSource, isRefresh, retryedSource })
})
@@ -220,7 +222,7 @@ export const handleGetOnlineMusicUrl = async({ musicInfo, quality, onToggleSourc
return { musicInfo, url, quality: type, isFromCache: false }
}).catch(async(err: any) => {
console.log(err)
if (!allowToggleSource) throw err
if (!allowToggleSource || err.message == requestMsg.tooManyRequests) throw err
onToggleSource()
// eslint-disable-next-line @typescript-eslint/promise-function-async
return await getOtherSource(musicInfo).then(otherSource => {
+31 -4
View File
@@ -52,12 +52,36 @@ const { addDelayNextTimeout: addLoadTimeout, clearDelayNextTimeout: clearLoadTim
* 检查音乐信息是否已更改
*/
const diffCurrentMusicInfo = (curMusicInfo: LX.Music.MusicInfo | LX.Download.ListItem): boolean => {
return curMusicInfo !== playMusicInfo.musicInfo || isPlay.value
// return curMusicInfo !== playMusicInfo.musicInfo || isPlay.value
return gettingUrlId != curMusicInfo.id || curMusicInfo.id != playMusicInfo.musicInfo?.id || isPlay.value
}
let cancelDelayRetry: (() => void) | null = null
const delayRetry = async(musicInfo: LX.Music.MusicInfo | LX.Download.ListItem, isRefresh = false): Promise<string | null> => {
// if (cancelDelayRetry) cancelDelayRetry()
return new Promise<string | null>((resolve, reject) => {
const time = getRandom(2, 6)
setAllStatus(window.i18n.t('player__geting_url_delay_retry', { time }))
const tiemout = setTimeout(() => {
getMusicPlayUrl(musicInfo, isRefresh, true).then((result) => {
cancelDelayRetry = null
resolve(result)
}).catch(async(err: any) => {
cancelDelayRetry = null
reject(err)
})
}, time * 1000)
cancelDelayRetry = () => {
clearTimeout(tiemout)
cancelDelayRetry = null
resolve(null)
}
})
}
const getMusicPlayUrl = async(musicInfo: LX.Music.MusicInfo | LX.Download.ListItem, isRefresh = false, isRetryed = false): Promise<string | null> => {
// this.musicInfo.url = await getMusicPlayUrl(targetSong, type)
setAllStatus(window.i18n.t('player__geting_url'))
if (appSetting['player.autoSkipOnError']) addLoadTimeout()
// const type = getPlayType(appSetting['player.highQuality'], musicInfo)
@@ -79,6 +103,8 @@ const getMusicPlayUrl = async(musicInfo: LX.Music.MusicInfo | LX.Download.ListIt
diffCurrentMusicInfo(musicInfo) ||
err.message == requestMsg.cancelRequest) return null
if (err.message == requestMsg.tooManyRequests) return delayRetry(musicInfo, isRefresh)
if (!isRetryed) return getMusicPlayUrl(musicInfo, isRefresh, true)
throw err
@@ -86,7 +112,9 @@ const getMusicPlayUrl = async(musicInfo: LX.Music.MusicInfo | LX.Download.ListIt
}
export const setMusicUrl = (musicInfo: LX.Music.MusicInfo | LX.Download.ListItem, isRefresh?: boolean) => {
if (appSetting['player.autoSkipOnError']) addLoadTimeout()
// if (appSetting['player.autoSkipOnError']) addLoadTimeout()
if (!diffCurrentMusicInfo(musicInfo)) return
if (cancelDelayRetry) cancelDelayRetry()
gettingUrlId = musicInfo.id
void getMusicPlayUrl(musicInfo, isRefresh).then((url) => {
if (!url) return
@@ -152,8 +180,7 @@ const handlePlay = () => {
}
const musicInfo = playMusicInfo.musicInfo
if (!musicInfo || gettingUrlId == musicInfo.id) return
gettingUrlId &&= ''
if (!musicInfo) return
setStop()
window.app_event.pause()
+1
View File
@@ -5,4 +5,5 @@ export const requestMsg = {
// unachievable: '哦No😱...接口无法访问了!已帮你切换到临时接口,重试下看能不能播放吧~',
notConnectNetwork: '无法连接到服务器',
cancelRequest: '取消http请求',
tooManyRequests: '服务器繁忙',
} as const
+5 -1
View File
@@ -13,7 +13,11 @@ const api_test = {
family: 4,
})
requestObj.promise = requestObj.promise.then(({ body }) => {
return body.code === 0 ? Promise.resolve({ type, url: body.data }) : Promise.reject(new Error(requestMsg.fail))
switch (body.code) {
case 0: return Promise.resolve({ type, url: body.data })
case 429: return Promise.reject(new Error(requestMsg.tooManyRequests))
default: return Promise.reject(new Error(requestMsg.fail))
}
})
return requestObj
},
+5 -1
View File
@@ -13,7 +13,11 @@ const api_test = {
family: 4,
})
requestObj.promise = requestObj.promise.then(({ body }) => {
return body.code === 0 ? Promise.resolve({ type, url: body.data }) : Promise.reject(new Error(requestMsg.fail))
switch (body.code) {
case 0: return Promise.resolve({ type, url: body.data })
case 429: return Promise.reject(new Error(requestMsg.tooManyRequests))
default: return Promise.reject(new Error(requestMsg.fail))
}
})
return requestObj
},
+6 -1
View File
@@ -1,4 +1,5 @@
import { httpFetch } from '../../request'
import { requestMsg } from '../../message'
import { headers, timeout } from '../options'
import { dnsLookup } from '../utils'
@@ -12,7 +13,11 @@ const api_temp = {
family: 4,
})
requestObj.promise = requestObj.promise.then(({ body }) => {
return body.code === 0 ? Promise.resolve({ type, url: body.data }) : Promise.reject(new Error(body.msg))
switch (body.code) {
case 0: return Promise.resolve({ type, url: body.data })
case 429: return Promise.reject(new Error(requestMsg.tooManyRequests))
default: return Promise.reject(new Error(body.msg))
}
})
return requestObj
},
+5 -1
View File
@@ -24,7 +24,11 @@ const api_test = {
family: 4,
})
requestObj.promise = requestObj.promise.then(({ body }) => {
return body.code === 0 ? Promise.resolve({ type, url: body.data }) : Promise.reject(new Error(requestMsg.fail))
switch (body.code) {
case 0: return Promise.resolve({ type, url: body.data })
case 429: return Promise.reject(new Error(requestMsg.tooManyRequests))
default: return Promise.reject(new Error(requestMsg.fail))
}
})
return requestObj
},
+5 -1
View File
@@ -13,7 +13,11 @@ const api_test = {
family: 4,
})
requestObj.promise = requestObj.promise.then(({ body }) => {
return body.code === 0 ? Promise.resolve({ type, url: body.data }) : Promise.reject(new Error(requestMsg.fail))
switch (body.code) {
case 0: return Promise.resolve({ type, url: body.data })
case 429: return Promise.reject(new Error(requestMsg.tooManyRequests))
default: return Promise.reject(new Error(requestMsg.fail))
}
})
return requestObj
},
+5 -1
View File
@@ -13,7 +13,11 @@ const api_messoer = {
family: 4,
})
requestObj.promise = requestObj.promise.then(({ body }) => {
return body.code === 0 ? Promise.resolve({ type, url: body.data }) : Promise.reject(new Error(requestMsg.fail))
switch (body.code) {
case 0: return Promise.resolve({ type, url: body.data })
case 429: return Promise.reject(new Error(requestMsg.tooManyRequests))
default: return Promise.reject(new Error(requestMsg.fail))
}
})
return requestObj
},
+5 -1
View File
@@ -13,7 +13,11 @@ const api_test = {
family: 4,
})
requestObj.promise = requestObj.promise.then(({ body }) => {
return body.code === 0 ? Promise.resolve({ type, url: body.data }) : Promise.reject(new Error(requestMsg.fail))
switch (body.code) {
case 0: return Promise.resolve({ type, url: body.data })
case 429: return Promise.reject(new Error(requestMsg.tooManyRequests))
default: return Promise.reject(new Error(requestMsg.fail))
}
})
return requestObj
},