Files
AlgerMusicPlayer/src/renderer/api/music.ts
T

111 lines
3.1 KiB
TypeScript
Raw Normal View History

import { musicDB } from '@/hooks/MusicHook';
2025-01-10 22:49:55 +08:00
import store from '@/store';
2025-01-12 20:59:36 +08:00
import type { ILyric } from '@/type/lyric';
import { isElectron } from '@/utils';
import request from '@/utils/request';
import requestMusic from '@/utils/request_music';
const { addData, getData, deleteData } = musicDB;
// 获取音乐音质详情
export const getMusicQualityDetail = (id: number) => {
return request.get('/song/music/detail', { params: { id } });
};
// 根据音乐Id获取音乐播放URl
2025-01-25 23:53:20 +08:00
export const getMusicUrl = async (id: number, isDownloaded: boolean = false) => {
// 判断是否登录
2025-01-25 23:53:20 +08:00
try {
if (store.state.user && isDownloaded && store.state.user.vipType !== 0) {
const url = '/song/download/url/v1';
const res = await request.get(url, {
params: {
id,
level: store.state.setData.musicQuality || 'higher',
cookie: `${localStorage.getItem('token')} os=pc;`
}
});
if (res.data.data.url) {
return { data: { data: [{ ...res.data.data }] } };
}
}
2025-01-25 23:53:20 +08:00
} catch (error) {
console.error('error', error);
}
2025-01-10 22:49:55 +08:00
return await request.get('/song/url/v1', {
params: {
id,
level: store.state.setData.musicQuality || 'higher'
2025-01-10 22:49:55 +08:00
}
});
};
// 获取歌曲详情
export const getMusicDetail = (ids: Array<number>) => {
return request.get('/song/detail', { params: { ids: ids.join(',') } });
};
// 根据音乐Id获取音乐歌词
2025-01-12 20:59:36 +08:00
export const getMusicLrc = async (id: number) => {
const TEN_DAYS_MS = 10 * 24 * 60 * 60 * 1000; // 10天的毫秒数
try {
// 尝试获取缓存的歌词
const cachedLyric = await getData('music_lyric', id);
if (cachedLyric?.createTime && Date.now() - cachedLyric.createTime < TEN_DAYS_MS) {
return { ...cachedLyric };
2025-01-12 20:59:36 +08:00
}
// 获取新的歌词数据
const res = await request.get<ILyric>('/lyric', { params: { id } });
2025-01-12 20:59:36 +08:00
// 只有在成功获取新数据后才删除旧缓存并添加新缓存
if (res?.data) {
if (cachedLyric) {
await deleteData('music_lyric', id);
}
addData('music_lyric', { id, data: res.data, createTime: Date.now() });
}
2025-01-12 20:59:36 +08:00
return res;
} catch (error) {
console.error('获取歌词失败:', error);
throw error; // 向上抛出错误,让调用者处理
}
};
export const getParsingMusicUrl = (id: number, data: any) => {
if (isElectron) {
return window.api.unblockMusic(id, data);
}
return requestMusic.get<any>('/music', { params: { id } });
};
2025-01-04 16:58:08 +08:00
// 收藏歌曲
export const likeSong = (id: number, like: boolean = true) => {
return request.get('/like', { params: { id, like } });
};
// 获取用户喜欢的音乐列表
2025-01-25 23:53:20 +08:00
export const getLikedList = (uid: number) => {
return request.get('/likelist', {
params: { uid, noLogin: true }
2025-01-25 23:53:20 +08:00
});
2025-01-04 16:58:08 +08:00
};
// 创建歌单
export const createPlaylist = (params: { name: string; privacy: number }) => {
return request.post('/playlist/create', params);
};
// 添加或删除歌单歌曲
export const updatePlaylistTracks = (params: {
op: 'add' | 'del';
pid: number;
tracks: string;
}) => {
return request.get('/playlist/tracks', { params });
};