修复导入列表数据时的歌曲信息转换问题

pull/1053/head
lyswhut 2022-11-18 09:58:02 +08:00
parent f3852b20ca
commit 9920e5ef99
4 changed files with 66 additions and 50 deletions

View File

@ -1,39 +1,46 @@
// 业务工具方法 // 业务工具方法
export const toNewMusicInfo = (oldMusicInfo: any): LX.Music.MusicInfoOnline => { export const toNewMusicInfo = (oldMusicInfo: any): LX.Music.MusicInfo => {
const meta: Record<string, any> = { const meta: Record<string, any> = {
songId: oldMusicInfo.songmid, // 歌曲IDmg源为copyrightIdlocal为文件路径 songId: oldMusicInfo.songmid, // 歌曲IDmg源为copyrightIdlocal为文件路径
albumName: oldMusicInfo.albumName, // 歌曲专辑名称 albumName: oldMusicInfo.albumName, // 歌曲专辑名称
albumId: oldMusicInfo.albumId,
picUrl: oldMusicInfo.img, // 歌曲图片链接 picUrl: oldMusicInfo.img, // 歌曲图片链接
qualitys: oldMusicInfo.types,
_qualitys: oldMusicInfo._types,
}
if (meta._qualitys.flac32bit && !meta._qualitys.flac24bit) {
meta._qualitys.flac24bit = meta._qualitys.flac32bit
delete meta._qualitys.flac32bit
meta.qualitys = (meta.qualitys as any[]).map(quality => {
if (quality.type == 'flac32bit') quality.type = 'flac24bit'
return quality
})
} }
switch (oldMusicInfo.source) { if (oldMusicInfo.source == 'local') {
case 'kg': meta.filePath = oldMusicInfo.filePath ?? oldMusicInfo.songmid ?? ''
meta.hash = oldMusicInfo.hash meta.ext = oldMusicInfo.ext ?? /\.(\w+)$/.exec(meta.filePath)?.[1] ?? ''
break } else {
case 'tx': meta.qualitys = oldMusicInfo.types
meta.strMediaMid = oldMusicInfo.strMediaMid meta._qualitys = oldMusicInfo._types
meta.albumMid = oldMusicInfo.albumMid meta.albumId = oldMusicInfo.albumId
break if (meta._qualitys.flac32bit && !meta._qualitys.flac24bit) {
case 'mg': meta._qualitys.flac24bit = meta._qualitys.flac32bit
meta.copyrightId = oldMusicInfo.copyrightId delete meta._qualitys.flac32bit
meta.lrcUrl = oldMusicInfo.lrcUrl
meta.mrcUrl = oldMusicInfo.mrcUrl meta.qualitys = (meta.qualitys as any[]).map(quality => {
meta.trcUrl = oldMusicInfo.trcUrl if (quality.type == 'flac32bit') quality.type = 'flac24bit'
break return quality
})
}
switch (oldMusicInfo.source) {
case 'kg':
meta.hash = oldMusicInfo.hash
break
case 'tx':
meta.strMediaMid = oldMusicInfo.strMediaMid
meta.albumMid = oldMusicInfo.albumMid
break
case 'mg':
meta.copyrightId = oldMusicInfo.copyrightId
meta.lrcUrl = oldMusicInfo.lrcUrl
meta.mrcUrl = oldMusicInfo.mrcUrl
meta.trcUrl = oldMusicInfo.trcUrl
break
}
} }
return { return {
id: `${oldMusicInfo.source as string}_${oldMusicInfo.songmid as string}`, id: `${oldMusicInfo.source as string}_${oldMusicInfo.songmid as string}`,
name: oldMusicInfo.name, name: oldMusicInfo.name,
@ -44,34 +51,43 @@ export const toNewMusicInfo = (oldMusicInfo: any): LX.Music.MusicInfoOnline => {
} }
} }
export const toOldMusicInfo = (minfo: LX.Music.MusicInfoOnline) => { export const toOldMusicInfo = (minfo: LX.Music.MusicInfo) => {
const oInfo: Record<string, any> = { const oInfo: Record<string, any> = {
name: minfo.name, name: minfo.name,
singer: minfo.singer, singer: minfo.singer,
source: minfo.source, source: minfo.source,
songmid: minfo.meta.songId, songmid: minfo.meta.songId,
albumId: minfo.meta.albumId ?? '',
interval: minfo.interval, interval: minfo.interval,
albumName: minfo.meta.albumName, albumName: minfo.meta.albumName,
img: minfo.meta.picUrl ?? '', img: minfo.meta.picUrl ?? '',
types: minfo.meta.qualitys ?? [],
_types: minfo.meta._qualitys ?? {},
typeUrl: {}, typeUrl: {},
} }
switch (minfo.source) { if (minfo.source == 'local') {
case 'kg': oInfo.filePath = minfo.meta.filePath
oInfo.hash = minfo.meta.hash oInfo.ext = minfo.meta.ext
break oInfo.albumId = ''
case 'tx': oInfo.types = []
oInfo.strMediaMid = minfo.meta.strMediaMid oInfo._types = {}
oInfo.albumMid = minfo.meta.albumMid } else {
break oInfo.albumId = minfo.meta.albumId
case 'mg': oInfo.types = minfo.meta.qualitys
oInfo.copyrightId = minfo.meta.copyrightId oInfo._types = minfo.meta._qualitys
oInfo.lrcUrl = minfo.meta.lrcUrl
oInfo.mrcUrl = minfo.meta.mrcUrl switch (minfo.source) {
oInfo.trcUrl = minfo.meta.trcUrl case 'kg':
break oInfo.hash = minfo.meta.hash
break
case 'tx':
oInfo.strMediaMid = minfo.meta.strMediaMid
oInfo.albumMid = minfo.meta.albumMid
break
case 'mg':
oInfo.copyrightId = minfo.meta.copyrightId
oInfo.lrcUrl = minfo.meta.lrcUrl
oInfo.mrcUrl = minfo.meta.mrcUrl
oInfo.trcUrl = minfo.meta.trcUrl
break
}
} }
return oInfo return oInfo

View File

@ -49,7 +49,7 @@ export const getOtherSource = async(musicInfo: LX.Music.MusicInfo | LX.Download.
if (getOtherSourcePromises.has(key)) return getOtherSourcePromises.get(key) if (getOtherSourcePromises.has(key)) return getOtherSourcePromises.get(key)
const promise = musicSdk.findMusic(searchMusicInfo).then((otherSource) => { const promise = musicSdk.findMusic(searchMusicInfo).then((otherSource) => {
const sources: LX.Music.MusicInfoOnline[] = otherSource.map(toNewMusicInfo) const sources: LX.Music.MusicInfoOnline[] = otherSource.map(toNewMusicInfo) as LX.Music.MusicInfoOnline[]
if (sources.length) void saveOtherSourceFromStore(musicInfo.id, sources) if (sources.length) void saveOtherSourceFromStore(musicInfo.id, sources)
return sources return sources
}).finally(() => { }).finally(() => {

View File

@ -53,7 +53,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)) as LX.Music.MusicInfoOnline[]))
cache.set(key, result) cache.set(key, result)
return result return result
}) })
@ -75,7 +75,7 @@ export const getListDetailAll = async(id: string, isRefresh = false): Promise<LX
if (!isRefresh && cache.has(key)) return cache.get(key) if (!isRefresh && cache.has(key)) return cache.get(key)
return musicSdk[source]?.leaderboard.getList(id, page).then((result: ListDetailInfo) => { return musicSdk[source]?.leaderboard.getList(id, page).then((result: ListDetailInfo) => {
result.list = markRawList(deduplicationList(result.list.map(m => toNewMusicInfo(m)))) result.list = markRawList(deduplicationList(result.list.map(m => toNewMusicInfo(m)) as LX.Music.MusicInfoOnline[]))
cache.set(key, result) cache.set(key, result)
return result return result
}) ?? Promise.reject(new Error('source not found' + source)) }) ?? Promise.reject(new Error('source not found' + source))

