2024-05-16 18:54:30 +08:00
|
|
|
import { createStore } from 'vuex';
|
|
|
|
|
|
|
|
|
|
import { getMusicUrl, getParsingMusicUrl } from '@/api/music';
|
|
|
|
|
import { useMusicHistory } from '@/hooks/MusicHistoryHook';
|
|
|
|
|
import homeRouter from '@/router/home';
|
2024-09-13 14:11:02 +08:00
|
|
|
import type { SongResult } from '@/type/music';
|
2024-09-18 15:11:20 +08:00
|
|
|
import { getImgUrl, getMusicProxyUrl } from '@/utils';
|
|
|
|
|
import { getImageLinearBackground } from '@/utils/linearColor';
|
2023-12-11 16:22:05 +08:00
|
|
|
|
|
|
|
|
interface State {
|
2024-05-16 18:54:30 +08:00
|
|
|
menus: any[];
|
|
|
|
|
play: boolean;
|
|
|
|
|
isPlay: boolean;
|
2024-09-13 14:11:02 +08:00
|
|
|
playMusic: SongResult;
|
2024-05-16 18:54:30 +08:00
|
|
|
playMusicUrl: string;
|
|
|
|
|
user: any;
|
2024-09-13 14:11:02 +08:00
|
|
|
playList: SongResult[];
|
2024-05-16 18:54:30 +08:00
|
|
|
playListIndex: number;
|
|
|
|
|
setData: any;
|
2024-05-20 19:54:00 +08:00
|
|
|
lyric: any;
|
2024-05-23 17:12:35 +08:00
|
|
|
isMobile: boolean;
|
2024-09-12 17:28:51 +08:00
|
|
|
searchValue: string;
|
|
|
|
|
searchType: number;
|
2023-12-11 16:22:05 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const state: State = {
|
2021-09-29 15:26:13 +08:00
|
|
|
menus: homeRouter,
|
2021-07-21 22:30:55 +08:00
|
|
|
play: false,
|
2021-07-20 22:46:18 +08:00
|
|
|
isPlay: false,
|
2024-09-13 14:11:02 +08:00
|
|
|
playMusic: {} as SongResult,
|
2023-12-11 16:22:05 +08:00
|
|
|
playMusicUrl: '',
|
2024-05-22 15:14:26 +08:00
|
|
|
user: localStorage.getItem('user') ? JSON.parse(localStorage.getItem('user') as string) : null,
|
2023-12-11 16:22:05 +08:00
|
|
|
playList: [],
|
|
|
|
|
playListIndex: 0,
|
2023-12-28 10:45:11 +08:00
|
|
|
setData: null,
|
2024-05-20 19:54:00 +08:00
|
|
|
lyric: {},
|
2024-05-23 17:12:35 +08:00
|
|
|
isMobile: false,
|
2024-09-12 17:28:51 +08:00
|
|
|
searchValue: '',
|
|
|
|
|
searchType: 1,
|
2024-05-16 18:54:30 +08:00
|
|
|
};
|
2021-07-20 15:29:20 +08:00
|
|
|
|
2024-05-16 18:54:30 +08:00
|
|
|
const windowData = window as any;
|
2023-12-28 10:45:11 +08:00
|
|
|
|
2024-05-16 18:54:30 +08:00
|
|
|
const musicHistory = useMusicHistory();
|
2024-01-02 11:08:02 +08:00
|
|
|
|
2023-12-11 16:22:05 +08:00
|
|
|
const mutations = {
|
|
|
|
|
setMenus(state: State, menus: any[]) {
|
2024-05-16 18:54:30 +08:00
|
|
|
state.menus = menus;
|
2021-07-20 22:46:18 +08:00
|
|
|
},
|
2024-09-13 14:11:02 +08:00
|
|
|
async setPlay(state: State, playMusic: SongResult) {
|
2024-09-18 15:11:20 +08:00
|
|
|
await getSongDetail(state, playMusic);
|
2021-07-20 22:46:18 +08:00
|
|
|
},
|
2023-12-11 16:22:05 +08:00
|
|
|
setIsPlay(state: State, isPlay: boolean) {
|
2024-05-16 18:54:30 +08:00
|
|
|
state.isPlay = isPlay;
|
2021-07-20 22:46:18 +08:00
|
|
|
},
|
2023-12-11 16:22:05 +08:00
|
|
|
setPlayMusic(state: State, play: boolean) {
|
2024-05-16 18:54:30 +08:00
|
|
|
state.play = play;
|
2021-07-21 22:30:55 +08:00
|
|
|
},
|
2024-09-13 14:11:02 +08:00
|
|
|
setPlayList(state: State, playList: SongResult[]) {
|
2024-05-16 18:54:30 +08:00
|
|
|
state.playListIndex = playList.findIndex((item) => item.id === state.playMusic.id);
|
|
|
|
|
state.playList = playList;
|
2023-12-11 16:22:05 +08:00
|
|
|
},
|
|
|
|
|
async nextPlay(state: State) {
|
2023-12-21 16:45:06 +08:00
|
|
|
if (state.playList.length === 0) {
|
2024-05-16 18:54:30 +08:00
|
|
|
state.play = true;
|
|
|
|
|
return;
|
2023-12-21 16:45:06 +08:00
|
|
|
}
|
2024-09-18 15:11:20 +08:00
|
|
|
const playListIndex = (state.playListIndex + 1) % state.playList.length;
|
|
|
|
|
await getSongDetail(state, state.playList[playListIndex]);
|
2023-12-11 16:22:05 +08:00
|
|
|
},
|
|
|
|
|
async prevPlay(state: State) {
|
2023-12-21 16:45:06 +08:00
|
|
|
if (state.playList.length === 0) {
|
2024-05-16 18:54:30 +08:00
|
|
|
state.play = true;
|
|
|
|
|
return;
|
2023-12-21 16:45:06 +08:00
|
|
|
}
|
2024-09-18 15:11:20 +08:00
|
|
|
const playListIndex = (state.playListIndex - 1 + state.playList.length) % state.playList.length;
|
|
|
|
|
await getSongDetail(state, state.playList[playListIndex]);
|
2023-12-11 16:22:05 +08:00
|
|
|
},
|
2023-12-28 10:45:11 +08:00
|
|
|
async setSetData(state: State, setData: any) {
|
2024-05-16 18:54:30 +08:00
|
|
|
state.setData = setData;
|
|
|
|
|
windowData.electron.ipcRenderer.setStoreValue('set', JSON.parse(JSON.stringify(setData)));
|
2023-12-28 10:45:11 +08:00
|
|
|
},
|
2024-05-16 18:54:30 +08:00
|
|
|
};
|
2021-07-20 15:29:20 +08:00
|
|
|
|
2021-07-21 17:45:21 +08:00
|
|
|
const getSongUrl = async (id: number) => {
|
2024-05-16 18:54:30 +08:00
|
|
|
const { data } = await getMusicUrl(id);
|
|
|
|
|
let url = '';
|
2023-12-20 15:53:33 +08:00
|
|
|
try {
|
2024-01-01 00:06:52 +08:00
|
|
|
if (data.data[0].freeTrialInfo || !data.data[0].url) {
|
2024-05-16 18:54:30 +08:00
|
|
|
const res = await getParsingMusicUrl(id);
|
|
|
|
|
url = res.data.data.url;
|
2023-12-20 15:53:33 +08:00
|
|
|
}
|
|
|
|
|
} catch (error) {
|
2024-05-16 18:54:30 +08:00
|
|
|
console.error('error', error);
|
2023-12-20 15:53:33 +08:00
|
|
|
}
|
2024-05-16 18:54:30 +08:00
|
|
|
url = url || data.data[0].url;
|
|
|
|
|
return getMusicProxyUrl(url);
|
|
|
|
|
};
|
2021-07-21 17:45:21 +08:00
|
|
|
|
2023-12-11 16:22:05 +08:00
|
|
|
const updatePlayMusic = async (state: State) => {
|
2024-05-16 18:54:30 +08:00
|
|
|
state.playMusic = state.playList[state.playListIndex];
|
|
|
|
|
state.playMusicUrl = await getSongUrl(state.playMusic.id);
|
|
|
|
|
state.play = true;
|
|
|
|
|
musicHistory.addMusic(state.playMusic);
|
|
|
|
|
};
|
2023-12-11 16:22:05 +08:00
|
|
|
|
2024-09-18 15:11:20 +08:00
|
|
|
const getSongDetail = async (state: State, playMusic: SongResult) => {
|
|
|
|
|
state.playMusic.playLoading = true;
|
|
|
|
|
state.playMusicUrl = await getSongUrl(playMusic.id);
|
|
|
|
|
const backgroundColor = playMusic.backgroundColor
|
|
|
|
|
? playMusic.backgroundColor
|
|
|
|
|
: await getImageLinearBackground(getImgUrl(playMusic?.picUrl, '30y30'));
|
|
|
|
|
state.playMusic = { ...playMusic, backgroundColor };
|
|
|
|
|
// state.playMusic = { ...playMusic };
|
|
|
|
|
state.play = true;
|
|
|
|
|
musicHistory.addMusic(playMusic);
|
|
|
|
|
state.playListIndex = state.playList.findIndex((item) => item.id === playMusic.id);
|
|
|
|
|
state.playMusic.playLoading = false;
|
|
|
|
|
};
|
|
|
|
|
|
2021-07-20 15:29:20 +08:00
|
|
|
const store = createStore({
|
2024-05-16 18:54:30 +08:00
|
|
|
state,
|
|
|
|
|
mutations,
|
|
|
|
|
});
|
2021-07-20 15:29:20 +08:00
|
|
|
|
2024-05-16 18:54:30 +08:00
|
|
|
export default store;
|