2024-05-16 18:54:30 +08:00
|
|
|
import { createStore } from 'vuex';
|
|
|
|
|
|
2025-01-10 22:49:55 +08:00
|
|
|
import setData from '@/../main/set.json';
|
2025-01-25 23:53:20 +08:00
|
|
|
import { logout } from '@/api/login';
|
2025-01-10 22:49:55 +08:00
|
|
|
import { getLikedList, likeSong } from '@/api/music';
|
2024-10-18 18:37:53 +08:00
|
|
|
import { useMusicListHook } from '@/hooks/MusicListHook';
|
2024-05-16 18:54:30 +08:00
|
|
|
import homeRouter from '@/router/home';
|
2024-09-13 14:11:02 +08:00
|
|
|
import type { SongResult } from '@/type/music';
|
2025-01-01 02:25:18 +08:00
|
|
|
import { isElectron } from '@/utils';
|
2025-01-10 22:49:55 +08:00
|
|
|
import { applyTheme, getCurrentTheme, ThemeType } from '@/utils/theme';
|
2023-12-11 16:22:05 +08:00
|
|
|
|
2024-12-08 21:50:58 +08:00
|
|
|
// 默认设置
|
2025-01-06 20:54:42 +08:00
|
|
|
const defaultSettings = setData;
|
2024-12-08 21:50:58 +08:00
|
|
|
|
2025-01-22 22:16:46 +08:00
|
|
|
function isValidUrl(urlString: string): boolean {
|
|
|
|
|
try {
|
|
|
|
|
return Boolean(new URL(urlString));
|
|
|
|
|
} catch (e) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-12-15 01:40:13 +08:00
|
|
|
function getLocalStorageItem<T>(key: string, defaultValue: T): T {
|
2025-01-22 22:16:46 +08:00
|
|
|
try {
|
|
|
|
|
const item = localStorage.getItem(key);
|
|
|
|
|
if (!item) return defaultValue;
|
|
|
|
|
|
|
|
|
|
// 尝试解析 JSON
|
|
|
|
|
const parsedItem = JSON.parse(item);
|
|
|
|
|
|
|
|
|
|
// 对于音乐 URL,检查是否是有效的 URL 格式或本地文件路径
|
|
|
|
|
if (key === 'currentPlayMusicUrl' && typeof parsedItem === 'string') {
|
|
|
|
|
if (!parsedItem.startsWith('local://') && !isValidUrl(parsedItem)) {
|
|
|
|
|
console.warn(`Invalid URL in localStorage for key ${key}, using default value`);
|
|
|
|
|
localStorage.removeItem(key);
|
|
|
|
|
return defaultValue;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 对于播放列表,检查是否是数组且每个项都有必要的字段
|
|
|
|
|
if (key === 'playList') {
|
|
|
|
|
if (!Array.isArray(parsedItem)) {
|
|
|
|
|
console.warn(`Invalid playList format in localStorage, using default value`);
|
|
|
|
|
localStorage.removeItem(key);
|
|
|
|
|
return defaultValue;
|
|
|
|
|
}
|
|
|
|
|
// 检查每个歌曲对象是否有必要的字段
|
|
|
|
|
const isValid = parsedItem.every((item) => item && typeof item === 'object' && 'id' in item);
|
|
|
|
|
if (!isValid) {
|
|
|
|
|
console.warn(`Invalid song objects in playList, using default value`);
|
|
|
|
|
localStorage.removeItem(key);
|
|
|
|
|
return defaultValue;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 对于当前播放音乐,检查是否是对象且包含必要的字段
|
|
|
|
|
if (key === 'currentPlayMusic') {
|
|
|
|
|
if (!parsedItem || typeof parsedItem !== 'object' || !('id' in parsedItem)) {
|
|
|
|
|
console.warn(`Invalid currentPlayMusic format in localStorage, using default value`);
|
|
|
|
|
localStorage.removeItem(key);
|
|
|
|
|
return defaultValue;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return parsedItem;
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.warn(`Error parsing localStorage item for key ${key}:`, error);
|
|
|
|
|
// 如果解析失败,删除可能损坏的数据
|
|
|
|
|
localStorage.removeItem(key);
|
|
|
|
|
return defaultValue;
|
|
|
|
|
}
|
2024-12-15 01:40:13 +08:00
|
|
|
}
|
|
|
|
|
|
2025-01-13 22:13:46 +08:00
|
|
|
export 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;
|
2025-01-26 00:20:08 +08:00
|
|
|
setData: typeof defaultSettings;
|
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;
|
2024-12-09 21:55:08 +08:00
|
|
|
favoriteList: number[];
|
2024-12-15 01:40:13 +08:00
|
|
|
playMode: number;
|
2024-12-28 16:43:52 +08:00
|
|
|
theme: ThemeType;
|
2025-01-03 22:03:26 +08:00
|
|
|
musicFull: boolean;
|
2025-01-04 16:13:37 +08:00
|
|
|
showUpdateModal: boolean;
|
2025-01-13 22:13:46 +08:00
|
|
|
showArtistDrawer: boolean;
|
|
|
|
|
currentArtistId: number | null;
|
2025-01-17 22:45:59 +08:00
|
|
|
systemFonts: { label: string; value: string }[];
|
2025-01-26 00:20:08 +08:00
|
|
|
showDownloadDrawer: boolean;
|
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,
|
2025-01-22 22:16:46 +08:00
|
|
|
playMusic: getLocalStorageItem('currentPlayMusic', {} as SongResult),
|
|
|
|
|
playMusicUrl: getLocalStorageItem('currentPlayMusicUrl', ''),
|
2024-12-15 01:40:13 +08:00
|
|
|
user: getLocalStorageItem('user', null),
|
2025-01-22 22:16:46 +08:00
|
|
|
playList: getLocalStorageItem('playList', []),
|
|
|
|
|
playListIndex: getLocalStorageItem('playListIndex', 0),
|
2024-12-08 21:50:58 +08:00
|
|
|
setData: defaultSettings,
|
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-12-15 01:40:13 +08:00
|
|
|
favoriteList: getLocalStorageItem('favoriteList', []),
|
|
|
|
|
playMode: getLocalStorageItem('playMode', 0),
|
2025-01-03 22:03:26 +08:00
|
|
|
theme: getCurrentTheme(),
|
2025-01-04 16:13:37 +08:00
|
|
|
musicFull: false,
|
2025-01-13 22:13:46 +08:00
|
|
|
showUpdateModal: false,
|
|
|
|
|
showArtistDrawer: false,
|
2025-01-17 22:45:59 +08:00
|
|
|
currentArtistId: null,
|
2025-01-26 00:20:08 +08:00
|
|
|
systemFonts: [{ label: '系统默认', value: 'system-ui' }],
|
|
|
|
|
showDownloadDrawer: false
|
2024-05-16 18:54:30 +08:00
|
|
|
};
|
2023-12-28 10:45:11 +08:00
|
|
|
|
2024-10-18 18:37:53 +08:00
|
|
|
const { handlePlayMusic, nextPlay, prevPlay } = useMusicListHook();
|
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-10-18 18:37:53 +08:00
|
|
|
await handlePlayMusic(state, playMusic);
|
2025-01-22 22:16:46 +08:00
|
|
|
localStorage.setItem('currentPlayMusic', JSON.stringify(state.playMusic));
|
|
|
|
|
localStorage.setItem('currentPlayMusicUrl', state.playMusicUrl);
|
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;
|
2025-01-22 22:16:46 +08:00
|
|
|
localStorage.setItem('isPlaying', isPlay.toString());
|
2021-07-20 22:46:18 +08:00
|
|
|
},
|
2025-01-22 22:16:46 +08:00
|
|
|
async setPlayMusic(state: State, play: boolean) {
|
2024-05-16 18:54:30 +08:00
|
|
|
state.play = play;
|
2025-01-22 22:16:46 +08:00
|
|
|
localStorage.setItem('isPlaying', play.toString());
|
2021-07-21 22:30:55 +08:00
|
|
|
},
|
2025-01-03 22:03:26 +08:00
|
|
|
setMusicFull(state: State, musicFull: boolean) {
|
|
|
|
|
state.musicFull = musicFull;
|
|
|
|
|
},
|
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;
|
2025-01-22 22:16:46 +08:00
|
|
|
localStorage.setItem('playList', JSON.stringify(playList));
|
|
|
|
|
localStorage.setItem('playListIndex', state.playListIndex.toString());
|
2023-12-11 16:22:05 +08:00
|
|
|
},
|
|
|
|
|
async nextPlay(state: State) {
|
2024-10-18 18:37:53 +08:00
|
|
|
await nextPlay(state);
|
2023-12-11 16:22:05 +08:00
|
|
|
},
|
|
|
|
|
async prevPlay(state: State) {
|
2024-10-18 18:37:53 +08:00
|
|
|
await prevPlay(state);
|
2023-12-11 16:22:05 +08:00
|
|
|
},
|
2025-01-22 22:22:32 +08:00
|
|
|
// 添加到下一首播放
|
|
|
|
|
addToNextPlay(state: State, song: SongResult) {
|
|
|
|
|
const playList = [...state.playList];
|
|
|
|
|
const currentIndex = state.playListIndex;
|
|
|
|
|
|
|
|
|
|
// 检查歌曲是否已经在播放列表中
|
|
|
|
|
const existingIndex = playList.findIndex((item) => item.id === song.id);
|
|
|
|
|
if (existingIndex !== -1) {
|
|
|
|
|
// 如果歌曲已经在列表中,将其移动到当前播放歌曲的下一个位置
|
|
|
|
|
playList.splice(existingIndex, 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 在当前播放歌曲后插入新歌曲
|
|
|
|
|
playList.splice(currentIndex + 1, 0, song);
|
|
|
|
|
|
|
|
|
|
// 更新播放列表
|
|
|
|
|
state.playList = playList;
|
|
|
|
|
state.playListIndex = playList.findIndex((item) => item.id === state.playMusic.id);
|
|
|
|
|
localStorage.setItem('playList', JSON.stringify(playList));
|
|
|
|
|
localStorage.setItem('playListIndex', state.playListIndex.toString());
|
|
|
|
|
},
|
2024-12-08 21:50:58 +08:00
|
|
|
setSetData(state: State, setData: any) {
|
2024-05-16 18:54:30 +08:00
|
|
|
state.setData = setData;
|
2024-12-08 21:50:58 +08:00
|
|
|
if (isElectron) {
|
2025-01-01 02:25:18 +08:00
|
|
|
// (window as any).electron.ipcRenderer.setStoreValue(
|
|
|
|
|
// 'set',
|
|
|
|
|
// JSON.parse(JSON.stringify(setData))
|
|
|
|
|
// );
|
2025-01-10 22:49:55 +08:00
|
|
|
window.electron.ipcRenderer.send(
|
|
|
|
|
'set-store-value',
|
|
|
|
|
'set',
|
|
|
|
|
JSON.parse(JSON.stringify(setData))
|
|
|
|
|
);
|
2024-12-08 21:50:58 +08:00
|
|
|
} else {
|
|
|
|
|
localStorage.setItem('appSettings', JSON.stringify(setData));
|
|
|
|
|
}
|
|
|
|
|
},
|
2025-01-04 16:58:08 +08:00
|
|
|
async addToFavorite(state: State, songId: number) {
|
2025-01-11 18:38:34 +08:00
|
|
|
// 先添加到本地
|
|
|
|
|
if (!state.favoriteList.includes(songId)) {
|
|
|
|
|
state.favoriteList = [songId, ...state.favoriteList];
|
|
|
|
|
localStorage.setItem('favoriteList', JSON.stringify(state.favoriteList));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 如果用户已登录,尝试同步到服务器
|
|
|
|
|
if (state.user && localStorage.getItem('token')) {
|
|
|
|
|
try {
|
|
|
|
|
await likeSong(songId, true);
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error('同步收藏到服务器失败,但已保存在本地:', error);
|
2025-01-04 16:58:08 +08:00
|
|
|
}
|
2024-12-09 21:55:08 +08:00
|
|
|
}
|
|
|
|
|
},
|
2025-01-04 16:58:08 +08:00
|
|
|
async removeFromFavorite(state: State, songId: number) {
|
2025-01-11 18:38:34 +08:00
|
|
|
// 先从本地移除
|
|
|
|
|
state.favoriteList = state.favoriteList.filter((id) => id !== songId);
|
|
|
|
|
localStorage.setItem('favoriteList', JSON.stringify(state.favoriteList));
|
|
|
|
|
|
|
|
|
|
// 如果用户已登录,尝试同步到服务器
|
|
|
|
|
if (state.user && localStorage.getItem('token')) {
|
|
|
|
|
try {
|
|
|
|
|
await likeSong(songId, false);
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error('同步取消收藏到服务器失败,但已在本地移除:', error);
|
|
|
|
|
}
|
2025-01-04 16:58:08 +08:00
|
|
|
}
|
2024-12-09 21:55:08 +08:00
|
|
|
},
|
2024-12-15 01:40:13 +08:00
|
|
|
togglePlayMode(state: State) {
|
2024-12-29 00:43:39 +08:00
|
|
|
state.playMode = (state.playMode + 1) % 3;
|
2024-12-15 01:40:13 +08:00
|
|
|
localStorage.setItem('playMode', JSON.stringify(state.playMode));
|
|
|
|
|
},
|
2024-12-28 16:43:52 +08:00
|
|
|
toggleTheme(state: State) {
|
|
|
|
|
state.theme = state.theme === 'dark' ? 'light' : 'dark';
|
|
|
|
|
applyTheme(state.theme);
|
2025-01-04 16:13:37 +08:00
|
|
|
},
|
2025-01-06 22:03:50 +08:00
|
|
|
setShowUpdateModal(state, value) {
|
2025-01-10 22:49:55 +08:00
|
|
|
state.showUpdateModal = value;
|
2025-01-06 22:03:50 +08:00
|
|
|
},
|
|
|
|
|
logout(state: State) {
|
2025-01-25 23:53:20 +08:00
|
|
|
logout().then(() => {
|
|
|
|
|
state.user = null;
|
|
|
|
|
localStorage.removeItem('user');
|
|
|
|
|
localStorage.removeItem('token');
|
|
|
|
|
});
|
2025-01-13 22:13:46 +08:00
|
|
|
},
|
|
|
|
|
setShowArtistDrawer(state, show: boolean) {
|
|
|
|
|
state.showArtistDrawer = show;
|
|
|
|
|
if (!show) {
|
|
|
|
|
state.currentArtistId = null;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
setCurrentArtistId(state, id: number) {
|
|
|
|
|
state.currentArtistId = id;
|
2025-01-17 22:45:59 +08:00
|
|
|
},
|
|
|
|
|
setSystemFonts(state, fonts: string[]) {
|
|
|
|
|
state.systemFonts = [
|
|
|
|
|
{ label: '系统默认', value: 'system-ui' },
|
|
|
|
|
...fonts.map((font) => ({
|
|
|
|
|
label: font,
|
|
|
|
|
value: font
|
|
|
|
|
}))
|
|
|
|
|
];
|
2025-01-26 00:20:08 +08:00
|
|
|
},
|
|
|
|
|
setShowDownloadDrawer(state: State, show: boolean) {
|
|
|
|
|
state.showDownloadDrawer = show;
|
2025-02-19 01:01:43 +08:00
|
|
|
},
|
|
|
|
|
setLanguage(state: State, language: string) {
|
|
|
|
|
state.setData.language = language;
|
|
|
|
|
if (isElectron) {
|
|
|
|
|
window.electron.ipcRenderer.send('set-store-value', 'set.language', language);
|
|
|
|
|
} else {
|
|
|
|
|
localStorage.setItem('appSettings', JSON.stringify(state.setData));
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
getLanguage(state: State) {
|
|
|
|
|
return state.setData.language;
|
2025-01-01 02:25:18 +08:00
|
|
|
}
|
2024-12-08 21:50:58 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const actions = {
|
|
|
|
|
initializeSettings({ commit }: { commit: any }) {
|
|
|
|
|
if (isElectron) {
|
2025-01-01 02:25:18 +08:00
|
|
|
const setData = window.electron.ipcRenderer.sendSync('get-store-value', 'set');
|
2025-01-17 22:45:59 +08:00
|
|
|
commit('setSetData', {
|
|
|
|
|
...defaultSettings,
|
|
|
|
|
...setData
|
|
|
|
|
});
|
2024-12-08 21:50:58 +08:00
|
|
|
} else {
|
|
|
|
|
const savedSettings = localStorage.getItem('appSettings');
|
|
|
|
|
if (savedSettings) {
|
|
|
|
|
commit('setSetData', {
|
|
|
|
|
...defaultSettings,
|
2025-01-01 02:25:18 +08:00
|
|
|
...JSON.parse(savedSettings)
|
2024-12-08 21:50:58 +08:00
|
|
|
});
|
|
|
|
|
} else {
|
|
|
|
|
commit('setSetData', defaultSettings);
|
|
|
|
|
}
|
2024-12-05 21:29:13 +08:00
|
|
|
}
|
2023-12-28 10:45:11 +08:00
|
|
|
},
|
2024-12-28 16:43:52 +08:00
|
|
|
initializeTheme({ state }: { state: State }) {
|
|
|
|
|
applyTheme(state.theme);
|
2025-01-04 16:58:08 +08:00
|
|
|
},
|
|
|
|
|
async initializeFavoriteList({ state }: { state: State }) {
|
2025-01-11 18:38:34 +08:00
|
|
|
// 先获取本地收藏列表
|
|
|
|
|
const localFavoriteList = localStorage.getItem('favoriteList');
|
|
|
|
|
const localList: number[] = localFavoriteList ? JSON.parse(localFavoriteList) : [];
|
|
|
|
|
|
|
|
|
|
// 如果用户已登录,尝试获取服务器收藏列表并合并
|
2025-01-25 23:53:20 +08:00
|
|
|
if (state.user && state.user.userId) {
|
2025-01-11 18:38:34 +08:00
|
|
|
try {
|
2025-01-25 23:53:20 +08:00
|
|
|
const res = await getLikedList(state.user.userId);
|
2025-01-06 22:03:50 +08:00
|
|
|
if (res.data?.ids) {
|
2025-01-11 18:38:34 +08:00
|
|
|
// 合并本地和服务器的收藏列表,去重
|
|
|
|
|
const serverList = res.data.ids.reverse();
|
|
|
|
|
const mergedList = Array.from(new Set([...localList, ...serverList]));
|
|
|
|
|
state.favoriteList = mergedList;
|
|
|
|
|
} else {
|
|
|
|
|
state.favoriteList = localList;
|
2025-01-06 22:03:50 +08:00
|
|
|
}
|
2025-01-11 18:38:34 +08:00
|
|
|
} catch (error) {
|
|
|
|
|
console.error('获取服务器收藏列表失败,使用本地数据:', error);
|
|
|
|
|
state.favoriteList = localList;
|
2025-01-04 16:58:08 +08:00
|
|
|
}
|
2025-01-11 18:38:34 +08:00
|
|
|
} else {
|
|
|
|
|
state.favoriteList = localList;
|
2025-01-04 16:58:08 +08:00
|
|
|
}
|
2025-01-11 18:38:34 +08:00
|
|
|
|
|
|
|
|
// 更新本地存储
|
|
|
|
|
localStorage.setItem('favoriteList', JSON.stringify(state.favoriteList));
|
2025-01-13 22:13:46 +08:00
|
|
|
},
|
|
|
|
|
showArtist({ commit }, id: number) {
|
|
|
|
|
commit('setCurrentArtistId', id);
|
2025-01-17 22:45:59 +08:00
|
|
|
},
|
|
|
|
|
async initializeSystemFonts({ commit, state }) {
|
2025-02-28 19:52:00 +08:00
|
|
|
if (!isElectron) return;
|
2025-01-17 22:45:59 +08:00
|
|
|
// 如果已经有字体列表(不只是默认字体),则不重复获取
|
|
|
|
|
if (state.systemFonts.length > 1) return;
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
const fonts = await window.api.invoke('get-system-fonts');
|
|
|
|
|
commit('setSystemFonts', fonts);
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error('获取系统字体失败:', error);
|
|
|
|
|
}
|
2025-01-22 22:16:46 +08:00
|
|
|
},
|
|
|
|
|
async initializePlayState({ state, commit }: { state: State; commit: any }) {
|
|
|
|
|
const savedPlayList = getLocalStorageItem('playList', []);
|
|
|
|
|
const savedPlayMusic = getLocalStorageItem('currentPlayMusic', null);
|
|
|
|
|
|
|
|
|
|
if (savedPlayList.length > 0) {
|
|
|
|
|
commit('setPlayList', savedPlayList);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (savedPlayMusic && Object.keys(savedPlayMusic).length > 0) {
|
|
|
|
|
// 不直接使用保存的 URL,而是重新获取
|
|
|
|
|
try {
|
|
|
|
|
// 使用 handlePlayMusic 来重新获取音乐 URL
|
|
|
|
|
|
|
|
|
|
// 根据自动播放设置决定是否恢复播放状态
|
|
|
|
|
const shouldAutoPlay = state.setData.autoPlay;
|
|
|
|
|
if (shouldAutoPlay) {
|
|
|
|
|
await handlePlayMusic(state, savedPlayMusic);
|
|
|
|
|
}
|
|
|
|
|
state.play = shouldAutoPlay;
|
|
|
|
|
state.isPlay = true;
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error('重新获取音乐链接失败:', error);
|
|
|
|
|
// 清除无效的播放状态
|
|
|
|
|
state.play = false;
|
|
|
|
|
state.isPlay = false;
|
|
|
|
|
state.playMusic = {} as SongResult;
|
|
|
|
|
state.playMusicUrl = '';
|
|
|
|
|
localStorage.removeItem('currentPlayMusic');
|
|
|
|
|
localStorage.removeItem('currentPlayMusicUrl');
|
|
|
|
|
localStorage.removeItem('isPlaying');
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-02-19 01:01:43 +08:00
|
|
|
},
|
|
|
|
|
initializeLanguage({ state }: { state: State }) {
|
|
|
|
|
state.setData.language = getLocalStorageItem('appSettings', { language: 'zh-CN' }).language;
|
|
|
|
|
if (isElectron) {
|
2025-02-19 01:31:19 +08:00
|
|
|
window.electron.ipcRenderer.send('set-store-value', 'set.language', state.setData.language);
|
2025-02-19 01:01:43 +08:00
|
|
|
} else {
|
|
|
|
|
localStorage.setItem('appSettings', JSON.stringify(state.setData));
|
|
|
|
|
}
|
2025-01-01 02:25:18 +08:00
|
|
|
}
|
2024-05-16 18:54:30 +08:00
|
|
|
};
|
2021-07-20 15:29:20 +08:00
|
|
|
|
|
|
|
|
const store = createStore({
|
2024-05-16 18:54:30 +08:00
|
|
|
state,
|
|
|
|
|
mutations,
|
2025-01-01 02:25:18 +08:00
|
|
|
actions
|
2024-05-16 18:54:30 +08:00
|
|
|
});
|
2021-07-20 15:29:20 +08:00
|
|
|
|
2024-05-16 18:54:30 +08:00
|
|
|
export default store;
|