添加源存在性检查

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) => { const showMenu = (event, musicInfo) => {
itemMenuControl.sourceDetail = !!musicSdk[musicInfo.source].getMusicDetailPageUrl itemMenuControl.sourceDetail = !!musicSdk[musicInfo.source]?.getMusicDetailPageUrl
// this.listMenu.itemMenuControl.play = // this.listMenu.itemMenuControl.play =
// this.listMenu.itemMenuControl.playLater = // this.listMenu.itemMenuControl.playLater =
itemMenuControl.download = assertApiSupport(musicInfo.source) itemMenuControl.download = assertApiSupport(musicInfo.source)

View File

@ -19,7 +19,7 @@ export default ({ props }) => {
const handleOpenMusicDetail = index => { const handleOpenMusicDetail = index => {
const minfo = props.list[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 if (!url) return
openUrl(url) openUrl(url)
} }

View File

@ -17,7 +17,7 @@ export const sourceList: SourceLists = markRaw({
for (const source of music.sources) { 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) sources.push(source.id as LX.OnlineSource)
sourceList[source.id as LX.OnlineSource] = reactive<string[]>([]) sourceList[source.id as LX.OnlineSource] = reactive<string[]>([])
} }
@ -52,10 +52,10 @@ export const getList = async(source: Source): Promise<string[]> => {
task.push( task.push(
sourceList[source]?.length sourceList[source]?.length
? Promise.resolve({ source, list: sourceList[source] }) ? Promise.resolve({ source, list: sourceList[source] })
: music[source].hotSearch.getList().catch((err: any) => { : music[source]?.hotSearch.getList().catch((err: any) => {
console.log(err) console.log(err)
return { source, list: [] } return { source, list: [] }
}), }) ?? Promise.reject(new Error('source not found: ' + source)),
) )
} }
return Promise.all(task).then((results: any[]) => { return Promise.all(task).then((results: any[]) => {
@ -63,11 +63,11 @@ export const getList = async(source: Source): Promise<string[]> => {
}) })
} else { } else {
if (sourceList[source]?.length) return Promise.resolve(sourceList[source] as string[]) if (sourceList[source]?.length) return Promise.resolve(sourceList[source] as string[])
if (!music[source].hotSearch) { if (!music[source]?.hotSearch) {
setList(source, []) setList(source, [])
return Promise.resolve([]) 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] 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)))) result.list = markRawList(deduplicationList(result.list.map(m => toNewMusicInfo(m))))
cache.set(key, result) cache.set(key, result)
return 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)))) result.list = markRawList(deduplicationList(result.list.map(m => toNewMusicInfo(m))))
cache.set(key, result) cache.set(key, result)
return 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) => { return await loadData(bangId, 1).then((result: ListDetailInfo) => {
if (result.total <= result.limit) return result.list 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([]) export const sources: LX.OnlineSource[] = markRaw([])
for (const source of music.sources) { 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) 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 = [] let task = []
for (const source of sources) { for (const source of sources) {
if (source == 'all') continue 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) console.log(error)
return { return {
allPage: 1, allPage: 1,

View File

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

View File

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

View File

@ -31,7 +31,7 @@ export const listInfos: ListInfos = markRaw({
}) })
export const maxPages: Partial<Record<LX.OnlineSource, number>> = {} export const maxPages: Partial<Record<LX.OnlineSource, number>> = {}
for (const source of music.sources) { 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) sources.push(source.id as LX.OnlineSource)
listInfos[source.id as LX.OnlineSource] = reactive<SearchListInfo>({ listInfos[source.id as LX.OnlineSource] = reactive<SearchListInfo>({
page: 1, 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)))) result.list = markRawList(deduplicationList(result.list.map(m => toNewMusicInfo(m))))
cache.set(key, result) cache.set(key, result)
return 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) => { return await loadData(id, 1).then((result: ListDetailInfo) => {
if (result.total <= result.limit) return result.list 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[]>>>({}) export const sortList = markRaw<Partial<Record<LX.OnlineSource, SortInfo[]>>>({})
for (const source of music.sources) { 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 if (!songList) continue
sources.push(source.id as LX.OnlineSource) sources.push(source.id as LX.OnlineSource)
sortList[source.id as LX.OnlineSource] = songList.sortList as SortInfo[] 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 handleOpenMusicDetail = index => {
const task = list.value[index] const task = list.value[index]
const mInfo = toOldMusicInfo(task.metadata.musicInfo) const mInfo = toOldMusicInfo(task.metadata.musicInfo)
const url = musicSdk[mInfo.source].getMusicDetailPageUrl(mInfo) const url = musicSdk[mInfo.source]?.getMusicDetailPageUrl?.(mInfo)
if (!url) return if (!url) return
openUrl(url) openUrl(url)
} }

View File

@ -24,7 +24,7 @@ export default ({ props, list, selectedList, removeAllSelect }) => {
const handleOpenMusicDetail = index => { const handleOpenMusicDetail = index => {
const minfo = list.value[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 if (!url) return
openUrl(url) openUrl(url)
} }

View File

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

View File

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