This commit is contained in:
Folltoshe 2023-06-29 02:50:24 +08:00
parent e246d4224d
commit ef6dc31ec2

View File

@ -162,9 +162,9 @@ export const getPlayQuality = (musicInfo: LX.Music.MusicInfoOnline): LX.Quality
return '128k' return '128k'
} }
export const getOnlineOtherSourceMusicUrl = async({ musicInfos, quality, onToggleSource, isRefresh, retryedSource = [] }: { export const getOnlineOtherSourceMusicUrl = async({ musicInfos, quality = '128k', onToggleSource, isRefresh, retryedSource = [] }: {
musicInfos: LX.Music.MusicInfoOnline[] musicInfos: LX.Music.MusicInfoOnline[]
quality?: LX.Quality | null quality?: LX.Quality
onToggleSource: (musicInfo?: LX.Music.MusicInfoOnline) => void onToggleSource: (musicInfo?: LX.Music.MusicInfoOnline) => void
isRefresh: boolean isRefresh: boolean
retryedSource?: LX.OnlineSource[] retryedSource?: LX.OnlineSource[]
@ -175,22 +175,21 @@ export const getOnlineOtherSourceMusicUrl = async({ musicInfos, quality, onToggl
isFromCache: boolean isFromCache: boolean
}> => { }> => {
let musicInfo: LX.Music.MusicInfoOnline | null = null let musicInfo: LX.Music.MusicInfoOnline | null = null
let itemQuality: LX.Quality | null = null
// eslint-disable-next-line no-cond-assign // eslint-disable-next-line no-cond-assign
while (musicInfo = (musicInfos.shift() as LX.Music.MusicInfoOnline)) { while (musicInfo = (musicInfos.shift() as LX.Music.MusicInfoOnline)) {
if (retryedSource.includes(musicInfo.source)) continue if (retryedSource.includes(musicInfo.source)) continue
retryedSource.push(musicInfo.source) retryedSource.push(musicInfo.source)
if (!assertApiSupport(musicInfo.source)) continue if (!assertApiSupport(musicInfo.source)) continue
itemQuality = quality ?? getPlayQuality(musicInfo) if (!musicInfo.meta._qualitys[quality]) continue
if (!musicInfo.meta._qualitys[itemQuality]) continue
console.log('try toggle to: ', musicInfo.source, musicInfo.name, musicInfo.singer, musicInfo.interval) console.log('try toggle to: ', musicInfo.source, musicInfo.name, musicInfo.singer, musicInfo.interval)
onToggleSource(musicInfo) onToggleSource(musicInfo)
break break
} }
if (!musicInfo || !itemQuality) { if (!musicInfo) {
if (appSetting['player.autoLowerQualityOnError'] && quality && quality != '128k') { if (appSetting['player.autoLowerQualityOnError'] && quality != '128k') {
const rangeType = sliceQualityList(quality, true) const rangeType = sliceQualityList(quality, true)
const type = rangeType[0] const type = rangeType[0]
if (rangeType.length > 0 && type) return getOnlineOtherSourceMusicUrl({ musicInfos, quality: type, onToggleSource, isRefresh, retryedSource: [] }) if (rangeType.length > 0 && type) return getOnlineOtherSourceMusicUrl({ musicInfos, quality: type, onToggleSource, isRefresh, retryedSource: [] })
@ -198,12 +197,12 @@ export const getOnlineOtherSourceMusicUrl = async({ musicInfos, quality, onToggl
throw new Error(window.i18n.t('toggle_source_failed')) throw new Error(window.i18n.t('toggle_source_failed'))
} }
const cachedUrl = await getStoreMusicUrl(musicInfo, itemQuality) const cachedUrl = await getStoreMusicUrl(musicInfo, quality)
if (cachedUrl && !isRefresh) return { url: cachedUrl, musicInfo, quality: itemQuality, isFromCache: true } if (cachedUrl && !isRefresh) return { url: cachedUrl, musicInfo, quality, isFromCache: true }
let reqPromise let reqPromise
try { try {
reqPromise = musicSdk[musicInfo.source].getMusicUrl(toOldMusicInfo(musicInfo), itemQuality).promise reqPromise = musicSdk[musicInfo.source].getMusicUrl(toOldMusicInfo(musicInfo), quality).promise
} catch (err: any) { } catch (err: any) {
reqPromise = Promise.reject(err) reqPromise = Promise.reject(err)
} }
@ -215,7 +214,7 @@ export const getOnlineOtherSourceMusicUrl = async({ musicInfos, quality, onToggl
}).catch((err: any) => { }).catch((err: any) => {
if (err.message == requestMsg.tooManyRequests) throw err if (err.message == requestMsg.tooManyRequests) throw err
console.log(err) console.log(err)
return getOnlineOtherSourceMusicUrl({ musicInfos, quality: quality ?? itemQuality, onToggleSource, isRefresh, retryedSource }) return getOnlineOtherSourceMusicUrl({ musicInfos, quality, onToggleSource, isRefresh, retryedSource })
}) })
} }
@ -275,7 +274,7 @@ export const handleGetOnlineMusicUrl = async({ musicInfo, quality, onToggleSourc
return getOnlineOtherSourceMusicUrl({ return getOnlineOtherSourceMusicUrl({
musicInfos: [...otherSource], musicInfos: [...otherSource],
onToggleSource, onToggleSource,
quality: rawQuality ?? quality, quality: rawQuality ?? targetQuality,
isRefresh, isRefresh,
retryedSource: [musicInfo.source], retryedSource: [musicInfo.source],
}) })