mirror of
https://github.com/algerkong/AlgerMusicPlayer.git
synced 2026-04-24 08:07:23 +08:00
🐞 fix: 修复解析错误问题, 优化播放效果
This commit is contained in:
@@ -32,6 +32,49 @@ interface UnblockResult {
|
||||
// 所有可用平台
|
||||
export const ALL_PLATFORMS: Platform[] = ['migu', 'kugou', 'pyncmd', 'bilibili'];
|
||||
|
||||
/**
|
||||
* 确保对象数据结构完整,处理null或undefined的情况
|
||||
* @param data 需要处理的数据对象
|
||||
*/
|
||||
function ensureDataStructure(data: any): any {
|
||||
// 如果数据本身为空,则返回一个基本结构
|
||||
if (!data) {
|
||||
return {
|
||||
name: '',
|
||||
artists: [],
|
||||
album: { name: '' }
|
||||
};
|
||||
}
|
||||
|
||||
// 确保name字段存在
|
||||
if (data.name === undefined || data.name === null) {
|
||||
data.name = '';
|
||||
}
|
||||
|
||||
// 确保artists字段存在且为数组
|
||||
if (!data.artists || !Array.isArray(data.artists)) {
|
||||
data.artists = data.ar && Array.isArray(data.ar) ? data.ar : [];
|
||||
}
|
||||
|
||||
// 确保artists中的每个元素都有name属性
|
||||
if (data.artists.length > 0) {
|
||||
data.artists = data.artists.map(artist => {
|
||||
return artist ? { name: artist.name || '' } : { name: '' };
|
||||
});
|
||||
}
|
||||
|
||||
// 确保album对象存在并有name属性
|
||||
if (!data.album || typeof data.album !== 'object') {
|
||||
data.album = data.al && typeof data.al === 'object' ? data.al : { name: '' };
|
||||
}
|
||||
|
||||
if (!data.album.name) {
|
||||
data.album.name = '';
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
/**
|
||||
* 音乐解析函数
|
||||
* @param id 歌曲ID
|
||||
@@ -46,16 +89,18 @@ const unblockMusic = async (
|
||||
retryCount = 1,
|
||||
enabledPlatforms?: Platform[]
|
||||
): Promise<UnblockResult> => {
|
||||
|
||||
// 过滤 enabledPlatforms,确保只包含 ALL_PLATFORMS 中存在的平台
|
||||
const filteredPlatforms = enabledPlatforms
|
||||
? enabledPlatforms.filter(platform => ALL_PLATFORMS.includes(platform))
|
||||
: ALL_PLATFORMS;
|
||||
|
||||
songData.album = songData.album || songData.al;
|
||||
songData.artists = songData.artists || songData.ar;
|
||||
// 处理歌曲数据,确保数据结构完整
|
||||
const processedSongData = ensureDataStructure(songData);
|
||||
|
||||
const retry = async (attempt: number): Promise<UnblockResult> => {
|
||||
try {
|
||||
const data = await match(parseInt(String(id), 10), filteredPlatforms, songData);
|
||||
const data = await match(parseInt(String(id), 10), filteredPlatforms, processedSongData);
|
||||
const result: UnblockResult = {
|
||||
data: {
|
||||
data,
|
||||
|
||||
Reference in New Issue
Block a user