新增 我的列表-换源播放 功能

This commit is contained in:
lyswhut
2024-08-17 13:44:11 +08:00
parent bb5b667613
commit 584c12e60f
36 changed files with 559 additions and 93 deletions
+3 -2
View File
@@ -8,17 +8,18 @@ import {
} from './online'
import { buildLyricInfo, getCachedLyricInfo } from './utils'
export const getMusicUrl = async({ musicInfo, isRefresh, onToggleSource = () => {} }: {
export const getMusicUrl = async({ musicInfo, isRefresh, allowToggleSource = true, onToggleSource = () => {} }: {
musicInfo: LX.Download.ListItem
isRefresh: boolean
onToggleSource?: (musicInfo?: LX.Music.MusicInfoOnline) => void
allowToggleSource?: boolean
}): Promise<string> => {
if (!isRefresh) {
const path = await getDownloadFilePath(musicInfo, appSetting['download.savePath'])
if (path) return path
}
return getOnlineMusicUrl({ musicInfo: musicInfo.metadata.musicInfo, isRefresh, onToggleSource })
return getOnlineMusicUrl({ musicInfo: musicInfo.metadata.musicInfo, isRefresh, onToggleSource, allowToggleSource })
}
export const getPicUrl = async({ musicInfo, isRefresh, listId, onToggleSource = () => {} }: {
+5 -3
View File
@@ -24,18 +24,20 @@ export const getMusicUrl = async({
quality,
isRefresh = false,
onToggleSource,
allowToggleSource,
}: {
musicInfo: LX.Music.MusicInfo | LX.Download.ListItem
isRefresh?: boolean
quality?: LX.Quality
onToggleSource?: (musicInfo?: LX.Music.MusicInfoOnline) => void
allowToggleSource?: boolean
}): Promise<string> => {
if ('progress' in musicInfo) {
return getDownloadMusicUrl({ musicInfo, isRefresh, onToggleSource })
return getDownloadMusicUrl({ musicInfo, isRefresh, onToggleSource, allowToggleSource })
} else if (musicInfo.source == 'local') {
return getLocalMusicUrl({ musicInfo, isRefresh, onToggleSource })
return getLocalMusicUrl({ musicInfo, isRefresh, onToggleSource, allowToggleSource })
} else {
return getOnlineMusicUrl({ musicInfo, isRefresh, quality, onToggleSource })
return getOnlineMusicUrl({ musicInfo, isRefresh, quality, onToggleSource, allowToggleSource })
}
}
+4 -1
View File
@@ -66,9 +66,10 @@ const getOtherSourceByLocal = async<T>(musicInfo: LX.Music.MusicInfoLocal, handl
throw new Error('source not found')
}
export const getMusicUrl = async({ musicInfo, isRefresh, onToggleSource = () => {} }: {
export const getMusicUrl = async({ musicInfo, isRefresh, allowToggleSource = true, onToggleSource = () => {} }: {
musicInfo: LX.Music.MusicInfoLocal
isRefresh: boolean
allowToggleSource?: boolean
onToggleSource?: (musicInfo?: LX.Music.MusicInfoOnline) => void
}): Promise<string> => {
if (!isRefresh) {
@@ -83,6 +84,8 @@ export const getMusicUrl = async({ musicInfo, isRefresh, onToggleSource = () =>
})
} catch {}
if (!allowToggleSource) throw new Error('failed')
onToggleSource()
return getOtherSourceByLocal(musicInfo, async(otherSource) => {
return getOnlineOtherSourceMusicUrl({ musicInfos: [...otherSource], onToggleSource, isRefresh }).then(({ url, quality: targetQuality, musicInfo: targetMusicInfo, isFromCache }) => {