View File

@ -129,7 +129,7 @@ export const getListDetail = async(id: string, source: LX.OnlineSource, page: nu
if (!isRefresh && cache.has(key)) return cache.get(key) if (!isRefresh && cache.has(key)) return cache.get(key)
return musicSdk[source]?.songList.getListDetail(id, page).then((result: ListDetailInfo) => { return musicSdk[source]?.songList.getListDetail(id, page).then((result: ListDetailInfo) => {
result.list = markRawList(deduplicationList(result.list.map(m => toNewMusicInfo(m)))) result.list = markRawList(deduplicationList(result.list.map(m => toNewMusicInfo(m)) as LX.Music.MusicInfoOnline[]))
cache.set(key, result) cache.set(key, result)
return result return result
}) })
@ -151,7 +151,7 @@ export const getListDetailAll = async(id: string, source: LX.OnlineSource, isRef
return cache.has(key) return cache.has(key)
? Promise.resolve(cache.get(key)) ? Promise.resolve(cache.get(key))
: musicSdk[source]?.songList.getListDetail(id, page).then((result: ListDetailInfo) => { : musicSdk[source]?.songList.getListDetail(id, page).then((result: ListDetailInfo) => {
result.list = markRawList(deduplicationList(result.list.map(m => toNewMusicInfo(m)))) result.list = markRawList(deduplicationList(result.list.map(m => toNewMusicInfo(m)) as LX.Music.MusicInfoOnline[]))
cache.set(key, result) cache.set(key, result)
return result return result
}) ?? Promise.reject(new Error('source not found' + source)) }) ?? Promise.reject(new Error('source not found' + source))