From f1d8c9509ddc0a3a79f19257b2bd0829f45a0de0 Mon Sep 17 00:00:00 2001 From: lyswhut Date: Thu, 14 Dec 2023 20:42:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E8=BF=9B=E6=9C=AC=E5=9C=B0=E9=9F=B3?= =?UTF-8?q?=E4=B9=90=E5=9C=A8=E7=BA=BF=E4=BF=A1=E6=81=AF=E7=9A=84=E5=8C=B9?= =?UTF-8?q?=E9=85=8D=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- publish/changeLog.md | 1 + src/core/music/local.ts | 55 +++++++++++++++++++++++++++++++++++-- src/utils/musicSdk/index.js | 3 ++ 3 files changed, 56 insertions(+), 3 deletions(-) diff --git a/publish/changeLog.md b/publish/changeLog.md index b71b109..f475ee3 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -15,6 +15,7 @@ - 文件选择器允许选择外置存储设备上的路径(/storage) - 图片显示改用第三方的图片组件,支持gif类型的图片显示,尝试解决某些设备上图片过多导致的应用崩溃问题 - 歌曲评论内容过长时自动折叠,需手动展开 +- 改进本地音乐在线信息的匹配机制 ### 修复 diff --git a/src/core/music/local.ts b/src/core/music/local.ts index 2c91ec6..7c3d294 100644 --- a/src/core/music/local.ts +++ b/src/core/music/local.ts @@ -12,6 +12,55 @@ import { import { getLocalFilePath } from '@/utils/music' import { readLyric, readPic } from '@/utils/localMediaMetadata' +const getOtherSourceByLocal = async(musicInfo: LX.Music.MusicInfoLocal) => { + let result: LX.Music.MusicInfoOnline[] = [] + result = await getOtherSource(musicInfo) + if (result.length) return result + if (musicInfo.name.includes('-')) { + const [name, singer] = musicInfo.name.split('-').map(val => val.trim()) + result = await getOtherSource({ + ...musicInfo, + name, + singer, + }) + if (result.length) return result + result = await getOtherSource({ + ...musicInfo, + name: singer, + singer: name, + }) + if (result.length) return result + } + let fileName = musicInfo.meta.filePath.split('/').at(-1) + if (fileName) { + fileName = fileName.substring(0, fileName.lastIndexOf('.')) + if (fileName != musicInfo.name) { + if (fileName.includes('-')) { + const [name, singer] = fileName.split('-').map(val => val.trim()) + result = await getOtherSource({ + ...musicInfo, + name, + singer, + }) + if (result.length) return result + result = await getOtherSource({ + ...musicInfo, + name: singer, + singer: name, + }) + } else { + result = await getOtherSource({ + ...musicInfo, + name: fileName, + singer: '', + }) + } + if (result.length) return result + } + } + + return result +} export const getMusicUrl = async({ musicInfo, isRefresh, onToggleSource = () => {} }: { musicInfo: LX.Music.MusicInfoLocal @@ -24,7 +73,7 @@ export const getMusicUrl = async({ musicInfo, isRefresh, onToggleSource = () => if (path) return path } onToggleSource() - const otherSource = await getOtherSource(musicInfo) + const otherSource = await getOtherSourceByLocal(musicInfo) if (!otherSource.length) throw new Error('source not found') return getOnlineOtherSourceMusicUrl({ musicInfos: [...otherSource], onToggleSource, isRefresh }).then(({ url, quality: targetQuality, musicInfo: targetMusicInfo, isFromCache }) => { // saveLyric(musicInfo, data.lyricInfo) @@ -49,7 +98,7 @@ export const getPicUrl = async({ musicInfo, listId, isRefresh, onToggleSource = } onToggleSource() - const otherSource = await getOtherSource(musicInfo) + const otherSource = await getOtherSourceByLocal(musicInfo) if (!otherSource.length) throw new Error('source not found') return getOnlineOtherSourcePicUrl({ musicInfos: [...otherSource], onToggleSource, isRefresh }).then(({ url, musicInfo: targetMusicInfo, isFromCache }) => { if (listId) { @@ -86,7 +135,7 @@ export const getLyricInfo = async({ musicInfo, isRefresh, onToggleSource = () => } onToggleSource() - const otherSource = await getOtherSource(musicInfo) + const otherSource = await getOtherSourceByLocal(musicInfo) if (!otherSource.length) throw new Error('source not found') // eslint-disable-next-line @typescript-eslint/promise-function-async return getOnlineOtherSourceLyricInfo({ musicInfos: [...otherSource], onToggleSource, isRefresh }).then(({ lyricInfo, musicInfo: targetMusicInfo, isFromCache }) => { diff --git a/src/utils/musicSdk/index.js b/src/utils/musicSdk/index.js index 427047c..6444ce8 100644 --- a/src/utils/musicSdk/index.js +++ b/src/utils/musicSdk/index.js @@ -116,6 +116,9 @@ export const findMusic = async(musicInfo) => { ) { return item } + if (!singer) { + if (item.lowerCaseName == lowerCaseName && (interval ? item.interval == interval : true)) return item + } } return null }).catch(_ => null))