添加源存在性检查

pull/1050/head
lyswhut 2022-11-04 15:18:25 +08:00
parent 9e6bfaada4
commit 303d712860
15 changed files with 26 additions and 24 deletions

View File

@ -62,7 +62,7 @@ export default ({
})
const showMenu = (event, musicInfo) => {
itemMenuControl.sourceDetail = !!musicSdk[musicInfo.source].getMusicDetailPageUrl
itemMenuControl.sourceDetail = !!musicSdk[musicInfo.source]?.getMusicDetailPageUrl
// this.listMenu.itemMenuControl.play =
// this.listMenu.itemMenuControl.playLater =
itemMenuControl.download = assertApiSupport(musicInfo.source)

View File

@ -19,7 +19,7 @@ export default ({ props }) => {
const handleOpenMusicDetail = index => {
const minfo = props.list[index]
const url = musicSdk[minfo.source].getMusicDetailPageUrl(toOldMusicInfo(minfo))
const url = musicSdk[minfo.source]?.getMusicDetailPageUrl?.(toOldMusicInfo(minfo))
if (!url) return
openUrl(url)
}

View File

@ -17,7 +17,7 @@ export const sourceList: SourceLists = markRaw({
for (const source of music.sources) {
if (!music[source.id as LX.OnlineSource].hotSearch) continue
if (!music[source.id as LX.OnlineSource]?.hotSearch) continue
sources.push(source.id as LX.OnlineSource)
sourceList[source.id as LX.OnlineSource] = reactive<string[]>([])
}
@ -52,10 +52,10 @@ export const getList = async(source: Source): Promise<string[]> => {
task.push(
sourceList[source]?.length
? Promise.resolve({ source, list: sourceList[source] })
: music[source].hotSearch.getList().catch((err: any) => {
: music[source]?.hotSearch.getList().catch((err: any) => {
console.log(err)
return { source, list: [] }
}),
}) ?? Promise.reject(new Error('source not found: ' + source)),
)
}
return Promise.all(task).then((results: any[]) => {
@ -63,11 +63,11 @@ export const getList = async(source: Source): Promise<string[]> => {
})
} else {
if (sourceList[source]?.length) return Promise.resolve(sourceList[source] as string[])
if (!music[source].hotSearch) {
if (!music[source]?.hotSearch) {
setList(source, [])
return Promise.resolve([])
}
return music[source].hotSearch.getList().then(data => setList(source, data.list))
return music[source]?.hotSearch.getList().then(data => setList(source, data.list))
}
}

View File

@ -52,7 +52,7 @@ export const getListDetail = async(id: string, page: number, isRefresh = false):
const [source, bangId] = id.split('__') as [LX.OnlineSource, string]
return musicSdk[source]?.leaderboard.getList(bangId, page).then((result: ListDetailInfo) => {
return musicSdk[source]?.leaderboard?.getList(bangId, page).then((result: ListDetailInfo) => {
result.list = markRawList(deduplicationList(result.list.map(m => toNewMusicInfo(m))))
cache.set(key, result)
return result
@ -78,7 +78,7 @@ export const getListDetailAll = async(id: string, isRefresh = false): Promise<LX
result.list = markRawList(deduplicationList(result.list.map(m => toNewMusicInfo(m))))
cache.set(key, result)
return result
}) ?? Promise.reject(new Error('source not found'))
}) ?? Promise.reject(new Error('source not found' + source))
}
return await loadData(bangId, 1).then((result: ListDetailInfo) => {
if (result.total <= result.limit) return result.list

View File

@ -6,7 +6,7 @@ export declare type Source = LX.OnlineSource
export const sources: LX.OnlineSource[] = markRaw([])
for (const source of music.sources) {
if (!music[source.id as LX.OnlineSource].leaderboard?.getBoards) continue
if (!music[source.id as LX.OnlineSource]?.leaderboard?.getBoards) continue
sources.push(source.id as LX.OnlineSource)
}

View File

@ -90,7 +90,7 @@ export const search = async(text: string, page: number, sourceId: LX.OnlineSourc
let task = []
for (const source of sources) {
if (source == 'all') continue
task.push(music[source].musicSearch.search(text, page, listInfos.all.limit).catch((error: any) => {
task.push((music[source]?.musicSearch.search(text, page, listInfos.all.limit) ?? Promise.reject(new Error('source not found: ' + source))).catch((error: any) => {
console.log(error)
return {
allPage: 1,

View File

@ -32,7 +32,7 @@ export const listInfos: ListInfos = markRaw({
})
export const maxPages: Partial<Record<LX.OnlineSource, number>> = {}
for (const source of music.sources) {
if (!music[source.id as LX.OnlineSource].musicSearch) continue
if (!music[source.id as LX.OnlineSource]?.musicSearch) continue
sources.push(source.id as LX.OnlineSource)
listInfos[source.id as LX.OnlineSource] = reactive<ListInfo>({
page: 1,

View File

@ -91,7 +91,7 @@ export const search = async(text: string, page: number, sourceId: LX.OnlineSourc
let task = []
for (const source of sources) {
if (source == 'all' || (page > 1 && page > (maxPages[source] as number))) continue
task.push(music[source].songList.search(text, page, listInfos.all.limit).catch((error: any) => {
task.push((music[source]?.songList.search(text, page, listInfos.all.limit) ?? Promise.reject(new Error('source not found: ' + source))).catch((error: any) => {
console.log(error)
return {
list: [],
@ -109,10 +109,10 @@ export const search = async(text: string, page: number, sourceId: LX.OnlineSourc
if (listInfo?.key == key && listInfo?.list.length) return listInfo?.list
listInfo.noItemLabel = window.i18n.t('list__loading')
listInfo.key = key
return music[sourceId].songList.search(text, page, listInfo.limit).then((data: SearchResult) => {
return (music[sourceId]?.songList.search(text, page, listInfo.limit).then((data: SearchResult) => {
if (key != listInfo.key) return []
return setList(data, page, text)
}).catch((error: any) => {
}) ?? Promise.reject(new Error('source not found: ' + sourceId))).catch((error: any) => {
resetListInfo(sourceId)
listInfo.noItemLabel = window.i18n.t('list__load_failed')
console.log(error)

View File

@ -31,7 +31,7 @@ export const listInfos: ListInfos = markRaw({
})
export const maxPages: Partial<Record<LX.OnlineSource, number>> = {}
for (const source of music.sources) {
if (!music[source.id as LX.OnlineSource].songList?.search) continue
if (!music[source.id as LX.OnlineSource]?.songList?.search) continue
sources.push(source.id as LX.OnlineSource)
listInfos[source.id as LX.OnlineSource] = reactive<SearchListInfo>({
page: 1,

View File

@ -154,7 +154,7 @@ export const getListDetailAll = async(id: string, source: LX.OnlineSource, isRef
result.list = markRawList(deduplicationList(result.list.map(m => toNewMusicInfo(m))))
cache.set(key, result)
return result
}) ?? Promise.reject(new Error('source not found'))
}) ?? Promise.reject(new Error('source not found' + source))
}
return await loadData(id, 1).then((result: ListDetailInfo) => {
if (result.total <= result.limit) return result.list

View File

@ -10,7 +10,7 @@ export const sources: LX.OnlineSource[] = markRaw([])
export const sortList = markRaw<Partial<Record<LX.OnlineSource, SortInfo[]>>>({})
for (const source of music.sources) {
const songList = music[source.id as LX.OnlineSource].songList
const songList = music[source.id as LX.OnlineSource]?.songList
if (!songList) continue
sources.push(source.id as LX.OnlineSource)
sortList[source.id as LX.OnlineSource] = songList.sortList as SortInfo[]

View File

@ -25,7 +25,7 @@ export default ({ list, selectedList, removeAllSelect }) => {
const handleOpenMusicDetail = index => {
const task = list.value[index]
const mInfo = toOldMusicInfo(task.metadata.musicInfo)
const url = musicSdk[mInfo.source].getMusicDetailPageUrl(mInfo)
const url = musicSdk[mInfo.source]?.getMusicDetailPageUrl?.(mInfo)
if (!url) return
openUrl(url)
}

View File

@ -24,7 +24,7 @@ export default ({ props, list, selectedList, removeAllSelect }) => {
const handleOpenMusicDetail = index => {
const minfo = list.value[index]
const url = musicSdk[minfo.source].getMusicDetailPageUrl(toOldMusicInfo(minfo))
const url = musicSdk[minfo.source]?.getMusicDetailPageUrl(toOldMusicInfo(minfo))
if (!url) return
openUrl(url)
}

View File

@ -124,7 +124,7 @@ export default {
if (/board__/.test(sourceListId)) {
const id = sourceListId.replace(/board__/, '')
url = musicSdk[source].leaderboard.getDetailPageUrl(id)
} else if (musicSdk[source].songList?.getDetailPageUrl) {
} else if (musicSdk[source]?.songList?.getDetailPageUrl) {
url = await musicSdk[source].songList.getDetailPageUrl(sourceListId)
}
if (!url) return

View File

@ -1,6 +1,6 @@
import { DOWNLOAD_STATUS, QUALITYS } from '@common/constants'
import { filterFileName } from '@common/utils/common'
import { joinPath } from '@common/utils/nodejs'
import { joinPath, removeFile } from '@common/utils/nodejs'
import fs from 'fs'
/**
@ -94,9 +94,11 @@ export const createDownloadInfo = (musicInfo: LX.Music.MusicInfoOnline, type: LX
// 删除同路径下的同名文件
// TODO
// deleteFile(downloadInfo.metadata.filePath)
void removeFile(downloadInfo.metadata.filePath)
// .catch(err => {
// if (err.code !== 'ENOENT') return commit('setStatusText', { downloadInfo, text: '文件删除失败' })
// if (err.code !== 'ENOENT') {
// return commit('setStatusText', { downloadInfo, text: '文件删除失败' })
// }
// })
return downloadInfo